diff options
500 files changed, 979 insertions, 86568 deletions
diff --git a/bootstrap/bin/start.boot b/bootstrap/bin/start.boot Binary files differindex db337a8632..c152bd51cb 100644 --- a/bootstrap/bin/start.boot +++ b/bootstrap/bin/start.boot diff --git a/bootstrap/bin/start_clean.boot b/bootstrap/bin/start_clean.boot Binary files differindex db337a8632..c152bd51cb 100644 --- a/bootstrap/bin/start_clean.boot +++ b/bootstrap/bin/start_clean.boot diff --git a/bootstrap/lib/compiler/ebin/beam_asm.beam b/bootstrap/lib/compiler/ebin/beam_asm.beam Binary files differindex 75bae8060e..bc93332a44 100644 --- a/bootstrap/lib/compiler/ebin/beam_asm.beam +++ b/bootstrap/lib/compiler/ebin/beam_asm.beam diff --git a/bootstrap/lib/compiler/ebin/beam_block.beam b/bootstrap/lib/compiler/ebin/beam_block.beam Binary files differindex 370f328a96..a8465b366c 100644 --- a/bootstrap/lib/compiler/ebin/beam_block.beam +++ b/bootstrap/lib/compiler/ebin/beam_block.beam diff --git a/bootstrap/lib/compiler/ebin/beam_bool.beam b/bootstrap/lib/compiler/ebin/beam_bool.beam Binary files differindex 196e442556..ef7f24b0db 100644 --- a/bootstrap/lib/compiler/ebin/beam_bool.beam +++ b/bootstrap/lib/compiler/ebin/beam_bool.beam diff --git a/bootstrap/lib/compiler/ebin/beam_bsm.beam b/bootstrap/lib/compiler/ebin/beam_bsm.beam Binary files differindex 9e3d9832b1..e50bb669cf 100644 --- a/bootstrap/lib/compiler/ebin/beam_bsm.beam +++ b/bootstrap/lib/compiler/ebin/beam_bsm.beam diff --git a/bootstrap/lib/compiler/ebin/beam_clean.beam b/bootstrap/lib/compiler/ebin/beam_clean.beam Binary files differindex 3fe3225c14..3d9d9f3625 100644 --- a/bootstrap/lib/compiler/ebin/beam_clean.beam +++ b/bootstrap/lib/compiler/ebin/beam_clean.beam diff --git a/bootstrap/lib/compiler/ebin/beam_dead.beam b/bootstrap/lib/compiler/ebin/beam_dead.beam Binary files differindex b664286f0f..dc924a2905 100644 --- a/bootstrap/lib/compiler/ebin/beam_dead.beam +++ b/bootstrap/lib/compiler/ebin/beam_dead.beam diff --git a/bootstrap/lib/compiler/ebin/beam_dict.beam b/bootstrap/lib/compiler/ebin/beam_dict.beam Binary files differindex 50771f4e90..165d848a9a 100644 --- a/bootstrap/lib/compiler/ebin/beam_dict.beam +++ b/bootstrap/lib/compiler/ebin/beam_dict.beam diff --git a/bootstrap/lib/compiler/ebin/beam_disasm.beam b/bootstrap/lib/compiler/ebin/beam_disasm.beam Binary files differindex 959e989b6d..eba17a7bbd 100644 --- a/bootstrap/lib/compiler/ebin/beam_disasm.beam +++ b/bootstrap/lib/compiler/ebin/beam_disasm.beam diff --git a/bootstrap/lib/compiler/ebin/beam_except.beam b/bootstrap/lib/compiler/ebin/beam_except.beam Binary files differindex e340e0f4c6..16d2a29491 100644 --- a/bootstrap/lib/compiler/ebin/beam_except.beam +++ b/bootstrap/lib/compiler/ebin/beam_except.beam diff --git a/bootstrap/lib/compiler/ebin/beam_flatten.beam b/bootstrap/lib/compiler/ebin/beam_flatten.beam Binary files differindex 8f06d7270c..f0a3dfac91 100644 --- a/bootstrap/lib/compiler/ebin/beam_flatten.beam +++ b/bootstrap/lib/compiler/ebin/beam_flatten.beam diff --git a/bootstrap/lib/compiler/ebin/beam_jump.beam b/bootstrap/lib/compiler/ebin/beam_jump.beam Binary files differindex c296bdd18d..5c0f4a9996 100644 --- a/bootstrap/lib/compiler/ebin/beam_jump.beam +++ b/bootstrap/lib/compiler/ebin/beam_jump.beam diff --git a/bootstrap/lib/compiler/ebin/beam_peep.beam b/bootstrap/lib/compiler/ebin/beam_peep.beam Binary files differindex a21cc7e1e1..214fa56911 100644 --- a/bootstrap/lib/compiler/ebin/beam_peep.beam +++ b/bootstrap/lib/compiler/ebin/beam_peep.beam diff --git a/bootstrap/lib/compiler/ebin/beam_receive.beam b/bootstrap/lib/compiler/ebin/beam_receive.beam Binary files differindex 2f1fcc9fe1..5da32b5db6 100644 --- a/bootstrap/lib/compiler/ebin/beam_receive.beam +++ b/bootstrap/lib/compiler/ebin/beam_receive.beam diff --git a/bootstrap/lib/compiler/ebin/beam_split.beam b/bootstrap/lib/compiler/ebin/beam_split.beam Binary files differindex 2271c15ee4..64a946db25 100644 --- a/bootstrap/lib/compiler/ebin/beam_split.beam +++ b/bootstrap/lib/compiler/ebin/beam_split.beam diff --git a/bootstrap/lib/compiler/ebin/beam_trim.beam b/bootstrap/lib/compiler/ebin/beam_trim.beam Binary files differindex b655cdb4cf..b844602370 100644 --- a/bootstrap/lib/compiler/ebin/beam_trim.beam +++ b/bootstrap/lib/compiler/ebin/beam_trim.beam diff --git a/bootstrap/lib/compiler/ebin/beam_type.beam b/bootstrap/lib/compiler/ebin/beam_type.beam Binary files differindex 5fd60ebee1..7f80c1a691 100644 --- a/bootstrap/lib/compiler/ebin/beam_type.beam +++ b/bootstrap/lib/compiler/ebin/beam_type.beam diff --git a/bootstrap/lib/compiler/ebin/beam_utils.beam b/bootstrap/lib/compiler/ebin/beam_utils.beam Binary files differindex 9360e60827..314c300b1f 100644 --- a/bootstrap/lib/compiler/ebin/beam_utils.beam +++ b/bootstrap/lib/compiler/ebin/beam_utils.beam diff --git a/bootstrap/lib/compiler/ebin/beam_validator.beam b/bootstrap/lib/compiler/ebin/beam_validator.beam Binary files differindex b8a3491caa..e769659772 100644 --- a/bootstrap/lib/compiler/ebin/beam_validator.beam +++ b/bootstrap/lib/compiler/ebin/beam_validator.beam diff --git a/bootstrap/lib/compiler/ebin/cerl.beam b/bootstrap/lib/compiler/ebin/cerl.beam Binary files differindex a10f017869..2cba88e8c3 100644 --- a/bootstrap/lib/compiler/ebin/cerl.beam +++ b/bootstrap/lib/compiler/ebin/cerl.beam diff --git a/bootstrap/lib/compiler/ebin/cerl_clauses.beam b/bootstrap/lib/compiler/ebin/cerl_clauses.beam Binary files differindex 97e96c47bd..ec41e1098b 100644 --- a/bootstrap/lib/compiler/ebin/cerl_clauses.beam +++ b/bootstrap/lib/compiler/ebin/cerl_clauses.beam diff --git a/bootstrap/lib/compiler/ebin/cerl_inline.beam b/bootstrap/lib/compiler/ebin/cerl_inline.beam Binary files differindex a7094e5540..bcb9802ba3 100644 --- a/bootstrap/lib/compiler/ebin/cerl_inline.beam +++ b/bootstrap/lib/compiler/ebin/cerl_inline.beam diff --git a/bootstrap/lib/compiler/ebin/cerl_trees.beam b/bootstrap/lib/compiler/ebin/cerl_trees.beam Binary files differindex 49528c1635..ce81e67924 100644 --- a/bootstrap/lib/compiler/ebin/cerl_trees.beam +++ b/bootstrap/lib/compiler/ebin/cerl_trees.beam diff --git a/bootstrap/lib/compiler/ebin/compile.beam b/bootstrap/lib/compiler/ebin/compile.beam Binary files differindex 9de2c1a0cf..c2114e516a 100644 --- a/bootstrap/lib/compiler/ebin/compile.beam +++ b/bootstrap/lib/compiler/ebin/compile.beam diff --git a/bootstrap/lib/compiler/ebin/compiler.app b/bootstrap/lib/compiler/ebin/compiler.app index 19ad28915a..83554a68a5 100644 --- a/bootstrap/lib/compiler/ebin/compiler.app +++ b/bootstrap/lib/compiler/ebin/compiler.app @@ -18,7 +18,7 @@ {application, compiler, [{description, "ERTS CXC 138 10"}, - {vsn, "4.9.1"}, + {vsn, "4.9.4"}, {modules, [ beam_a, beam_asm, diff --git a/bootstrap/lib/compiler/ebin/core_lib.beam b/bootstrap/lib/compiler/ebin/core_lib.beam Binary files differindex d03dfe646c..5e40c086c2 100644 --- a/bootstrap/lib/compiler/ebin/core_lib.beam +++ b/bootstrap/lib/compiler/ebin/core_lib.beam diff --git a/bootstrap/lib/compiler/ebin/core_lint.beam b/bootstrap/lib/compiler/ebin/core_lint.beam Binary files differindex bfe9914644..831e2acc43 100644 --- a/bootstrap/lib/compiler/ebin/core_lint.beam +++ b/bootstrap/lib/compiler/ebin/core_lint.beam diff --git a/bootstrap/lib/compiler/ebin/core_parse.beam b/bootstrap/lib/compiler/ebin/core_parse.beam Binary files differindex 80820731c1..3f9c212fe7 100644 --- a/bootstrap/lib/compiler/ebin/core_parse.beam +++ b/bootstrap/lib/compiler/ebin/core_parse.beam diff --git a/bootstrap/lib/compiler/ebin/core_pp.beam b/bootstrap/lib/compiler/ebin/core_pp.beam Binary files differindex e96e4bc654..f7e0dc40ae 100644 --- a/bootstrap/lib/compiler/ebin/core_pp.beam +++ b/bootstrap/lib/compiler/ebin/core_pp.beam diff --git a/bootstrap/lib/compiler/ebin/core_scan.beam b/bootstrap/lib/compiler/ebin/core_scan.beam Binary files differindex f14eda5a33..f4742b98db 100644 --- a/bootstrap/lib/compiler/ebin/core_scan.beam +++ b/bootstrap/lib/compiler/ebin/core_scan.beam diff --git a/bootstrap/lib/compiler/ebin/rec_env.beam b/bootstrap/lib/compiler/ebin/rec_env.beam Binary files differindex edabfdf444..4bd37b16c0 100644 --- a/bootstrap/lib/compiler/ebin/rec_env.beam +++ b/bootstrap/lib/compiler/ebin/rec_env.beam diff --git a/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam b/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam Binary files differindex 11c194a5cc..a3a8de17c0 100644 --- a/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam +++ b/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam diff --git a/bootstrap/lib/compiler/ebin/sys_core_fold.beam b/bootstrap/lib/compiler/ebin/sys_core_fold.beam Binary files differindex 9aa5ac5a90..b170623982 100644 --- a/bootstrap/lib/compiler/ebin/sys_core_fold.beam +++ b/bootstrap/lib/compiler/ebin/sys_core_fold.beam diff --git a/bootstrap/lib/compiler/ebin/sys_core_inline.beam b/bootstrap/lib/compiler/ebin/sys_core_inline.beam Binary files differindex d8eabeda7c..29e35496b6 100644 --- a/bootstrap/lib/compiler/ebin/sys_core_inline.beam +++ b/bootstrap/lib/compiler/ebin/sys_core_inline.beam diff --git a/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam b/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam Binary files differindex d3b213e75a..f7621bbc3f 100644 --- a/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam +++ b/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam diff --git a/bootstrap/lib/compiler/ebin/sys_pre_expand.beam b/bootstrap/lib/compiler/ebin/sys_pre_expand.beam Binary files differindex 1e27f9e222..d726c3ca07 100644 --- a/bootstrap/lib/compiler/ebin/sys_pre_expand.beam +++ b/bootstrap/lib/compiler/ebin/sys_pre_expand.beam diff --git a/bootstrap/lib/compiler/ebin/v3_codegen.beam b/bootstrap/lib/compiler/ebin/v3_codegen.beam Binary files differindex 5b06d8656e..e38d58d349 100644 --- a/bootstrap/lib/compiler/ebin/v3_codegen.beam +++ b/bootstrap/lib/compiler/ebin/v3_codegen.beam diff --git a/bootstrap/lib/compiler/ebin/v3_core.beam b/bootstrap/lib/compiler/ebin/v3_core.beam Binary files differindex db2c79cae7..2f0d81251a 100644 --- a/bootstrap/lib/compiler/ebin/v3_core.beam +++ b/bootstrap/lib/compiler/ebin/v3_core.beam diff --git a/bootstrap/lib/compiler/ebin/v3_kernel.beam b/bootstrap/lib/compiler/ebin/v3_kernel.beam Binary files differindex a0afb3fac2..a3d29bed82 100644 --- a/bootstrap/lib/compiler/ebin/v3_kernel.beam +++ b/bootstrap/lib/compiler/ebin/v3_kernel.beam diff --git a/bootstrap/lib/compiler/ebin/v3_kernel_pp.beam b/bootstrap/lib/compiler/ebin/v3_kernel_pp.beam Binary files differindex 8f18f5ff25..1b2d02c1d5 100644 --- a/bootstrap/lib/compiler/ebin/v3_kernel_pp.beam +++ b/bootstrap/lib/compiler/ebin/v3_kernel_pp.beam diff --git a/bootstrap/lib/compiler/ebin/v3_life.beam b/bootstrap/lib/compiler/ebin/v3_life.beam Binary files differindex 2392863c3d..bb0ceefdd1 100644 --- a/bootstrap/lib/compiler/ebin/v3_life.beam +++ b/bootstrap/lib/compiler/ebin/v3_life.beam diff --git a/bootstrap/lib/kernel/ebin/application_controller.beam b/bootstrap/lib/kernel/ebin/application_controller.beam Binary files differindex b7081212cb..73ce589a8c 100644 --- a/bootstrap/lib/kernel/ebin/application_controller.beam +++ b/bootstrap/lib/kernel/ebin/application_controller.beam diff --git a/bootstrap/lib/kernel/ebin/application_master.beam b/bootstrap/lib/kernel/ebin/application_master.beam Binary files differindex f44cd9c9ab..14329fa051 100644 --- a/bootstrap/lib/kernel/ebin/application_master.beam +++ b/bootstrap/lib/kernel/ebin/application_master.beam diff --git a/bootstrap/lib/kernel/ebin/application_starter.beam b/bootstrap/lib/kernel/ebin/application_starter.beam Binary files differindex 06d8098af9..f5059a487a 100644 --- a/bootstrap/lib/kernel/ebin/application_starter.beam +++ b/bootstrap/lib/kernel/ebin/application_starter.beam diff --git a/bootstrap/lib/kernel/ebin/auth.beam b/bootstrap/lib/kernel/ebin/auth.beam Binary files differindex 62617ce3ef..3cc607cb14 100644 --- a/bootstrap/lib/kernel/ebin/auth.beam +++ b/bootstrap/lib/kernel/ebin/auth.beam diff --git a/bootstrap/lib/kernel/ebin/code.beam b/bootstrap/lib/kernel/ebin/code.beam Binary files differindex 2994e5257a..5428f2cf0c 100644 --- a/bootstrap/lib/kernel/ebin/code.beam +++ b/bootstrap/lib/kernel/ebin/code.beam diff --git a/bootstrap/lib/kernel/ebin/code_server.beam b/bootstrap/lib/kernel/ebin/code_server.beam Binary files differindex 896e3cb61b..265d714238 100644 --- a/bootstrap/lib/kernel/ebin/code_server.beam +++ b/bootstrap/lib/kernel/ebin/code_server.beam diff --git a/bootstrap/lib/kernel/ebin/disk_log.beam b/bootstrap/lib/kernel/ebin/disk_log.beam Binary files differindex 63253eeaaa..1b160a7c12 100644 --- a/bootstrap/lib/kernel/ebin/disk_log.beam +++ b/bootstrap/lib/kernel/ebin/disk_log.beam diff --git a/bootstrap/lib/kernel/ebin/disk_log_1.beam b/bootstrap/lib/kernel/ebin/disk_log_1.beam Binary files differindex 49c6b674cd..12d2523889 100644 --- a/bootstrap/lib/kernel/ebin/disk_log_1.beam +++ b/bootstrap/lib/kernel/ebin/disk_log_1.beam diff --git a/bootstrap/lib/kernel/ebin/disk_log_server.beam b/bootstrap/lib/kernel/ebin/disk_log_server.beam Binary files differindex 7c886a6ff3..ec9422d41b 100644 --- a/bootstrap/lib/kernel/ebin/disk_log_server.beam +++ b/bootstrap/lib/kernel/ebin/disk_log_server.beam diff --git a/bootstrap/lib/kernel/ebin/dist_ac.beam b/bootstrap/lib/kernel/ebin/dist_ac.beam Binary files differindex c2e361d8c6..9d3f7548b6 100644 --- a/bootstrap/lib/kernel/ebin/dist_ac.beam +++ b/bootstrap/lib/kernel/ebin/dist_ac.beam diff --git a/bootstrap/lib/kernel/ebin/dist_util.beam b/bootstrap/lib/kernel/ebin/dist_util.beam Binary files differindex 84738305f7..4cd98bd217 100644 --- a/bootstrap/lib/kernel/ebin/dist_util.beam +++ b/bootstrap/lib/kernel/ebin/dist_util.beam diff --git a/bootstrap/lib/kernel/ebin/erl_boot_server.beam b/bootstrap/lib/kernel/ebin/erl_boot_server.beam Binary files differindex c84d69c1f5..7e43b0fb36 100644 --- a/bootstrap/lib/kernel/ebin/erl_boot_server.beam +++ b/bootstrap/lib/kernel/ebin/erl_boot_server.beam diff --git a/bootstrap/lib/kernel/ebin/erl_ddll.beam b/bootstrap/lib/kernel/ebin/erl_ddll.beam Binary files differindex 90c831b045..e15e49d61c 100644 --- a/bootstrap/lib/kernel/ebin/erl_ddll.beam +++ b/bootstrap/lib/kernel/ebin/erl_ddll.beam diff --git a/bootstrap/lib/kernel/ebin/erl_epmd.beam b/bootstrap/lib/kernel/ebin/erl_epmd.beam Binary files differindex 143147298c..1a74da7f1f 100644 --- a/bootstrap/lib/kernel/ebin/erl_epmd.beam +++ b/bootstrap/lib/kernel/ebin/erl_epmd.beam diff --git a/bootstrap/lib/kernel/ebin/erl_reply.beam b/bootstrap/lib/kernel/ebin/erl_reply.beam Binary files differindex 2a2e9dbc92..79fb539bd3 100644 --- a/bootstrap/lib/kernel/ebin/erl_reply.beam +++ b/bootstrap/lib/kernel/ebin/erl_reply.beam diff --git a/bootstrap/lib/kernel/ebin/error_logger.beam b/bootstrap/lib/kernel/ebin/error_logger.beam Binary files differindex bf3963693a..10f7a0b984 100644 --- a/bootstrap/lib/kernel/ebin/error_logger.beam +++ b/bootstrap/lib/kernel/ebin/error_logger.beam diff --git a/bootstrap/lib/kernel/ebin/erts_debug.beam b/bootstrap/lib/kernel/ebin/erts_debug.beam Binary files differindex d915dc0891..7d059d10cf 100644 --- a/bootstrap/lib/kernel/ebin/erts_debug.beam +++ b/bootstrap/lib/kernel/ebin/erts_debug.beam diff --git a/bootstrap/lib/kernel/ebin/file.beam b/bootstrap/lib/kernel/ebin/file.beam Binary files differindex 04f6da0687..3141747738 100644 --- a/bootstrap/lib/kernel/ebin/file.beam +++ b/bootstrap/lib/kernel/ebin/file.beam diff --git a/bootstrap/lib/kernel/ebin/file_io_server.beam b/bootstrap/lib/kernel/ebin/file_io_server.beam Binary files differindex 6916cdcc58..a611bdc2b4 100644 --- a/bootstrap/lib/kernel/ebin/file_io_server.beam +++ b/bootstrap/lib/kernel/ebin/file_io_server.beam diff --git a/bootstrap/lib/kernel/ebin/file_server.beam b/bootstrap/lib/kernel/ebin/file_server.beam Binary files differindex d656c5e610..48352e9dfd 100644 --- a/bootstrap/lib/kernel/ebin/file_server.beam +++ b/bootstrap/lib/kernel/ebin/file_server.beam diff --git a/bootstrap/lib/kernel/ebin/gen_sctp.beam b/bootstrap/lib/kernel/ebin/gen_sctp.beam Binary files differindex 81f496edb5..e2bb806f2b 100644 --- a/bootstrap/lib/kernel/ebin/gen_sctp.beam +++ b/bootstrap/lib/kernel/ebin/gen_sctp.beam diff --git a/bootstrap/lib/kernel/ebin/global.beam b/bootstrap/lib/kernel/ebin/global.beam Binary files differindex b404e24cdf..c44ac55d16 100644 --- a/bootstrap/lib/kernel/ebin/global.beam +++ b/bootstrap/lib/kernel/ebin/global.beam diff --git a/bootstrap/lib/kernel/ebin/global_group.beam b/bootstrap/lib/kernel/ebin/global_group.beam Binary files differindex e0ca1de771..d11f60015a 100644 --- a/bootstrap/lib/kernel/ebin/global_group.beam +++ b/bootstrap/lib/kernel/ebin/global_group.beam diff --git a/bootstrap/lib/kernel/ebin/group.beam b/bootstrap/lib/kernel/ebin/group.beam Binary files differindex f151913df2..412b8e0007 100644 --- a/bootstrap/lib/kernel/ebin/group.beam +++ b/bootstrap/lib/kernel/ebin/group.beam diff --git a/bootstrap/lib/kernel/ebin/heart.beam b/bootstrap/lib/kernel/ebin/heart.beam Binary files differindex 84b12d081c..d4972ecdd2 100644 --- a/bootstrap/lib/kernel/ebin/heart.beam +++ b/bootstrap/lib/kernel/ebin/heart.beam diff --git a/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam b/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam Binary files differindex c46eced0e4..31a54ecef4 100644 --- a/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam +++ b/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam diff --git a/bootstrap/lib/kernel/ebin/inet.beam b/bootstrap/lib/kernel/ebin/inet.beam Binary files differindex 16749a3948..261e7fa6d0 100644 --- a/bootstrap/lib/kernel/ebin/inet.beam +++ b/bootstrap/lib/kernel/ebin/inet.beam diff --git a/bootstrap/lib/kernel/ebin/inet6_tcp.beam b/bootstrap/lib/kernel/ebin/inet6_tcp.beam Binary files differindex dc592e336c..036b0495c8 100644 --- a/bootstrap/lib/kernel/ebin/inet6_tcp.beam +++ b/bootstrap/lib/kernel/ebin/inet6_tcp.beam diff --git a/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam b/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam Binary files differindex 4b5543b994..83305c1826 100644 --- a/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam +++ b/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam diff --git a/bootstrap/lib/kernel/ebin/inet6_udp.beam b/bootstrap/lib/kernel/ebin/inet6_udp.beam Binary files differindex 2c94263b99..73f0b52b90 100644 --- a/bootstrap/lib/kernel/ebin/inet6_udp.beam +++ b/bootstrap/lib/kernel/ebin/inet6_udp.beam diff --git a/bootstrap/lib/kernel/ebin/inet_config.beam b/bootstrap/lib/kernel/ebin/inet_config.beam Binary files differindex 7db3eddc6e..03b42209e6 100644 --- a/bootstrap/lib/kernel/ebin/inet_config.beam +++ b/bootstrap/lib/kernel/ebin/inet_config.beam diff --git a/bootstrap/lib/kernel/ebin/inet_db.beam b/bootstrap/lib/kernel/ebin/inet_db.beam Binary files differindex d55c06c002..45e7d9e0d0 100644 --- a/bootstrap/lib/kernel/ebin/inet_db.beam +++ b/bootstrap/lib/kernel/ebin/inet_db.beam diff --git a/bootstrap/lib/kernel/ebin/inet_dns.beam b/bootstrap/lib/kernel/ebin/inet_dns.beam Binary files differindex b962e1ef21..92dabef630 100644 --- a/bootstrap/lib/kernel/ebin/inet_dns.beam +++ b/bootstrap/lib/kernel/ebin/inet_dns.beam diff --git a/bootstrap/lib/kernel/ebin/inet_gethost_native.beam b/bootstrap/lib/kernel/ebin/inet_gethost_native.beam Binary files differindex 03cb896d1c..098c397936 100644 --- a/bootstrap/lib/kernel/ebin/inet_gethost_native.beam +++ b/bootstrap/lib/kernel/ebin/inet_gethost_native.beam diff --git a/bootstrap/lib/kernel/ebin/inet_hosts.beam b/bootstrap/lib/kernel/ebin/inet_hosts.beam Binary files differindex 78e81ce23d..3e70a8b8c1 100644 --- a/bootstrap/lib/kernel/ebin/inet_hosts.beam +++ b/bootstrap/lib/kernel/ebin/inet_hosts.beam diff --git a/bootstrap/lib/kernel/ebin/inet_parse.beam b/bootstrap/lib/kernel/ebin/inet_parse.beam Binary files differindex d2ef990dba..90ccd8b440 100644 --- a/bootstrap/lib/kernel/ebin/inet_parse.beam +++ b/bootstrap/lib/kernel/ebin/inet_parse.beam diff --git a/bootstrap/lib/kernel/ebin/inet_res.beam b/bootstrap/lib/kernel/ebin/inet_res.beam Binary files differindex 88d1f5f2c7..c590292850 100644 --- a/bootstrap/lib/kernel/ebin/inet_res.beam +++ b/bootstrap/lib/kernel/ebin/inet_res.beam diff --git a/bootstrap/lib/kernel/ebin/inet_sctp.beam b/bootstrap/lib/kernel/ebin/inet_sctp.beam Binary files differindex 726edcd4c9..503cbc11e2 100644 --- a/bootstrap/lib/kernel/ebin/inet_sctp.beam +++ b/bootstrap/lib/kernel/ebin/inet_sctp.beam diff --git a/bootstrap/lib/kernel/ebin/inet_tcp.beam b/bootstrap/lib/kernel/ebin/inet_tcp.beam Binary files differindex 00a8175665..d854abd830 100644 --- a/bootstrap/lib/kernel/ebin/inet_tcp.beam +++ b/bootstrap/lib/kernel/ebin/inet_tcp.beam diff --git a/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam b/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam Binary files differindex 358d9ae403..2e54f1e1f4 100644 --- a/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam +++ b/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam diff --git a/bootstrap/lib/kernel/ebin/inet_udp.beam b/bootstrap/lib/kernel/ebin/inet_udp.beam Binary files differindex 6fb98bd777..6fbdd29f6d 100644 --- a/bootstrap/lib/kernel/ebin/inet_udp.beam +++ b/bootstrap/lib/kernel/ebin/inet_udp.beam diff --git a/bootstrap/lib/kernel/ebin/kernel.app b/bootstrap/lib/kernel/ebin/kernel.app index c42f63d2c6..f491239a45 100644 --- a/bootstrap/lib/kernel/ebin/kernel.app +++ b/bootstrap/lib/kernel/ebin/kernel.app @@ -21,7 +21,7 @@ {application, kernel, [ {description, "ERTS CXC 138 10"}, - {vsn, "2.17"}, + {vsn, "3.0"}, {modules, [application, application_controller, application_master, diff --git a/bootstrap/lib/kernel/ebin/kernel.beam b/bootstrap/lib/kernel/ebin/kernel.beam Binary files differindex 838a57718c..c938b218e1 100644 --- a/bootstrap/lib/kernel/ebin/kernel.beam +++ b/bootstrap/lib/kernel/ebin/kernel.beam diff --git a/bootstrap/lib/kernel/ebin/kernel_config.beam b/bootstrap/lib/kernel/ebin/kernel_config.beam Binary files differindex e3f6589104..c35da2c73d 100644 --- a/bootstrap/lib/kernel/ebin/kernel_config.beam +++ b/bootstrap/lib/kernel/ebin/kernel_config.beam diff --git a/bootstrap/lib/kernel/ebin/net_adm.beam b/bootstrap/lib/kernel/ebin/net_adm.beam Binary files differindex 4c8b6525a6..fb722b3b4e 100644 --- a/bootstrap/lib/kernel/ebin/net_adm.beam +++ b/bootstrap/lib/kernel/ebin/net_adm.beam diff --git a/bootstrap/lib/kernel/ebin/net_kernel.beam b/bootstrap/lib/kernel/ebin/net_kernel.beam Binary files differindex 0d39aa5ff5..722fcdefed 100644 --- a/bootstrap/lib/kernel/ebin/net_kernel.beam +++ b/bootstrap/lib/kernel/ebin/net_kernel.beam diff --git a/bootstrap/lib/kernel/ebin/os.beam b/bootstrap/lib/kernel/ebin/os.beam Binary files differindex 4602e68e17..b8b01b31ab 100644 --- a/bootstrap/lib/kernel/ebin/os.beam +++ b/bootstrap/lib/kernel/ebin/os.beam diff --git a/bootstrap/lib/kernel/ebin/pg2.beam b/bootstrap/lib/kernel/ebin/pg2.beam Binary files differindex 3eafd8c43b..c26b5a4ffc 100644 --- a/bootstrap/lib/kernel/ebin/pg2.beam +++ b/bootstrap/lib/kernel/ebin/pg2.beam diff --git a/bootstrap/lib/kernel/ebin/rpc.beam b/bootstrap/lib/kernel/ebin/rpc.beam Binary files differindex 4782908361..4a8aa5da69 100644 --- a/bootstrap/lib/kernel/ebin/rpc.beam +++ b/bootstrap/lib/kernel/ebin/rpc.beam diff --git a/bootstrap/lib/kernel/ebin/user.beam b/bootstrap/lib/kernel/ebin/user.beam Binary files differindex 1ba5d096e2..0e06c78fce 100644 --- a/bootstrap/lib/kernel/ebin/user.beam +++ b/bootstrap/lib/kernel/ebin/user.beam diff --git a/bootstrap/lib/kernel/ebin/user_drv.beam b/bootstrap/lib/kernel/ebin/user_drv.beam Binary files differindex 51ba491410..4a2cd01b0d 100644 --- a/bootstrap/lib/kernel/ebin/user_drv.beam +++ b/bootstrap/lib/kernel/ebin/user_drv.beam diff --git a/bootstrap/lib/kernel/ebin/wrap_log_reader.beam b/bootstrap/lib/kernel/ebin/wrap_log_reader.beam Binary files differindex 7a328be682..f35187c269 100644 --- a/bootstrap/lib/kernel/ebin/wrap_log_reader.beam +++ b/bootstrap/lib/kernel/ebin/wrap_log_reader.beam diff --git a/bootstrap/lib/stdlib/ebin/array.beam b/bootstrap/lib/stdlib/ebin/array.beam Binary files differindex 28d04dea2c..76cb41da49 100644 --- a/bootstrap/lib/stdlib/ebin/array.beam +++ b/bootstrap/lib/stdlib/ebin/array.beam diff --git a/bootstrap/lib/stdlib/ebin/base64.beam b/bootstrap/lib/stdlib/ebin/base64.beam Binary files differindex 2ca9a4d0b8..54ea68b9c0 100644 --- a/bootstrap/lib/stdlib/ebin/base64.beam +++ b/bootstrap/lib/stdlib/ebin/base64.beam diff --git a/bootstrap/lib/stdlib/ebin/beam_lib.beam b/bootstrap/lib/stdlib/ebin/beam_lib.beam Binary files differindex 36d5e56806..d496dbebbb 100644 --- a/bootstrap/lib/stdlib/ebin/beam_lib.beam +++ b/bootstrap/lib/stdlib/ebin/beam_lib.beam diff --git a/bootstrap/lib/stdlib/ebin/binary.beam b/bootstrap/lib/stdlib/ebin/binary.beam Binary files differindex 6077d965ed..14d6ba7976 100644 --- a/bootstrap/lib/stdlib/ebin/binary.beam +++ b/bootstrap/lib/stdlib/ebin/binary.beam diff --git a/bootstrap/lib/stdlib/ebin/c.beam b/bootstrap/lib/stdlib/ebin/c.beam Binary files differindex b2999a6255..3c34406adc 100644 --- a/bootstrap/lib/stdlib/ebin/c.beam +++ b/bootstrap/lib/stdlib/ebin/c.beam diff --git a/bootstrap/lib/stdlib/ebin/calendar.beam b/bootstrap/lib/stdlib/ebin/calendar.beam Binary files differindex 3f4f14abc3..19e0443dd2 100644 --- a/bootstrap/lib/stdlib/ebin/calendar.beam +++ b/bootstrap/lib/stdlib/ebin/calendar.beam diff --git a/bootstrap/lib/stdlib/ebin/dets.beam b/bootstrap/lib/stdlib/ebin/dets.beam Binary files differindex cfadae3caa..ac36354796 100644 --- a/bootstrap/lib/stdlib/ebin/dets.beam +++ b/bootstrap/lib/stdlib/ebin/dets.beam diff --git a/bootstrap/lib/stdlib/ebin/dets_server.beam b/bootstrap/lib/stdlib/ebin/dets_server.beam Binary files differindex 2b6026d29d..6bbefbbf1e 100644 --- a/bootstrap/lib/stdlib/ebin/dets_server.beam +++ b/bootstrap/lib/stdlib/ebin/dets_server.beam diff --git a/bootstrap/lib/stdlib/ebin/dets_utils.beam b/bootstrap/lib/stdlib/ebin/dets_utils.beam Binary files differindex 6ef251a140..6984331480 100644 --- a/bootstrap/lib/stdlib/ebin/dets_utils.beam +++ b/bootstrap/lib/stdlib/ebin/dets_utils.beam diff --git a/bootstrap/lib/stdlib/ebin/dets_v8.beam b/bootstrap/lib/stdlib/ebin/dets_v8.beam Binary files differindex 018c2e8cbb..2a670d30df 100644 --- a/bootstrap/lib/stdlib/ebin/dets_v8.beam +++ b/bootstrap/lib/stdlib/ebin/dets_v8.beam diff --git a/bootstrap/lib/stdlib/ebin/dets_v9.beam b/bootstrap/lib/stdlib/ebin/dets_v9.beam Binary files differindex fdfd8e84cf..7d7a926a6c 100644 --- a/bootstrap/lib/stdlib/ebin/dets_v9.beam +++ b/bootstrap/lib/stdlib/ebin/dets_v9.beam diff --git a/bootstrap/lib/stdlib/ebin/dict.beam b/bootstrap/lib/stdlib/ebin/dict.beam Binary files differindex df8bdae61d..e39c79bd5a 100644 --- a/bootstrap/lib/stdlib/ebin/dict.beam +++ b/bootstrap/lib/stdlib/ebin/dict.beam diff --git a/bootstrap/lib/stdlib/ebin/digraph.beam b/bootstrap/lib/stdlib/ebin/digraph.beam Binary files differindex 82735d07cc..40db38c992 100644 --- a/bootstrap/lib/stdlib/ebin/digraph.beam +++ b/bootstrap/lib/stdlib/ebin/digraph.beam diff --git a/bootstrap/lib/stdlib/ebin/digraph_utils.beam b/bootstrap/lib/stdlib/ebin/digraph_utils.beam Binary files differindex b9fdd6eac3..64783f4e1d 100644 --- a/bootstrap/lib/stdlib/ebin/digraph_utils.beam +++ b/bootstrap/lib/stdlib/ebin/digraph_utils.beam diff --git a/bootstrap/lib/stdlib/ebin/edlin.beam b/bootstrap/lib/stdlib/ebin/edlin.beam Binary files differindex 7b8e03a722..12aa74c4ac 100644 --- a/bootstrap/lib/stdlib/ebin/edlin.beam +++ b/bootstrap/lib/stdlib/ebin/edlin.beam diff --git a/bootstrap/lib/stdlib/ebin/edlin_expand.beam b/bootstrap/lib/stdlib/ebin/edlin_expand.beam Binary files differindex 01570cb1d4..85ce43d1ed 100644 --- a/bootstrap/lib/stdlib/ebin/edlin_expand.beam +++ b/bootstrap/lib/stdlib/ebin/edlin_expand.beam diff --git a/bootstrap/lib/stdlib/ebin/epp.beam b/bootstrap/lib/stdlib/ebin/epp.beam Binary files differindex 62e4840c77..a5462e86d3 100644 --- a/bootstrap/lib/stdlib/ebin/epp.beam +++ b/bootstrap/lib/stdlib/ebin/epp.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_bits.beam b/bootstrap/lib/stdlib/ebin/erl_bits.beam Binary files differindex 7149491121..627b9ca711 100644 --- a/bootstrap/lib/stdlib/ebin/erl_bits.beam +++ b/bootstrap/lib/stdlib/ebin/erl_bits.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_compile.beam b/bootstrap/lib/stdlib/ebin/erl_compile.beam Binary files differindex 244bb5e290..88da2b246f 100644 --- a/bootstrap/lib/stdlib/ebin/erl_compile.beam +++ b/bootstrap/lib/stdlib/ebin/erl_compile.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_eval.beam b/bootstrap/lib/stdlib/ebin/erl_eval.beam Binary files differindex 60a39206f7..7e797acf16 100644 --- a/bootstrap/lib/stdlib/ebin/erl_eval.beam +++ b/bootstrap/lib/stdlib/ebin/erl_eval.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam Binary files differindex 0f0da08a87..0563699d5e 100644 --- a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam +++ b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_lint.beam b/bootstrap/lib/stdlib/ebin/erl_lint.beam Binary files differindex 00431e7bc9..2bab926e97 100644 --- a/bootstrap/lib/stdlib/ebin/erl_lint.beam +++ b/bootstrap/lib/stdlib/ebin/erl_lint.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_parse.beam b/bootstrap/lib/stdlib/ebin/erl_parse.beam Binary files differindex 4098c1d1d1..2815cad4a3 100644 --- a/bootstrap/lib/stdlib/ebin/erl_parse.beam +++ b/bootstrap/lib/stdlib/ebin/erl_parse.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_pp.beam b/bootstrap/lib/stdlib/ebin/erl_pp.beam Binary files differindex 22d48708b8..f699719358 100644 --- a/bootstrap/lib/stdlib/ebin/erl_pp.beam +++ b/bootstrap/lib/stdlib/ebin/erl_pp.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_scan.beam b/bootstrap/lib/stdlib/ebin/erl_scan.beam Binary files differindex c8da05cb67..4b5d3467c1 100644 --- a/bootstrap/lib/stdlib/ebin/erl_scan.beam +++ b/bootstrap/lib/stdlib/ebin/erl_scan.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_tar.beam b/bootstrap/lib/stdlib/ebin/erl_tar.beam Binary files differindex 256ea5c3f5..6401818109 100644 --- a/bootstrap/lib/stdlib/ebin/erl_tar.beam +++ b/bootstrap/lib/stdlib/ebin/erl_tar.beam diff --git a/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam b/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam Binary files differindex 496e41c858..673ee6e8b2 100644 --- a/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam +++ b/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam diff --git a/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam b/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam Binary files differindex 47073d155f..87d58cf378 100644 --- a/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam +++ b/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam diff --git a/bootstrap/lib/stdlib/ebin/escript.beam b/bootstrap/lib/stdlib/ebin/escript.beam Binary files differindex 12a578278f..e660705631 100644 --- a/bootstrap/lib/stdlib/ebin/escript.beam +++ b/bootstrap/lib/stdlib/ebin/escript.beam diff --git a/bootstrap/lib/stdlib/ebin/ets.beam b/bootstrap/lib/stdlib/ebin/ets.beam Binary files differindex a6b4947b6c..2de24e86b3 100644 --- a/bootstrap/lib/stdlib/ebin/ets.beam +++ b/bootstrap/lib/stdlib/ebin/ets.beam diff --git a/bootstrap/lib/stdlib/ebin/eval_bits.beam b/bootstrap/lib/stdlib/ebin/eval_bits.beam Binary files differindex 0b12a41b1c..e92fadd53c 100644 --- a/bootstrap/lib/stdlib/ebin/eval_bits.beam +++ b/bootstrap/lib/stdlib/ebin/eval_bits.beam diff --git a/bootstrap/lib/stdlib/ebin/file_sorter.beam b/bootstrap/lib/stdlib/ebin/file_sorter.beam Binary files differindex 3273021913..a2825af89a 100644 --- a/bootstrap/lib/stdlib/ebin/file_sorter.beam +++ b/bootstrap/lib/stdlib/ebin/file_sorter.beam diff --git a/bootstrap/lib/stdlib/ebin/filelib.beam b/bootstrap/lib/stdlib/ebin/filelib.beam Binary files differindex 14ab68a7e1..b70aa54301 100644 --- a/bootstrap/lib/stdlib/ebin/filelib.beam +++ b/bootstrap/lib/stdlib/ebin/filelib.beam diff --git a/bootstrap/lib/stdlib/ebin/filename.beam b/bootstrap/lib/stdlib/ebin/filename.beam Binary files differindex de676f2bed..a558c5cbef 100644 --- a/bootstrap/lib/stdlib/ebin/filename.beam +++ b/bootstrap/lib/stdlib/ebin/filename.beam diff --git a/bootstrap/lib/stdlib/ebin/gb_sets.beam b/bootstrap/lib/stdlib/ebin/gb_sets.beam Binary files differindex 444c2745a0..feadc1d1ed 100644 --- a/bootstrap/lib/stdlib/ebin/gb_sets.beam +++ b/bootstrap/lib/stdlib/ebin/gb_sets.beam diff --git a/bootstrap/lib/stdlib/ebin/gb_trees.beam b/bootstrap/lib/stdlib/ebin/gb_trees.beam Binary files differindex 24aab57544..879b8cdf76 100644 --- a/bootstrap/lib/stdlib/ebin/gb_trees.beam +++ b/bootstrap/lib/stdlib/ebin/gb_trees.beam diff --git a/bootstrap/lib/stdlib/ebin/gen.beam b/bootstrap/lib/stdlib/ebin/gen.beam Binary files differindex 277a881630..6f15e461f6 100644 --- a/bootstrap/lib/stdlib/ebin/gen.beam +++ b/bootstrap/lib/stdlib/ebin/gen.beam diff --git a/bootstrap/lib/stdlib/ebin/gen_event.beam b/bootstrap/lib/stdlib/ebin/gen_event.beam Binary files differindex 313bd2dcce..46f1512a24 100644 --- a/bootstrap/lib/stdlib/ebin/gen_event.beam +++ b/bootstrap/lib/stdlib/ebin/gen_event.beam diff --git a/bootstrap/lib/stdlib/ebin/gen_fsm.beam b/bootstrap/lib/stdlib/ebin/gen_fsm.beam Binary files differindex 561b562115..d6719e68d9 100644 --- a/bootstrap/lib/stdlib/ebin/gen_fsm.beam +++ b/bootstrap/lib/stdlib/ebin/gen_fsm.beam diff --git a/bootstrap/lib/stdlib/ebin/gen_server.beam b/bootstrap/lib/stdlib/ebin/gen_server.beam Binary files differindex d7221a4ea3..806c4d58d7 100644 --- a/bootstrap/lib/stdlib/ebin/gen_server.beam +++ b/bootstrap/lib/stdlib/ebin/gen_server.beam diff --git a/bootstrap/lib/stdlib/ebin/io.beam b/bootstrap/lib/stdlib/ebin/io.beam Binary files differindex 19ae65b3bf..6c80bfe78b 100644 --- a/bootstrap/lib/stdlib/ebin/io.beam +++ b/bootstrap/lib/stdlib/ebin/io.beam diff --git a/bootstrap/lib/stdlib/ebin/io_lib.beam b/bootstrap/lib/stdlib/ebin/io_lib.beam Binary files differindex 08e497e35a..d34f69097a 100644 --- a/bootstrap/lib/stdlib/ebin/io_lib.beam +++ b/bootstrap/lib/stdlib/ebin/io_lib.beam diff --git a/bootstrap/lib/stdlib/ebin/io_lib_format.beam b/bootstrap/lib/stdlib/ebin/io_lib_format.beam Binary files differindex a476dcc6be..e579d3cb2e 100644 --- a/bootstrap/lib/stdlib/ebin/io_lib_format.beam +++ b/bootstrap/lib/stdlib/ebin/io_lib_format.beam diff --git a/bootstrap/lib/stdlib/ebin/io_lib_fread.beam b/bootstrap/lib/stdlib/ebin/io_lib_fread.beam Binary files differindex f3f059df26..8c45cf484c 100644 --- a/bootstrap/lib/stdlib/ebin/io_lib_fread.beam +++ b/bootstrap/lib/stdlib/ebin/io_lib_fread.beam diff --git a/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam b/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam Binary files differindex b9bcaf8cf2..720f19461e 100644 --- a/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam +++ b/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam diff --git a/bootstrap/lib/stdlib/ebin/lib.beam b/bootstrap/lib/stdlib/ebin/lib.beam Binary files differindex 0de626c384..c9086e1796 100644 --- a/bootstrap/lib/stdlib/ebin/lib.beam +++ b/bootstrap/lib/stdlib/ebin/lib.beam diff --git a/bootstrap/lib/stdlib/ebin/lists.beam b/bootstrap/lib/stdlib/ebin/lists.beam Binary files differindex 332a2088d0..a44b412d23 100644 --- a/bootstrap/lib/stdlib/ebin/lists.beam +++ b/bootstrap/lib/stdlib/ebin/lists.beam diff --git a/bootstrap/lib/stdlib/ebin/log_mf_h.beam b/bootstrap/lib/stdlib/ebin/log_mf_h.beam Binary files differindex 190b5d2af5..58a8d68ed5 100644 --- a/bootstrap/lib/stdlib/ebin/log_mf_h.beam +++ b/bootstrap/lib/stdlib/ebin/log_mf_h.beam diff --git a/bootstrap/lib/stdlib/ebin/ms_transform.beam b/bootstrap/lib/stdlib/ebin/ms_transform.beam Binary files differindex 1715cfac50..6e7a19c78a 100644 --- a/bootstrap/lib/stdlib/ebin/ms_transform.beam +++ b/bootstrap/lib/stdlib/ebin/ms_transform.beam diff --git a/bootstrap/lib/stdlib/ebin/pool.beam b/bootstrap/lib/stdlib/ebin/pool.beam Binary files differindex 8ad59de20d..72934a42d7 100644 --- a/bootstrap/lib/stdlib/ebin/pool.beam +++ b/bootstrap/lib/stdlib/ebin/pool.beam diff --git a/bootstrap/lib/stdlib/ebin/proc_lib.beam b/bootstrap/lib/stdlib/ebin/proc_lib.beam Binary files differindex a297dff09c..ee23fef6f0 100644 --- a/bootstrap/lib/stdlib/ebin/proc_lib.beam +++ b/bootstrap/lib/stdlib/ebin/proc_lib.beam diff --git a/bootstrap/lib/stdlib/ebin/proplists.beam b/bootstrap/lib/stdlib/ebin/proplists.beam Binary files differindex c768955ca7..2640cfe4ae 100644 --- a/bootstrap/lib/stdlib/ebin/proplists.beam +++ b/bootstrap/lib/stdlib/ebin/proplists.beam diff --git a/bootstrap/lib/stdlib/ebin/qlc.beam b/bootstrap/lib/stdlib/ebin/qlc.beam Binary files differindex a654bb3d99..d3ef6e3b36 100644 --- a/bootstrap/lib/stdlib/ebin/qlc.beam +++ b/bootstrap/lib/stdlib/ebin/qlc.beam diff --git a/bootstrap/lib/stdlib/ebin/qlc_pt.beam b/bootstrap/lib/stdlib/ebin/qlc_pt.beam Binary files differindex 9624629b83..7ac58096e7 100644 --- a/bootstrap/lib/stdlib/ebin/qlc_pt.beam +++ b/bootstrap/lib/stdlib/ebin/qlc_pt.beam diff --git a/bootstrap/lib/stdlib/ebin/queue.beam b/bootstrap/lib/stdlib/ebin/queue.beam Binary files differindex 8907a03b57..b7eab3f8d1 100644 --- a/bootstrap/lib/stdlib/ebin/queue.beam +++ b/bootstrap/lib/stdlib/ebin/queue.beam diff --git a/bootstrap/lib/stdlib/ebin/re.beam b/bootstrap/lib/stdlib/ebin/re.beam Binary files differindex ef5be96cda..74b369bb0c 100644 --- a/bootstrap/lib/stdlib/ebin/re.beam +++ b/bootstrap/lib/stdlib/ebin/re.beam diff --git a/bootstrap/lib/stdlib/ebin/sets.beam b/bootstrap/lib/stdlib/ebin/sets.beam Binary files differindex 74eb720790..d8546de28d 100644 --- a/bootstrap/lib/stdlib/ebin/sets.beam +++ b/bootstrap/lib/stdlib/ebin/sets.beam diff --git a/bootstrap/lib/stdlib/ebin/shell.beam b/bootstrap/lib/stdlib/ebin/shell.beam Binary files differindex 1971561ef1..3756c0d46a 100644 --- a/bootstrap/lib/stdlib/ebin/shell.beam +++ b/bootstrap/lib/stdlib/ebin/shell.beam diff --git a/bootstrap/lib/stdlib/ebin/slave.beam b/bootstrap/lib/stdlib/ebin/slave.beam Binary files differindex 23a7091c96..ba741284ac 100644 --- a/bootstrap/lib/stdlib/ebin/slave.beam +++ b/bootstrap/lib/stdlib/ebin/slave.beam diff --git a/bootstrap/lib/stdlib/ebin/sofs.beam b/bootstrap/lib/stdlib/ebin/sofs.beam Binary files differindex b6a3f88679..6f21292509 100644 --- a/bootstrap/lib/stdlib/ebin/sofs.beam +++ b/bootstrap/lib/stdlib/ebin/sofs.beam diff --git a/bootstrap/lib/stdlib/ebin/stdlib.app b/bootstrap/lib/stdlib/ebin/stdlib.app index f00712df60..d1da05048b 100644 --- a/bootstrap/lib/stdlib/ebin/stdlib.app +++ b/bootstrap/lib/stdlib/ebin/stdlib.app @@ -2,7 +2,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1996-2013. All Rights Reserved. +%% Copyright Ericsson AB 1996-2011. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -19,7 +19,7 @@ %% {application, stdlib, [{description, "ERTS CXC 138 10"}, - {vsn, "1.20"}, + {vsn, "2.0"}, {modules, [array, base64, beam_lib, diff --git a/bootstrap/lib/stdlib/ebin/supervisor.beam b/bootstrap/lib/stdlib/ebin/supervisor.beam Binary files differindex f8ef186a9b..cfc34ae41e 100644 --- a/bootstrap/lib/stdlib/ebin/supervisor.beam +++ b/bootstrap/lib/stdlib/ebin/supervisor.beam diff --git a/bootstrap/lib/stdlib/ebin/sys.beam b/bootstrap/lib/stdlib/ebin/sys.beam Binary files differindex 7e2ba3c19b..2aed63dc88 100644 --- a/bootstrap/lib/stdlib/ebin/sys.beam +++ b/bootstrap/lib/stdlib/ebin/sys.beam diff --git a/bootstrap/lib/stdlib/ebin/timer.beam b/bootstrap/lib/stdlib/ebin/timer.beam Binary files differindex 4269f1ebec..106d75c18a 100644 --- a/bootstrap/lib/stdlib/ebin/timer.beam +++ b/bootstrap/lib/stdlib/ebin/timer.beam diff --git a/bootstrap/lib/stdlib/ebin/unicode.beam b/bootstrap/lib/stdlib/ebin/unicode.beam Binary files differindex 572cb2b6fa..5484f5ac35 100644 --- a/bootstrap/lib/stdlib/ebin/unicode.beam +++ b/bootstrap/lib/stdlib/ebin/unicode.beam diff --git a/bootstrap/lib/stdlib/ebin/win32reg.beam b/bootstrap/lib/stdlib/ebin/win32reg.beam Binary files differindex 6df20f8db7..5d023ecb93 100644 --- a/bootstrap/lib/stdlib/ebin/win32reg.beam +++ b/bootstrap/lib/stdlib/ebin/win32reg.beam diff --git a/bootstrap/lib/stdlib/ebin/zip.beam b/bootstrap/lib/stdlib/ebin/zip.beam Binary files differindex 17006f313d..465a8b95a7 100644 --- a/bootstrap/lib/stdlib/ebin/zip.beam +++ b/bootstrap/lib/stdlib/ebin/zip.beam diff --git a/erts/doc/src/erlc.xml b/erts/doc/src/erlc.xml index 10cab344b0..c3fc3b1686 100644 --- a/erts/doc/src/erlc.xml +++ b/erts/doc/src/erlc.xml @@ -234,6 +234,16 @@ erlc +export_all file.erl</pre> from the shell.</p> <p>Supported options: -I, -o, -D, -v, -W, -b.</p> </item> + <tag>.S</tag> + <item> + <p>Erlang assembler source code. It generates a <c><![CDATA[.beam]]></c> file.</p> + <p>Supported options: same as for .erl.</p> + </item> + <tag>.core</tag> + <item> + <p>Erlang core source code. It generates a <c><![CDATA[.beam]]></c> file.</p> + <p>Supported options: same as for .erl.</p> + </item> <tag>.yrl</tag> <item> <p>Yecc source code. It generates an <c><![CDATA[.erl]]></c> file.</p> diff --git a/erts/emulator/beam/atom.names b/erts/emulator/beam/atom.names index eee4badfb8..96547ba743 100644 --- a/erts/emulator/beam/atom.names +++ b/erts/emulator/beam/atom.names @@ -116,6 +116,7 @@ atom binary_longest_prefix_trap atom binary_longest_suffix_trap atom binary_match_trap atom binary_matches_trap +atom binary_to_term_trap atom block atom blocked atom bm diff --git a/erts/emulator/beam/bif.tab b/erts/emulator/beam/bif.tab index dd50df636c..3ec534f0bc 100644 --- a/erts/emulator/beam/bif.tab +++ b/erts/emulator/beam/bif.tab @@ -45,7 +45,6 @@ bif erlang:apply/3 bif erlang:atom_to_list/1 bif erlang:binary_to_list/1 bif erlang:binary_to_list/3 -bif erlang:binary_to_term/1 bif erlang:crc32/1 bif erlang:crc32/2 bif erlang:crc32_combine/3 @@ -152,6 +151,8 @@ bif erts_internal:port_command/3 bif erts_internal:port_control/3 bif erts_internal:port_close/1 bif erts_internal:port_connect/2 +bif erts_internal:binary_to_term/1 +bif erts_internal:binary_to_term/2 bif erts_internal:request_system_task/3 bif erts_internal:check_process_code/2 @@ -479,11 +480,6 @@ bif erlang:call_on_load_function/1 bif erlang:finish_after_on_load/2 # -# New Bifs in R13B4 -# -bif erlang:binary_to_term/2 - -# # The binary match bifs (New in R14A - EEP9) # diff --git a/erts/emulator/beam/erl_bif_ddll.c b/erts/emulator/beam/erl_bif_ddll.c index 1c3e955f47..1728b200f7 100644 --- a/erts/emulator/beam/erl_bif_ddll.c +++ b/erts/emulator/beam/erl_bif_ddll.c @@ -182,7 +182,7 @@ BIF_RETTYPE erl_ddll_try_load_3(BIF_ALIST_3) Eterm name_term = BIF_ARG_2; Eterm options = BIF_ARG_3; char *path = NULL; - ErlDrvSizeT path_len; + Sint path_len; char *name = NULL; DE_Handle *dh; erts_driver_t *drv; @@ -198,6 +198,7 @@ BIF_RETTYPE erl_ddll_try_load_3(BIF_ALIST_3) int kill_ports = 0; int do_build_load_error = 0; int build_this_load_error = 0; + int encoding; for(l = options; is_list(l); l = CDR(list_val(l))) { Eterm opt = CAR(list_val(l)); @@ -257,18 +258,23 @@ BIF_RETTYPE erl_ddll_try_load_3(BIF_ALIST_3) goto error; } - if (erts_iolist_size(path_term, &path_len)) { - goto error; + encoding = erts_get_native_filename_encoding(); + if (encoding == ERL_FILENAME_WIN_WCHAR) { + /* Do not convert the lib name to utf-16le yet, do that in win32 specific code */ + /* since lib_name is used in error messages */ + encoding = ERL_FILENAME_UTF8; } - path = erts_alloc(ERTS_ALC_T_DDLL_TMP_BUF, path_len + 1 /* might need path separator */ + sys_strlen(name) + 1); - if (erts_iolist_to_buf(path_term, path, path_len) != 0) { + path = erts_convert_filename_to_encoding(path_term, NULL, 0, + ERTS_ALC_T_DDLL_TMP_BUF, 1, 0, + encoding, &path_len, + sys_strlen(name) + 2); /* might need path separator */ + if (!path) { goto error; } - while (path_len > 0 && (path[path_len-1] == '\\' || path[path_len-1] == '/')) { - --path_len; - } + ASSERT(path_len > 0 && path[path_len-1] == 0); + while (--path_len > 0 && (path[path_len-1] == '\\' || path[path_len-1] == '/')) + ; path[path_len++] = '/'; - /*path[path_len] = '\0';*/ sys_strcpy(path+path_len,name); #if DDLL_SMP @@ -1524,7 +1530,7 @@ static int do_load_driver_entry(DE_Handle *dh, char *path, char *name) assert_drv_list_rwlocked(); - if ((res = erts_sys_ddll_open(path, &(dh->handle))) != ERL_DE_NO_ERROR) { + if ((res = erts_sys_ddll_open(path, &(dh->handle), NULL)) != ERL_DE_NO_ERROR) { return res; } diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c index 2b40f9272d..414ae2f046 100755 --- a/erts/emulator/beam/erl_bif_info.c +++ b/erts/emulator/beam/erl_bif_info.c @@ -3613,8 +3613,9 @@ BIF_RETTYPE erts_debug_set_internal_state_2(BIF_ALIST_2) default: BIF_ERROR(BIF_P, BADARG); break; } - res = erts_set_gc_state(BIF_P, enable); - BIF_RET(res ? am_true : am_false); + res = (BIF_P->flags & F_DISABLE_GC) ? am_false : am_true; + erts_set_gc_state(BIF_P, enable); + BIF_RET(res); } else if (ERTS_IS_ATOM_STR("send_fake_exit_signal", BIF_ARG_1)) { /* Used by signal_SUITE (emulator) */ diff --git a/erts/emulator/beam/erl_bif_port.c b/erts/emulator/beam/erl_bif_port.c index 864349491a..f298422267 100644 --- a/erts/emulator/beam/erl_bif_port.c +++ b/erts/emulator/beam/erl_bif_port.c @@ -808,7 +808,7 @@ open_port(Process* p, Eterm name, Eterm settings, int *err_typep, int *err_nump) if (encoding == ERL_FILENAME_WIN_WCHAR) { encoding = ERL_FILENAME_UTF8; } - if ((name_buf = erts_convert_filename_to_encoding(name, NULL, 0, ERTS_ALC_T_TMP,0,1, encoding, NULL)) + if ((name_buf = erts_convert_filename_to_encoding(name, NULL, 0, ERTS_ALC_T_TMP,0,1, encoding, NULL, 0)) == NULL) { goto badarg; } diff --git a/erts/emulator/beam/erl_debug.c b/erts/emulator/beam/erl_debug.c index dc79d45be7..873a9860da 100644 --- a/erts/emulator/beam/erl_debug.c +++ b/erts/emulator/beam/erl_debug.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1998-2012. All Rights Reserved. + * Copyright Ericsson AB 1998-2013. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c index e87959f0ab..dc285b3cf7 100644 --- a/erts/emulator/beam/erl_nif.c +++ b/erts/emulator/beam/erl_nif.c @@ -1407,7 +1407,7 @@ void* enif_dlopen(const char* lib, ErtsSysDdllError errdesc = ERTS_SYS_DDLL_ERROR_INIT; void* handle; void* init_func; - if (erts_sys_ddll_open2(lib, &handle, &errdesc) == ERL_DE_NO_ERROR) { + if (erts_sys_ddll_open(lib, &handle, &errdesc) == ERL_DE_NO_ERROR) { if (erts_sys_ddll_load_nif_init(handle, &init_func, &errdesc) == ERL_DE_NO_ERROR) { erts_sys_ddll_call_nif_init(init_func); } @@ -1587,7 +1587,8 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2) encoding = ERL_FILENAME_UTF8; } lib_name = erts_convert_filename_to_encoding(BIF_ARG_1, NULL, 0, - ERTS_ALC_T_TMP, 1, 0, encoding, NULL); + ERTS_ALC_T_TMP, 1, 0, encoding, + NULL, 0); if (!lib_name) { BIF_ERROR(BIF_P, BADARG); } @@ -1626,7 +1627,7 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2) "module '%T' not allowed", mod_atom); } else if (init_func == NULL && - (err=erts_sys_ddll_open2(lib_name, &handle, &errdesc)) != ERL_DE_NO_ERROR) { + (err=erts_sys_ddll_open(lib_name, &handle, &errdesc)) != ERL_DE_NO_ERROR) { const char slogan[] = "Failed to load NIF library"; if (strstr(errdesc.str, lib_name) != NULL) { ret = load_nif_error(BIF_P, "load_failed", "%s: '%s'", slogan, errdesc.str); diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c index 0a41fb596d..21fd8dd50a 100644 --- a/erts/emulator/beam/erl_process.c +++ b/erts/emulator/beam/erl_process.c @@ -8271,25 +8271,22 @@ save_gc_task(Process *c_p, ErtsProcSysTask *st, int prio) int erts_set_gc_state(Process *c_p, int enable) { - int res; ErtsProcSysTaskQs *dgc_tsk_qs; ASSERT(c_p == erts_get_current_process()); ASSERT((ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS) & erts_smp_atomic32_read_nob(&c_p->state)); ERTS_SMP_LC_ASSERT(ERTS_PROC_LOCK_MAIN == erts_proc_lc_my_proc_locks(c_p)); - res = !(c_p->flags & F_DISABLE_GC); - if (!enable) { c_p->flags |= F_DISABLE_GC; - return res; + return 0; } c_p->flags &= ~F_DISABLE_GC; dgc_tsk_qs = ERTS_PROC_GET_DELAYED_GC_TASK_QS(c_p); if (!dgc_tsk_qs) - return res; + return 0; /* Move delayed gc tasks into sys tasks queues. */ @@ -8387,7 +8384,7 @@ erts_set_gc_state(Process *c_p, int enable) if (dgc_tsk_qs) proc_sys_task_queues_free(dgc_tsk_qs); - return res; + return 1; } void diff --git a/erts/emulator/beam/erl_unicode.c b/erts/emulator/beam/erl_unicode.c index 7e3c6681d9..3a968594f3 100644 --- a/erts/emulator/beam/erl_unicode.c +++ b/erts/emulator/beam/erl_unicode.c @@ -1990,12 +1990,14 @@ char *erts_convert_filename_to_native(Eterm name, char *statbuf, size_t statbuf_ { int encoding = erts_get_native_filename_encoding(); return erts_convert_filename_to_encoding(name, statbuf, statbuf_size, alloc_type, - allow_empty, allow_atom, encoding, used); + allow_empty, allow_atom, encoding, + used, 0); } char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbuf_size, ErtsAlcType_t alloc_type, int allow_empty, - int allow_atom, int encoding, Sint *used) + int allow_atom, int encoding, Sint *used, + Uint extra) { char* name_buf = NULL; @@ -2008,13 +2010,14 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbu } if (encoding == ERL_FILENAME_WIN_WCHAR) { need += 2; + extra *= 2; } else { ++need; } if (used) *used = (Sint) need; - if (need > statbuf_size) { - name_buf = (char *) erts_alloc(alloc_type, need); + if (need+extra > statbuf_size) { + name_buf = (char *) erts_alloc(alloc_type, need+extra); } else { name_buf = statbuf; } @@ -2035,8 +2038,8 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbu /*Add 0 termination only*/ if (used) *used = (Sint) size+1; - if (size+1 > statbuf_size) { - name_buf = (char *) erts_alloc(alloc_type, size+1); + if (size+1+extra > statbuf_size) { + name_buf = (char *) erts_alloc(alloc_type, size+1+extra); } else { name_buf = statbuf; } @@ -2045,7 +2048,7 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbu } else { name_buf = erts_convert_filename_to_wchar(bytes, size, statbuf, statbuf_size, - alloc_type, used, 0); + alloc_type, used, extra); } erts_free_aligned_binary_bytes(temp_alloc); } else { diff --git a/erts/emulator/beam/erl_zlib.c b/erts/emulator/beam/erl_zlib.c index 47fd92988e..8e33144f96 100644 --- a/erts/emulator/beam/erl_zlib.c +++ b/erts/emulator/beam/erl_zlib.c @@ -87,6 +87,46 @@ int ZEXPORT erl_zlib_deflate_finish(z_stream *streamp) return deflateEnd(streamp); } +int ZEXPORT erl_zlib_inflate_start(z_stream *streamp, const Bytef* source, + uLong sourceLen) +{ + streamp->next_in = (Bytef*)source; + streamp->avail_in = (uInt)sourceLen; + streamp->total_out = streamp->avail_out = 0; + streamp->next_out = NULL; + erl_zlib_alloc_init(streamp); + return inflateInit(streamp); +} +/* + * Inflate a chunk, The destination length is the limit. + * Returns Z_OK if more to process, Z_STREAM_END if we are done. + */ +int ZEXPORT erl_zlib_inflate_chunk(z_stream *streamp, Bytef* dest, uLongf* destLen) +{ + int err; + uLongf last_tot = streamp->total_out; + + streamp->next_out = dest; + streamp->avail_out = (uInt)*destLen; + + if ((uLong)streamp->avail_out != *destLen) return Z_BUF_ERROR; + + err = inflate(streamp, Z_NO_FLUSH); + ASSERT(err != Z_STREAM_ERROR); + *destLen = streamp->total_out - last_tot; + return err; +} + +/* + * When we are done, free up the inflate structure + * Retyurns Z_OK or Error + */ +int ZEXPORT erl_zlib_inflate_finish(z_stream *streamp) +{ + return inflateEnd(streamp); +} + + int ZEXPORT erl_zlib_compress2 (Bytef* dest, uLongf* destLen, const Bytef* source, uLong sourceLen, int level) diff --git a/erts/emulator/beam/erl_zlib.h b/erts/emulator/beam/erl_zlib.h index 5ac849d21c..160166c66b 100644 --- a/erts/emulator/beam/erl_zlib.h +++ b/erts/emulator/beam/erl_zlib.h @@ -39,6 +39,12 @@ int ZEXPORT erl_zlib_deflate_start(z_stream *streamp, const Bytef* source, int ZEXPORT erl_zlib_deflate_chunk(z_stream *streamp, Bytef* dest, uLongf* destLen); int ZEXPORT erl_zlib_deflate_finish(z_stream *streamp); +int ZEXPORT erl_zlib_inflate_start(z_stream *streamp, const Bytef* source, + uLong sourceLen); +int ZEXPORT erl_zlib_inflate_chunk(z_stream *streamp, Bytef* dest, uLongf* destLen); +int ZEXPORT erl_zlib_inflate_finish(z_stream *streamp); + + /* Use instead of compress */ #define erl_zlib_compress(dest,destLen,source,sourceLen) \ diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c index 22b0a02937..2cb44a5b64 100644 --- a/erts/emulator/beam/external.c +++ b/erts/emulator/beam/external.c @@ -61,6 +61,9 @@ */ # define ERTS_DEBUG_USE_DIST_SEP # endif +# define IF_DEBUG(X) X +#else +# define IF_DEBUG(X) #endif /* Does Sint fit in Sint32? @@ -89,10 +92,11 @@ static int enc_term_int(Process *p,ErtsAtomCacheMap *acmp, Eterm obj, byte* ep, static Uint is_external_string(Eterm obj, int* p_is_string); static byte* enc_atom(ErtsAtomCacheMap *, Eterm, byte*, Uint32); static byte* enc_pid(ErtsAtomCacheMap *, Eterm, byte*, Uint32); -static byte* dec_term(ErtsDistExternal *, Eterm**, byte*, ErlOffHeap*, Eterm*); +struct B2TContext_t; +static byte* dec_term(ErtsDistExternal *, Eterm**, byte*, ErlOffHeap*, Eterm*, struct B2TContext_t*); static byte* dec_atom(ErtsDistExternal *, byte*, Eterm*); static byte* dec_pid(ErtsDistExternal *, Eterm**, byte*, ErlOffHeap*, Eterm*); -static Sint decoded_size(byte *ep, byte* endp, int internal_tags); +static Sint decoded_size(byte *ep, byte* endp, int internal_tags, struct B2TContext_t*); static BIF_RETTYPE term_to_binary_trap_1(BIF_ALIST_1); static Eterm erts_term_to_binary_int(Process* p, Eterm Term, int level, Uint flags, @@ -102,11 +106,19 @@ static Uint encode_size_struct2(ErtsAtomCacheMap *, Eterm, unsigned); static int encode_size_struct_int(Process *p, ErtsAtomCacheMap *acmp, Eterm obj, unsigned dflags, Sint *reds, Uint *res); +static Export binary_to_term_trap_export; +static BIF_RETTYPE binary_to_term_trap_1(BIF_ALIST_1); +static Eterm binary_to_term_int(Process* p, Uint32 flags, Eterm bin, Binary* context_b); + void erts_init_external(void) { #if 1 /* In R16 */ erts_init_trap_export(&term_to_binary_trap_export, am_erlang, am_term_to_binary_trap, 1, &term_to_binary_trap_1); + + erts_init_trap_export(&binary_to_term_trap_export, + am_erlang, am_binary_to_term_trap, 1, + &binary_to_term_trap_1); #else sys_memset((void *) &term_to_binary_trap_export, 0, sizeof(Export)); term_to_binary_trap_export.address = &term_to_binary_trap_export.code[3]; @@ -877,7 +889,7 @@ erts_decode_dist_ext_size(ErtsDistExternal *edep) goto fail; ep = edep->extp+1; } - res = decoded_size(ep, edep->ext_endp, 0); + res = decoded_size(ep, edep->ext_endp, 0, NULL); if (res >= 0) return res; fail: @@ -889,12 +901,12 @@ Sint erts_decode_ext_size(byte *ext, Uint size) { if (size == 0 || *ext != VERSION_MAGIC) return -1; - return decoded_size(ext+1, ext+size, 0); + return decoded_size(ext+1, ext+size, 0, NULL); } Sint erts_decode_ext_size_ets(byte *ext, Uint size) { - Sint sz = decoded_size(ext, ext+size, 1); + Sint sz = decoded_size(ext, ext+size, 1, NULL); ASSERT(sz >= 0); return sz; } @@ -927,7 +939,7 @@ erts_decode_dist_ext(Eterm** hpp, goto error; ep++; } - ep = dec_term(edep, hpp, ep, off_heap, &obj); + ep = dec_term(edep, hpp, ep, off_heap, &obj, NULL); if (!ep) goto error; @@ -948,7 +960,7 @@ Eterm erts_decode_ext(Eterm **hpp, ErlOffHeap *off_heap, byte **ext) byte *ep = *ext; if (*ep++ != VERSION_MAGIC) return THE_NON_VALUE; - ep = dec_term(NULL, hpp, ep, off_heap, &obj); + ep = dec_term(NULL, hpp, ep, off_heap, &obj, NULL); if (!ep) { #ifdef DEBUG bin_write(ERTS_PRINT_STDERR,NULL,*ext,500); @@ -962,7 +974,7 @@ Eterm erts_decode_ext(Eterm **hpp, ErlOffHeap *off_heap, byte **ext) Eterm erts_decode_ext_ets(Eterm **hpp, ErlOffHeap *off_heap, byte *ext) { Eterm obj; - ext = dec_term(NULL, hpp, ext, off_heap, &obj); + ext = dec_term(NULL, hpp, ext, off_heap, &obj, NULL); ASSERT(ext); return obj; } @@ -1043,9 +1055,14 @@ static BIF_RETTYPE term_to_binary_trap_1(BIF_ALIST_1) Binary *bin = ((ProcBin *) binary_val(bt))->val; Eterm res = erts_term_to_binary_int(BIF_P, Term, 0, 0,bin); if (is_tuple(res)) { + ASSERT(BIF_P->flags & F_DISABLE_GC); BIF_TRAP1(&term_to_binary_trap_export,BIF_P,res); } else { - BIF_RET(res); + if (erts_set_gc_state(BIF_P, 1) + || MSO(BIF_P).overhead > BIN_VHEAP_SZ(BIF_P)) + ERTS_BIF_YIELD_RETURN(BIF_P, res); + else + BIF_RET(res); } } @@ -1053,8 +1070,10 @@ BIF_RETTYPE term_to_binary_1(BIF_ALIST_1) { Eterm res = erts_term_to_binary_int(BIF_P, BIF_ARG_1, 0, TERM_TO_BINARY_DFLAGS, NULL); if (is_tuple(res)) { + erts_set_gc_state(BIF_P, 0); BIF_TRAP1(&term_to_binary_trap_export,BIF_P,res); } else { + ASSERT(!(BIF_P->flags & F_DISABLE_GC)); BIF_RET(res); } } @@ -1106,12 +1125,72 @@ BIF_RETTYPE term_to_binary_2(BIF_ALIST_2) res = erts_term_to_binary_int(p, Term, level, flags, bin); if (is_tuple(res)) { + erts_set_gc_state(p, 0); BIF_TRAP1(&term_to_binary_trap_export,BIF_P,res); } else { + ASSERT(!(BIF_P->flags & F_DISABLE_GC)); BIF_RET(res); } } + +enum B2TState { /* order is somewhat significant */ + B2TPrepare, + B2TUncompressChunk, + B2TSizeInit, + B2TSize, + B2TDecodeInit, + B2TDecode, + B2TDecodeList, + B2TDecodeTuple, + B2TDecodeString, + B2TDecodeBinary, + + B2TDone, + B2TDecodeFail, + B2TBadArg +}; + +typedef struct { + int heap_size; + int terms; + byte* ep; + int atom_extra_skip; +} B2TSizeContext; + +typedef struct { + byte* ep; + Eterm res; + Eterm* next; + Eterm* hp_start; + Eterm* hp; + Eterm* hp_end; + int remaining_n; + char* remaining_bytes; +} B2TDecodeContext; + +typedef struct { + z_stream stream; + byte* dbytes; + Uint dleft; +} B2TUncompressContext; + +typedef struct B2TContext_t { + Sint heap_size; + byte* aligned_alloc; + ErtsBinary2TermState b2ts; + Uint32 flags; + SWord reds; + Eterm trap_bin; + enum B2TState state; + union { + B2TSizeContext sc; + B2TDecodeContext dc; + B2TUncompressContext uc; + } u; +} B2TContext; + + static uLongf binary2term_uncomp_size(byte* data, Sint size) { z_stream stream; @@ -1141,48 +1220,62 @@ static uLongf binary2term_uncomp_size(byte* data, Sint size) return err == Z_STREAM_END ? uncomp_size : 0; } -static ERTS_INLINE Sint -binary2term_prepare(ErtsBinary2TermState *state, byte *data, Sint data_size) +static ERTS_INLINE int +binary2term_prepare(ErtsBinary2TermState *state, byte *data, Sint data_size, + B2TContext* ctx) { - Sint res; byte *bytes = data; Sint size = data_size; state->exttmp = 0; if (size < 1 || *bytes != VERSION_MAGIC) { - error: - if (state->exttmp) - erts_free(ERTS_ALC_T_TMP, state->extp); - state->extp = NULL; - state->exttmp = 0; return -1; } bytes++; size--; if (size < 5 || *bytes != COMPRESSED) { state->extp = bytes; + if (ctx) + ctx->state = B2TSizeInit; } else { uLongf dest_len = (Uint32) get_int32(bytes+1); bytes += 5; size -= 5; if (dest_len > 32*1024*1024 - || (state->extp = erts_alloc_fnf(ERTS_ALC_T_TMP, dest_len)) == NULL) { + || (state->extp = erts_alloc_fnf(ERTS_ALC_T_EXT_TERM_DATA, dest_len)) == NULL) { + /* + * Try avoid out-of-memory crash due to corrupted 'dest_len' + * by checking the actual length of the uncompressed data. + * The only way to do that is to uncompress it. Sad but true. + */ if (dest_len != binary2term_uncomp_size(bytes, size)) { - goto error; + return -1; } - state->extp = erts_alloc(ERTS_ALC_T_TMP, dest_len); + state->extp = erts_alloc(ERTS_ALC_T_EXT_TERM_DATA, dest_len); + ctx->reds -= dest_len; } state->exttmp = 1; - if (erl_zlib_uncompress(state->extp, &dest_len, bytes, size) != Z_OK) - goto error; + if (ctx) { + if (erl_zlib_inflate_start(&ctx->u.uc.stream, bytes, size) != Z_OK) + return -1; + + ctx->u.uc.dbytes = state->extp; + ctx->u.uc.dleft = dest_len; + ctx->state = B2TUncompressChunk; + } + else { + uLongf dlen = dest_len; + if (erl_zlib_uncompress(state->extp, &dlen, bytes, size) != Z_OK + || dlen != dest_len) { + return -1; + } + } size = (Sint) dest_len; } - res = decoded_size(state->extp, state->extp + size, 0); - if (res < 0) - goto error; - return res; + state->extsize = size; + return 0; } static ERTS_INLINE void @@ -1190,7 +1283,7 @@ binary2term_abort(ErtsBinary2TermState *state) { if (state->exttmp) { state->exttmp = 0; - erts_free(ERTS_ALC_T_TMP, state->extp); + erts_free(ERTS_ALC_T_EXT_TERM_DATA, state->extp); } } @@ -1198,11 +1291,11 @@ static ERTS_INLINE Eterm binary2term_create(ErtsDistExternal *edep, ErtsBinary2TermState *state, Eterm **hpp, ErlOffHeap *ohp) { Eterm res; - if (!dec_term(edep, hpp, state->extp, ohp, &res)) + if (!dec_term(edep, hpp, state->extp, ohp, &res, NULL)) res = THE_NON_VALUE; if (state->exttmp) { state->exttmp = 0; - erts_free(ERTS_ALC_T_TMP, state->extp); + erts_free(ERTS_ALC_T_EXT_TERM_DATA, state->extp); } return res; } @@ -1210,7 +1303,18 @@ binary2term_create(ErtsDistExternal *edep, ErtsBinary2TermState *state, Eterm ** Sint erts_binary2term_prepare(ErtsBinary2TermState *state, byte *data, Sint data_size) { - return binary2term_prepare(state, data, data_size); + Sint res; + + if (binary2term_prepare(state, data, data_size, NULL) < 0 || + (res=decoded_size(state->extp, state->extp + state->extsize, 0, NULL)) < 0) { + + if (state->exttmp) + erts_free(ERTS_ALC_T_EXT_TERM_DATA, state->extp); + state->extp = NULL; + state->exttmp = 0; + return -1; + } + return res; } void @@ -1225,68 +1329,233 @@ erts_binary2term_create(ErtsBinary2TermState *state, Eterm **hpp, ErlOffHeap *oh return binary2term_create(NULL,state, hpp, ohp); } -BIF_RETTYPE binary_to_term_1(BIF_ALIST_1) +static void b2t_destroy_context(B2TContext* context) { - Sint heap_size; - Eterm res; + erts_free_aligned_binary_bytes_extra(context->aligned_alloc, + ERTS_ALC_T_EXT_TERM_DATA); + context->aligned_alloc = NULL; + binary2term_abort(&context->b2ts); + if (context->state == B2TUncompressChunk) { + erl_zlib_inflate_finish(&context->u.uc.stream); + } +} + +static void b2t_context_destructor(Binary *context_bin) +{ + B2TContext* ctx = (B2TContext*) ERTS_MAGIC_BIN_DATA(context_bin); + ASSERT(ERTS_MAGIC_BIN_DESTRUCTOR(context_bin) == b2t_context_destructor); + + b2t_destroy_context(ctx); +} + +static BIF_RETTYPE binary_to_term_trap_1(BIF_ALIST_1) +{ + Binary *context_bin = ((ProcBin *) binary_val(BIF_ARG_1))->val; + ASSERT(ERTS_MAGIC_BIN_DESTRUCTOR(context_bin) == b2t_context_destructor); + + return binary_to_term_int(BIF_P, 0, THE_NON_VALUE, context_bin); +} + + +#define B2T_BYTES_PER_REDUCTION 128 +#define B2T_MEMCPY_FACTOR 8 + +/* Define for testing */ +/*#define EXTREME_B2T_TRAPPING 1*/ + +#ifdef EXTREME_B2T_TRAPPING +static unsigned b2t_rand(void) +{ + static unsigned prev = 17; + prev = (prev * 214013 + 2531011); + return prev; +} +#endif + + +static B2TContext* b2t_export_context(Process* p, B2TContext* src) +{ + Binary* context_b = erts_create_magic_binary(sizeof(B2TContext), + b2t_context_destructor); + B2TContext* ctx = ERTS_MAGIC_BIN_DATA(context_b); Eterm* hp; - Eterm* endp; - Sint size; - byte* bytes; - byte* temp_alloc = NULL; - ErtsBinary2TermState b2ts; + sys_memcpy(ctx, src, sizeof(B2TContext)); + if (ctx->state >= B2TDecode && ctx->u.dc.next == &src->u.dc.res) { + ctx->u.dc.next = &ctx->u.dc.res; + } + hp = HAlloc(p, PROC_BIN_SIZE); + ctx->trap_bin = erts_mk_magic_binary_term(&hp, &MSO(p), context_b); + return ctx; +} - if ((bytes = erts_get_aligned_binary_bytes(BIF_ARG_1, &temp_alloc)) == NULL) { - error: - erts_free_aligned_binary_bytes(temp_alloc); - BIF_ERROR(BIF_P, BADARG); +static Eterm binary_to_term_int(Process* p, Uint32 flags, Eterm bin, Binary* context_b) +{ +#ifdef EXTREME_B2T_TRAPPING + SWord initial_reds = 1 + b2t_rand() % 4; +#else + SWord initial_reds = (Uint)(ERTS_BIF_REDS_LEFT(p) * B2T_BYTES_PER_REDUCTION); +#endif + B2TContext c_buff; + B2TContext *ctx; + int is_first_call; + + if (context_b == NULL) { + /* Setup enough to get started */ + is_first_call = 1; + ctx = &c_buff; + ctx->state = B2TPrepare; + ctx->aligned_alloc = NULL; + ctx->flags = flags; + IF_DEBUG(ctx->trap_bin = THE_NON_VALUE;) + } else { + is_first_call = 0; + ctx = ERTS_MAGIC_BIN_DATA(context_b); + ASSERT(ctx->state != B2TPrepare); } - size = binary_size(BIF_ARG_1); + ctx->reds = initial_reds; + + do { + switch (ctx->state) { + case B2TPrepare: { + byte* bytes; + Uint bin_size; + bytes = erts_get_aligned_binary_bytes_extra(bin, + &ctx->aligned_alloc, + ERTS_ALC_T_EXT_TERM_DATA, + 0); + if (bytes == NULL) { + ctx->b2ts.exttmp = 0; + ctx->state = B2TBadArg; + break; + } + bin_size = binary_size(bin); + if (ctx->aligned_alloc) { + ctx->reds -= bin_size / 8; + } + if (binary2term_prepare(&ctx->b2ts, bytes, bin_size, ctx) < 0) { + ctx->state = B2TBadArg; + } + break; + } + case B2TUncompressChunk: { + uLongf chunk = ctx->reds; + int zret; + + if (chunk > ctx->u.uc.dleft) + chunk = ctx->u.uc.dleft; + zret = erl_zlib_inflate_chunk(&ctx->u.uc.stream, + ctx->u.uc.dbytes, &chunk); + ctx->u.uc.dbytes += chunk; + ctx->u.uc.dleft -= chunk; + if (zret == Z_OK && ctx->u.uc.dleft > 0) { + ctx->reds = 0; + } + else if (erl_zlib_inflate_finish(&ctx->u.uc.stream) == Z_OK + && zret == Z_STREAM_END + && ctx->u.uc.dleft == 0) { + ctx->reds -= chunk; + ctx->state = B2TSizeInit; + } + else { + ctx->state = B2TBadArg; + } + break; + } + case B2TSizeInit: + ctx->u.sc.ep = NULL; + ctx->state = B2TSize; + /*fall through*/ + case B2TSize: + ctx->heap_size = decoded_size(ctx->b2ts.extp, + ctx->b2ts.extp + ctx->b2ts.extsize, + 0, ctx); + break; + + case B2TDecodeInit: + if (ctx == &c_buff && ctx->b2ts.extsize > ctx->reds) { + /* dec_term will maybe trap, allocate space for magic bin + before result term to make it easy to trim with HRelease. + */ + ctx = b2t_export_context(p, &c_buff); + } + ctx->u.dc.ep = ctx->b2ts.extp; + ctx->u.dc.res = (Eterm) (UWord) NULL; + ctx->u.dc.next = &ctx->u.dc.res; + ctx->u.dc.hp_start = HAlloc(p, ctx->heap_size); + ctx->u.dc.hp = ctx->u.dc.hp_start; + ctx->u.dc.hp_end = ctx->u.dc.hp_start + ctx->heap_size; + ctx->state = B2TDecode; + /*fall through*/ + case B2TDecode: + case B2TDecodeList: + case B2TDecodeTuple: + case B2TDecodeString: + case B2TDecodeBinary: { + ErtsDistExternal fakedep; + fakedep.flags = ctx->flags; + dec_term(&fakedep, NULL, NULL, &MSO(p), NULL, ctx); + break; + } + case B2TDecodeFail: + HRelease(p, ctx->u.dc.hp_end, ctx->u.dc.hp_start); + /*fall through*/ + case B2TBadArg: + b2t_destroy_context(ctx); + if (!is_first_call) { + erts_set_gc_state(p, 1); + } + BUMP_REDS(p, (initial_reds - ctx->reds) / B2T_BYTES_PER_REDUCTION); + BIF_ERROR(p, BADARG & ~EXF_SAVETRACE); - heap_size = binary2term_prepare(&b2ts, bytes, size); - if (heap_size < 0) - goto error; + case B2TDone: + b2t_destroy_context(ctx); - hp = HAlloc(BIF_P, heap_size); - endp = hp + heap_size; + if (ctx->u.dc.hp > ctx->u.dc.hp_end) { + erl_exit(1, ":%s, line %d: heap overrun by %d words(s)\n", + __FILE__, __LINE__, ctx->u.dc.hp - ctx->u.dc.hp_end); + } + HRelease(p, ctx->u.dc.hp_end, ctx->u.dc.hp); - res = binary2term_create(NULL, &b2ts, &hp, &MSO(BIF_P)); + if (!is_first_call) { + erts_set_gc_state(p, 1); + } + BUMP_REDS(p, (initial_reds - ctx->reds) / B2T_BYTES_PER_REDUCTION); + return ctx->u.dc.res; - erts_free_aligned_binary_bytes(temp_alloc); + default: + ASSERT(!"Unknown state in binary_to_term"); + } + }while (ctx->reds > 0 || ctx->state >= B2TDone); - if (hp > endp) { - erl_exit(1, ":%s, line %d: heap overrun by %d words(s)\n", - __FILE__, __LINE__, hp-endp); + if (ctx == &c_buff) { + ASSERT(ctx->trap_bin == THE_NON_VALUE); + ctx = b2t_export_context(p, &c_buff); } + ASSERT(ctx->trap_bin != THE_NON_VALUE); - HRelease(BIF_P, endp, hp); - - if (res == THE_NON_VALUE) - goto error; + if (is_first_call) { + erts_set_gc_state(p, 0); + } + BUMP_ALL_REDS(p); + BIF_TRAP1(&binary_to_term_trap_export, p, ctx->trap_bin); +} - return res; +BIF_RETTYPE erts_internal_binary_to_term_1(BIF_ALIST_1) +{ + return binary_to_term_int(BIF_P, 0, BIF_ARG_1, NULL); } -BIF_RETTYPE binary_to_term_2(BIF_ALIST_2) +BIF_RETTYPE erts_internal_binary_to_term_2(BIF_ALIST_2) { - Sint heap_size; - Eterm res; Eterm opts; Eterm opt; - Eterm* hp; - Eterm* endp; - Sint size; - byte* bytes; - byte* temp_alloc = NULL; - ErtsBinary2TermState b2ts; - ErtsDistExternal fakedep; + Uint32 flags = 0; - fakedep.flags = 0; opts = BIF_ARG_2; while (is_list(opts)) { opt = CAR(list_val(opts)); if (opt == am_safe) { - fakedep.flags |= ERTS_DIST_EXT_BTT_SAFE; + flags |= ERTS_DIST_EXT_BTT_SAFE; } else { goto error; @@ -1297,35 +1566,10 @@ BIF_RETTYPE binary_to_term_2(BIF_ALIST_2) if (is_not_nil(opts)) goto error; - if ((bytes = erts_get_aligned_binary_bytes(BIF_ARG_1, &temp_alloc)) == NULL) { - error: - erts_free_aligned_binary_bytes(temp_alloc); - BIF_ERROR(BIF_P, BADARG); - } - size = binary_size(BIF_ARG_1); - - heap_size = binary2term_prepare(&b2ts, bytes, size); - if (heap_size < 0) - goto error; - - hp = HAlloc(BIF_P, heap_size); - endp = hp + heap_size; - - res = binary2term_create(&fakedep, &b2ts, &hp, &MSO(BIF_P)); - - erts_free_aligned_binary_bytes(temp_alloc); - - if (hp > endp) { - erl_exit(1, ":%s, line %d: heap overrun by %d words(s)\n", - __FILE__, __LINE__, hp-endp); - } - - HRelease(BIF_P, endp, hp); - - if (res == THE_NON_VALUE) - goto error; + return binary_to_term_int(BIF_P, flags, BIF_ARG_1, NULL); - return res; +error: + BIF_ERROR(BIF_P, BADARG); } Eterm @@ -1473,12 +1717,10 @@ erts_term_to_binary(Process* p, Eterm Term, int level, Uint flags) { /* #define EXTREME_TTB_TRAPPING 1 */ #ifndef EXTREME_TTB_TRAPPING -#define TERM_TO_BINARY_LOOP_FACTOR 500 -#define TERM_TO_BINARY_SIZE_FACTOR 500000 -#define TERM_TO_BINARY_COMPRESS_CHUNK 500000 +#define TERM_TO_BINARY_LOOP_FACTOR 32 +#define TERM_TO_BINARY_COMPRESS_CHUNK (1 << 18) #else #define TERM_TO_BINARY_LOOP_FACTOR 1 -#define TERM_TO_BINARY_SIZE_FACTOR 10 #define TERM_TO_BINARY_COMPRESS_CHUNK 10 #endif @@ -1514,7 +1756,7 @@ typedef struct { } s; } TTBContext; -static void context_destructor(Binary *context_bin) +static void ttb_context_destructor(Binary *context_bin) { TTBContext *context = ERTS_MAGIC_BIN_DATA(context_bin); if (context->alive) { @@ -1567,7 +1809,7 @@ static Eterm erts_term_to_binary_int(Process* p, Eterm Term, int level, Uint fla do { \ if (context_b == NULL) { \ context_b = erts_create_magic_binary(sizeof(TTBContext), \ - context_destructor); \ + ttb_context_destructor); \ context = ERTS_MAGIC_BIN_DATA(context_b); \ memcpy(context,&c_buff,sizeof(TTBContext)); \ } \ @@ -1615,7 +1857,7 @@ static Eterm erts_term_to_binary_int(Process* p, Eterm Term, int level, Uint fla /* Finish in one go */ res = erts_term_to_binary_simple(p, Term, size, level, flags); - BUMP_REDS(p, size / TERM_TO_BINARY_SIZE_FACTOR); + BUMP_REDS(p, 1); return res; } @@ -2604,21 +2846,112 @@ undo_offheap_in_area(ErlOffHeap* off_heap, Eterm* start, Eterm* end) #endif /* DEBUG */ } + /* Decode term from external format into *objp. ** On failure return NULL and (R13B04) *hpp will be unchanged. */ static byte* -dec_term(ErtsDistExternal *edep, Eterm** hpp, byte* ep, ErlOffHeap* off_heap, Eterm* objp) +dec_term(ErtsDistExternal *edep, Eterm** hpp, byte* ep, ErlOffHeap* off_heap, + Eterm* objp, B2TContext* ctx) { - Eterm* hp_saved = *hpp; + Eterm* hp_saved; int n; ErtsAtomEncoding char_enc; - register Eterm* hp = *hpp; /* Please don't take the address of hp */ - Eterm* next = objp; + register Eterm* hp; /* Please don't take the address of hp */ + Eterm* next; + SWord reds; + + if (ctx) { + hp_saved = ctx->u.dc.hp_start; + reds = ctx->reds; + next = ctx->u.dc.next; + ep = ctx->u.dc.ep; + hpp = &ctx->u.dc.hp; + + if (ctx->state != B2TDecode) { + int n_limit = reds; + + n = ctx->u.dc.remaining_n; + if (ctx->state == B2TDecodeBinary) { + n_limit *= B2T_MEMCPY_FACTOR; + ASSERT(n_limit >= reds); + reds -= n / B2T_MEMCPY_FACTOR; + } + else + reds -= n; - *next = (Eterm) (UWord) NULL; + if (n > n_limit) { + ctx->u.dc.remaining_n -= n_limit; + n = n_limit; + reds = 0; + } + else { + ctx->u.dc.remaining_n = 0; + } + + switch (ctx->state) { + case B2TDecodeList: + objp = next - 2; + while (n > 0) { + objp[0] = (Eterm) COMPRESS_POINTER(next); + objp[1] = make_list(next); + next = objp; + objp -= 2; + n--; + } + break; + + case B2TDecodeTuple: + objp = next - 1; + while (n-- > 0) { + objp[0] = (Eterm) COMPRESS_POINTER(next); + next = objp; + objp--; + } + break; + + case B2TDecodeString: + hp = *hpp; + hp[-1] = make_list(hp); /* overwrite the premature NIL */ + while (n-- > 0) { + hp[0] = make_small(*ep++); + hp[1] = make_list(hp+2); + hp += 2; + } + hp[-1] = NIL; + *hpp = hp; + break; + + case B2TDecodeBinary: + sys_memcpy(ctx->u.dc.remaining_bytes, ep, n); + ctx->u.dc.remaining_bytes += n; + ep += n; + break; + + default: + ASSERT(!"Unknown state"); + } + if (!ctx->u.dc.remaining_n) { + ctx->state = B2TDecode; + } + if (reds <= 0) { + ctx->u.dc.next = next; + ctx->u.dc.ep = ep; + ctx->reds = 0; + return NULL; + } + } + } + else { + hp_saved = *hpp; + reds = ERTS_SWORD_MAX; + next = objp; + *next = (Eterm) (UWord) NULL; + } + hp = *hpp; while (next != NULL) { + objp = next; next = (Eterm *) EXPAND_POINTER(*objp); @@ -2738,7 +3071,16 @@ dec_term_atom_common: *objp = make_tuple(hp); *hp++ = make_arityval(n); hp += n; - objp = hp - 1; + objp = hp - 1; + if (ctx) { + if (reds < n) { + ASSERT(reds > 0); + ctx->state = B2TDecodeTuple; + ctx->u.dc.remaining_n = n - reds; + n = reds; + } + reds -= n; + } while (n-- > 0) { objp[0] = (Eterm) COMPRESS_POINTER(next); next = objp; @@ -2756,17 +3098,27 @@ dec_term_atom_common: break; } *objp = make_list(hp); - hp += 2*n; + hp += 2 * n; objp = hp - 2; objp[0] = (Eterm) COMPRESS_POINTER((objp+1)); objp[1] = (Eterm) COMPRESS_POINTER(next); next = objp; objp -= 2; - while (--n > 0) { + n--; + if (ctx) { + if (reds < n) { + ctx->state = B2TDecodeList; + ctx->u.dc.remaining_n = n - reds; + n = reds; + } + reds -= n; + } + while (n > 0) { objp[0] = (Eterm) COMPRESS_POINTER(next); - objp[1] = make_list(objp + 2); + objp[1] = make_list(next); next = objp; objp -= 2; + n--; } break; case STRING_EXT: @@ -2777,6 +3129,14 @@ dec_term_atom_common: break; } *objp = make_list(hp); + if (ctx) { + if (reds < n) { + ctx->state = B2TDecodeString; + ctx->u.dc.remaining_n = n - reds; + n = reds; + } + reds -= n; + } while (n-- > 0) { hp[0] = make_small(*ep++); hp[1] = make_list(hp+2); @@ -2984,7 +3344,6 @@ dec_term_atom_common: dbin->flags = 0; dbin->orig_size = n; erts_refc_init(&dbin->refc, 1); - sys_memcpy(dbin->orig_bytes, ep, n); pb = (ProcBin *) hp; hp += PROC_BIN_SIZE; pb->thing_word = HEADER_PROC_BIN; @@ -2995,7 +3354,20 @@ dec_term_atom_common: pb->bytes = (byte*) dbin->orig_bytes; pb->flags = 0; *objp = make_binary(pb); - } + if (ctx) { + int n_limit = reds * B2T_MEMCPY_FACTOR; + if (n > n_limit) { + ctx->state = B2TDecodeBinary; + ctx->u.dc.remaining_n = n - n_limit; + ctx->u.dc.remaining_bytes = dbin->orig_bytes + n_limit; + n = n_limit; + reds = 0; + } + else + reds -= n / B2T_MEMCPY_FACTOR; + } + sys_memcpy(dbin->orig_bytes, ep, n); + } ep += n; break; } @@ -3018,13 +3390,14 @@ dec_term_atom_common: sys_memcpy(hb->data, ep, n); bin = make_binary(hb); hp += heap_bin_size(n); + ep += n; } else { Binary* dbin = erts_bin_nrml_alloc(n); ProcBin* pb; + dbin->flags = 0; dbin->orig_size = n; erts_refc_init(&dbin->refc, 1); - sys_memcpy(dbin->orig_bytes, ep, n); pb = (ProcBin *) hp; pb->thing_word = HEADER_PROC_BIN; pb->size = n; @@ -3035,8 +3408,23 @@ dec_term_atom_common: pb->flags = 0; bin = make_binary(pb); hp += PROC_BIN_SIZE; - } - ep += n; + if (ctx) { + int n_limit = reds * B2T_MEMCPY_FACTOR; + if (n > n_limit) { + ctx->state = B2TDecodeBinary; + ctx->u.dc.remaining_n = n - n_limit; + ctx->u.dc.remaining_bytes = dbin->orig_bytes + n_limit; + n = n_limit; + reds = 0; + } + else + reds -= n / B2T_MEMCPY_FACTOR; + } + sys_memcpy(dbin->orig_bytes, ep, n); + ep += n; + n = pb->size; + } + if (bitsize == 8 || n == 0) { *objp = bin; } else { @@ -3067,7 +3455,7 @@ dec_term_atom_common: goto error; } *hpp = hp; - ep = dec_term(edep, hpp, ep, off_heap, &temp); + ep = dec_term(edep, hpp, ep, off_heap, &temp, NULL); hp = *hpp; if (ep == NULL) { goto error; @@ -3127,7 +3515,7 @@ dec_term_atom_common: } *hpp = hp; /* Index */ - if ((ep = dec_term(edep, hpp, ep, off_heap, &temp)) == NULL) { + if ((ep = dec_term(edep, hpp, ep, off_heap, &temp, NULL)) == NULL) { goto error; } if (!is_small(temp)) { @@ -3136,7 +3524,7 @@ dec_term_atom_common: old_index = unsigned_val(temp); /* Uniq */ - if ((ep = dec_term(edep, hpp, ep, off_heap, &temp)) == NULL) { + if ((ep = dec_term(edep, hpp, ep, off_heap, &temp, NULL)) == NULL) { goto error; } if (!is_small(temp)) { @@ -3204,7 +3592,7 @@ dec_term_atom_common: } /* Index */ - if ((ep = dec_term(edep, hpp, ep, off_heap, &temp)) == NULL) { + if ((ep = dec_term(edep, hpp, ep, off_heap, &temp, NULL)) == NULL) { goto error; } if (!is_small(temp)) { @@ -3213,7 +3601,7 @@ dec_term_atom_common: old_index = unsigned_val(temp); /* Uniq */ - if ((ep = dec_term(edep, hpp, ep, off_heap, &temp)) == NULL) { + if ((ep = dec_term(edep, hpp, ep, off_heap, &temp, NULL)) == NULL) { goto error; } if (!is_small(temp)) { @@ -3313,8 +3701,31 @@ dec_term_atom_common: } undo_offheap_in_area(off_heap, hp_saved, hp); *hpp = hp_saved; - return NULL; + if (ctx) { + ctx->state = B2TDecodeFail; + ctx->reds = reds; + } + return NULL; } + + if (--reds <= 0) { + if (ctx) { + if (next || ctx->state != B2TDecode) { + ctx->u.dc.ep = ep; + ctx->u.dc.next = next; + ctx->u.dc.hp = hp; + ctx->reds = 0; + return NULL; + } + } + else { + reds = ERTS_SWORD_MAX; + } + } + } + if (ctx) { + ctx->state = B2TDone; + ctx->reds = reds; } *hpp = hp; return ep; @@ -3602,18 +4013,37 @@ encode_size_struct_int(Process *p, ErtsAtomCacheMap *acmp, Eterm obj, } static Sint -decoded_size(byte *ep, byte* endp, int internal_tags) +decoded_size(byte *ep, byte* endp, int internal_tags, B2TContext* ctx) { - int heap_size = 0; + int heap_size; int terms; - int atom_extra_skip = 0; + int atom_extra_skip; Uint n; + SWord reds; + + if (ctx) { + reds = ctx->reds; + if (ctx->u.sc.ep) { + heap_size = ctx->u.sc.heap_size; + terms = ctx->u.sc.terms; + ep = ctx->u.sc.ep; + atom_extra_skip = ctx->u.sc.atom_extra_skip; + goto init_done; + } + } + else + reds = 0; /* not used but compiler warns anyway */ + + heap_size = 0; + terms = 1; + atom_extra_skip = 0; +init_done: #define SKIP(sz) \ do { \ if ((sz) <= endp-ep) { \ ep += (sz); \ - } else { return -1; }; \ + } else { goto error; }; \ } while (0) #define SKIP2(sz1, sz2) \ @@ -3621,25 +4051,24 @@ decoded_size(byte *ep, byte* endp, int internal_tags) Uint sz = (sz1) + (sz2); \ if (sz1 < sz && (sz) <= endp-ep) { \ ep += (sz); \ - } else { return -1; } \ + } else { goto error; } \ } while (0) #define CHKSIZE(sz) \ do { \ - if ((sz) > endp-ep) { return -1; } \ + if ((sz) > endp-ep) { goto error; } \ } while (0) #define ADDTERMS(n) \ do { \ int before = terms; \ terms += (n); \ - if (terms < before) return -1; \ + if (terms < before) goto error; \ } while (0) - - for (terms=1; terms > 0; terms--) { - int tag; - + ASSERT(terms > 0); + do { + int tag; CHKSIZE(1); tag = ep++[0]; switch (tag) { @@ -3660,7 +4089,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags) CHKSIZE(4); n = get_int32(ep); if (n > BIG_ARITY_MAX*sizeof(ErtsDigit)) { - return -1; + goto error; } SKIP2(n,4+1); /* skip, size,sign,digits */ heap_size += 1+1+(n+sizeof(Eterm)-1)/sizeof(Eterm); /* XXX: 1 too much? */ @@ -3669,7 +4098,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags) CHKSIZE(2); n = get_int16(ep); if (n > MAX_ATOM_CHARACTERS) { - return -1; + goto error; } SKIP(n+2+atom_extra_skip); atom_extra_skip = 0; @@ -3679,7 +4108,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags) n = get_int16(ep); ep += 2; if (n > MAX_ATOM_SZ_LIMIT) { - return -1; + goto error; } SKIP(n+atom_extra_skip); atom_extra_skip = 0; @@ -3688,7 +4117,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags) CHKSIZE(1); n = get_int8(ep); if (n > MAX_ATOM_CHARACTERS) { - return -1; + goto error; } SKIP(n+1+atom_extra_skip); atom_extra_skip = 0; @@ -3698,7 +4127,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags) n = get_int8(ep); ep++; if (n > MAX_ATOM_SZ_LIMIT) { - return -1; + goto error; } SKIP(n+atom_extra_skip); atom_extra_skip = 0; @@ -3727,7 +4156,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags) id_words = get_int16(ep); if (id_words > ERTS_MAX_REF_NUMBERS) - return -1; + goto error; ep += 2; atom_extra_skip = 1 + 4*id_words; @@ -3829,7 +4258,7 @@ decoded_size(byte *ep, byte* endp, int internal_tags) num_free = get_int32(ep); ep += 4; if (num_free > MAX_ARG) { - return -1; + goto error; } terms += 4 + num_free; heap_size += ERL_FUN_SIZE + num_free; @@ -3846,24 +4275,47 @@ decoded_size(byte *ep, byte* endp, int internal_tags) case BINARY_INTERNAL_REF: if (!internal_tags) { - return -1; + goto error; } SKIP(sizeof(ProcBin)); heap_size += PROC_BIN_SIZE; break; case BIT_BINARY_INTERNAL_REF: if (!internal_tags) { - return -1; + goto error; } SKIP(2+sizeof(ProcBin)); heap_size += PROC_BIN_SIZE + ERL_SUB_BIN_SIZE; break; default: - return -1; + goto error; } - } + terms--; + + if (ctx && --reds <= 0 && terms > 0) { + ctx->u.sc.heap_size = heap_size; + ctx->u.sc.terms = terms; + ctx->u.sc.ep = ep; + ctx->u.sc.atom_extra_skip = atom_extra_skip; + ctx->reds = 0; + return 0; + } + }while (terms > 0); + /* 'terms' may be non-zero if it has wrapped around */ - return terms==0 ? heap_size : -1; + if (terms == 0) { + if (ctx) { + ctx->state = B2TDecodeInit; + ctx->reds = reds; + } + return heap_size; + } + +error: + if (ctx) { + ctx->state = B2TBadArg; + } + return -1; #undef SKIP #undef SKIP2 #undef CHKSIZE diff --git a/erts/emulator/beam/external.h b/erts/emulator/beam/external.h index ff29e84972..83001b2c7e 100644 --- a/erts/emulator/beam/external.h +++ b/erts/emulator/beam/external.h @@ -146,6 +146,7 @@ typedef struct { typedef struct { byte *extp; int exttmp; + Uint extsize; } ErtsBinary2TermState; /* -------------------------------------------------------------------------- */ diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h index 94bc1b172a..6e5d352e5b 100755 --- a/erts/emulator/beam/global.h +++ b/erts/emulator/beam/global.h @@ -921,7 +921,8 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, ErtsAlcType_t alloc_type, int allow_empty, int allow_atom, int encoding, - Sint *used /* out */); + Sint *used /* out */, + Uint extra); char* erts_convert_filename_to_wchar(byte* bytes, Uint size, char *statbuf, size_t statbuf_size, ErtsAlcType_t alloc_type, Sint* used, diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c index d4623c0450..49af86b36a 100644 --- a/erts/emulator/beam/io.c +++ b/erts/emulator/beam/io.c @@ -7061,7 +7061,7 @@ void *driver_dl_open(char * path) int res; int *last_error_p = erts_smp_tsd_get(driver_list_last_error_key); int locked = maybe_lock_driver_list(); - if ((res = erts_sys_ddll_open(path, &ptr)) == 0) { + if ((res = erts_sys_ddll_open(path, &ptr, NULL)) == 0) { maybe_unlock_driver_list(locked); return ptr; } else { diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h index 31252ed78f..189d9ebac8 100644 --- a/erts/emulator/beam/sys.h +++ b/erts/emulator/beam/sys.h @@ -279,18 +279,21 @@ typedef unsigned long UWord; typedef long SWord; #define SWORD_CONSTANT(Const) Const##L #define UWORD_CONSTANT(Const) Const##UL +#define ERTS_UWORD_MAX ULONG_MAX #define ERTS_SWORD_MAX LONG_MAX #elif SIZEOF_VOID_P == SIZEOF_INT typedef unsigned int UWord; typedef int SWord; #define SWORD_CONSTANT(Const) Const #define UWORD_CONSTANT(Const) Const##U +#define ERTS_UWORD_MAX UINT_MAX #define ERTS_SWORD_MAX INT_MAX #elif SIZEOF_VOID_P == SIZEOF_LONG_LONG typedef unsigned long long UWord; typedef long long SWord; #define SWORD_CONSTANT(Const) Const##LL #define UWORD_CONSTANT(Const) Const##ULL +#define ERTS_UWORD_MAX ULLONG_MAX #define ERTS_SWORD_MAX LLONG_MAX #else #error Found no appropriate type to use for 'Eterm', 'Uint' and 'Sint' @@ -304,6 +307,7 @@ typedef unsigned long Uint; typedef long Sint; #define SWORD_CONSTANT(Const) Const##L #define UWORD_CONSTANT(Const) Const##UL +#define ERTS_UWORD_MAX ULONG_MAX #define ERTS_SWORD_MAX LONG_MAX #define ERTS_SIZEOF_ETERM SIZEOF_LONG #define ErtsStrToSint strtol @@ -313,6 +317,7 @@ typedef unsigned int Uint; typedef int Sint; #define SWORD_CONSTANT(Const) Const #define UWORD_CONSTANT(Const) Const##U +#define ERTS_UWORD_MAX UINT_MAX #define ERTS_SWORD_MAX INT_MAX #define ERTS_SIZEOF_ETERM SIZEOF_INT #define ErtsStrToSint strtol @@ -322,6 +327,7 @@ typedef unsigned long long Uint; typedef long long Sint; #define SWORD_CONSTANT(Const) Const##LL #define UWORD_CONSTANT(Const) Const##ULL +#define ERTS_UWORD_MAX ULLONG_MAX #define ERTS_SWORD_MAX LLONG_MAX #define ERTS_SIZEOF_ETERM SIZEOF_LONG_LONG #if defined(__WIN32__) @@ -661,8 +667,7 @@ typedef struct { #define ERTS_SYS_DDLL_ERROR_INIT {NULL} extern void erts_sys_ddll_free_error(ErtsSysDdllError*); extern void erl_sys_ddll_init(void); /* to initialize mutexes etc */ -extern int erts_sys_ddll_open2(const char *path, void **handle, ErtsSysDdllError*); -#define erts_sys_ddll_open(P,H) erts_sys_ddll_open2(P,H,NULL) +extern int erts_sys_ddll_open(const char *path, void **handle, ErtsSysDdllError*); extern int erts_sys_ddll_open_noext(char *path, void **handle, ErtsSysDdllError*); extern int erts_sys_ddll_load_driver_init(void *handle, void **function); extern int erts_sys_ddll_load_nif_init(void *handle, void **function,ErtsSysDdllError*); diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c index 978a766de9..80937dfcc8 100644 --- a/erts/emulator/drivers/common/inet_drv.c +++ b/erts/emulator/drivers/common/inet_drv.c @@ -1490,8 +1490,8 @@ static int load_ip_and_port unsigned int alen = len; char abuf [len]; int res = inet_get_address(abuf, (inet_address*) addr, &alen); - ASSERT(res==0); - res = 0; + ASSERT(res==0); (void)res; + /* Now "abuf" contains: Family(1b), Port(2b), IP(4|16b) */ /* NB: the following functions are safe to use, as they create tuples diff --git a/erts/emulator/sys/unix/erl_unix_sys_ddll.c b/erts/emulator/sys/unix/erl_unix_sys_ddll.c index 12c47d0088..8760b58839 100644 --- a/erts/emulator/sys/unix/erl_unix_sys_ddll.c +++ b/erts/emulator/sys/unix/erl_unix_sys_ddll.c @@ -101,7 +101,7 @@ void erl_sys_ddll_init(void) { /* * Open a shared object */ -int erts_sys_ddll_open2(const char *full_name, void **handle, ErtsSysDdllError* err) +int erts_sys_ddll_open(const char *full_name, void **handle, ErtsSysDdllError* err) { #if defined(HAVE_DLOPEN) char* dlname; diff --git a/erts/emulator/sys/win32/erl_win32_sys_ddll.c b/erts/emulator/sys/win32/erl_win32_sys_ddll.c index 2d3f073cc2..338f0d7386 100644 --- a/erts/emulator/sys/win32/erl_win32_sys_ddll.c +++ b/erts/emulator/sys/win32/erl_win32_sys_ddll.c @@ -59,7 +59,7 @@ void erl_sys_ddll_init(void) { * Open a shared object * Expecting 'full_name' as an UTF-8 string. */ -int erts_sys_ddll_open2(const char *full_name, void **handle, ErtsSysDdllError* err) +int erts_sys_ddll_open(const char *full_name, void **handle, ErtsSysDdllError* err) { HINSTANCE hinstance; int len; diff --git a/erts/emulator/test/binary_SUITE.erl b/erts/emulator/test/binary_SUITE.erl index 44dbb2c588..bce4278337 100644 --- a/erts/emulator/test/binary_SUITE.erl +++ b/erts/emulator/test/binary_SUITE.erl @@ -447,26 +447,26 @@ terms(Config) when is_list(Config) -> Sz1 when is_integer(Sz1), size(Bin1) =< Sz1 -> ok end, - Term = binary_to_term(Bin), - Term = binary_to_term(Bin, [safe]), + Term = binary_to_term_stress(Bin), + Term = binary_to_term_stress(Bin, [safe]), Unaligned = make_unaligned_sub_binary(Bin), - Term = binary_to_term(Unaligned), - Term = binary_to_term(Unaligned, []), - Term = binary_to_term(Bin, [safe]), + Term = binary_to_term_stress(Unaligned), + Term = binary_to_term_stress(Unaligned, []), + Term = binary_to_term_stress(Bin, [safe]), BinC = erlang:term_to_binary(Term, [compressed]), - Term = binary_to_term(BinC), + Term = binary_to_term_stress(BinC), true = size(BinC) =< size(Bin), Bin = term_to_binary(Term, [{compressed,0}]), terms_compression_levels(Term, size(Bin), 1), UnalignedC = make_unaligned_sub_binary(BinC), - Term = binary_to_term(UnalignedC) + Term = binary_to_term_stress(UnalignedC) end, ?line test_terms(TestFun), ok. terms_compression_levels(Term, UncompressedSz, Level) when Level < 10 -> BinC = erlang:term_to_binary(Term, [{compressed,Level}]), - Term = binary_to_term(BinC), + Term = binary_to_term_stress(BinC), Sz = byte_size(BinC), true = Sz =< UncompressedSz, terms_compression_levels(Term, UncompressedSz, Level+1); @@ -476,9 +476,9 @@ terms_float(Config) when is_list(Config) -> ?line test_floats(fun(Term) -> Bin0 = term_to_binary(Term), Bin0 = term_to_binary(Term, [{minor_version,0}]), - Term = binary_to_term(Bin0), + Term = binary_to_term_stress(Bin0), Bin1 = term_to_binary(Term, [{minor_version,1}]), - Term = binary_to_term(Bin1), + Term = binary_to_term_stress(Bin1), true = size(Bin1) < size(Bin0), Size0 = erlang:external_size(Term), Size00 = erlang:external_size(Term, [{minor_version, 0}]), @@ -490,7 +490,7 @@ terms_float(Config) when is_list(Config) -> float_middle_endian(Config) when is_list(Config) -> %% Testing for roundtrip is not enough. ?line <<131,70,63,240,0,0,0,0,0,0>> = term_to_binary(1.0, [{minor_version,1}]), - ?line 1.0 = binary_to_term(<<131,70,63,240,0,0,0,0,0,0>>). + ?line 1.0 = binary_to_term_stress(<<131,70,63,240,0,0,0,0,0,0>>). external_size(Config) when is_list(Config) -> %% Build a term whose external size only fits in a big num (on 32-bit CPU). @@ -608,10 +608,10 @@ bad_binary_to_term(Config) when is_list(Config) -> ok. bad_bin_to_term(BadBin) -> - {'EXIT',{badarg,_}} = (catch binary_to_term(BadBin)). + {'EXIT',{badarg,_}} = (catch binary_to_term_stress(BadBin)). bad_bin_to_term(BadBin,Opts) -> - {'EXIT',{badarg,_}} = (catch binary_to_term(BadBin,Opts)). + {'EXIT',{badarg,_}} = (catch binary_to_term_stress(BadBin,Opts)). safe_binary_to_term2(doc) -> "Test safety options for binary_to_term/2"; safe_binary_to_term2(Config) when is_list(Config) -> @@ -622,7 +622,7 @@ safe_binary_to_term2(Config) when is_list(Config) -> BadRef = <<131,114,0,3,BadHostAtom/binary,0,<<0,0,0,255>>/binary, Empty/binary,Empty/binary>>, ?line bad_bin_to_term(BadRef, [safe]), % good ref, with a bad atom - ?line fullsweep_after = binary_to_term(<<131,100,0,15,"fullsweep_after">>, [safe]), % should be a good atom + ?line fullsweep_after = binary_to_term_stress(<<131,100,0,15,"fullsweep_after">>, [safe]), % should be a good atom BadExtFun = <<131,113,100,0,4,98,108,117,101,100,0,4,109,111,111,110,97,3>>, ?line bad_bin_to_term(BadExtFun, [safe]), ok. @@ -679,14 +679,14 @@ corrupter0(Term) -> corrupter(Bin, Pos) when Pos >= 0 -> ?line {ShorterBin, Rest} = split_binary(Bin, Pos), - ?line catch binary_to_term(ShorterBin), %% emulator shouldn't crash + ?line catch binary_to_term_stress(ShorterBin), %% emulator shouldn't crash ?line MovedBin = list_to_binary([ShorterBin]), - ?line catch binary_to_term(MovedBin), %% emulator shouldn't crash + ?line catch binary_to_term_stress(MovedBin), %% emulator shouldn't crash %% Bit faults, shouldn't crash <<Byte,Tail/binary>> = Rest, Fun = fun(M) -> FaultyByte = Byte bxor M, - catch binary_to_term(<<ShorterBin/binary, + catch binary_to_term_stress(<<ShorterBin/binary, FaultyByte, Tail/binary>>) end, ?line lists:foreach(Fun,[1,2,4,8,16,32,64,128,255]), ?line corrupter(Bin, Pos-1); @@ -700,7 +700,7 @@ more_bad_terms(Config) when is_list(Config) -> ?line ok = io:format("File: ~s\n", [BadFile]), ?line case file:read_file(BadFile) of {ok,Bin} -> - ?line {'EXIT',{badarg,_}} = (catch binary_to_term(Bin)), + ?line {'EXIT',{badarg,_}} = (catch binary_to_term_stress(Bin)), ok; Other -> ?line ?t:fail(Other) @@ -709,7 +709,7 @@ more_bad_terms(Config) when is_list(Config) -> otp_5484(Config) when is_list(Config) -> ?line {'EXIT',_} = (catch - binary_to_term( + binary_to_term_stress( <<131, 104,2, %Tuple, 2 elements 103, %Pid @@ -722,7 +722,7 @@ otp_5484(Config) when is_list(Config) -> ?line {'EXIT',_} = (catch - binary_to_term( + binary_to_term_stress( <<131, 104,2, %Tuple, 2 elements 103, %Pid @@ -734,13 +734,13 @@ otp_5484(Config) when is_list(Config) -> ?line {'EXIT',_} = (catch - binary_to_term( + binary_to_term_stress( %% A old-type fun in a list containing a bad creator pid. <<131,108,0,0,0,1,117,0,0,0,0,103,100,0,13,110,111,110,111,100,101,64,110,111,104,111,115,116,255,255,0,25,255,0,0,0,0,100,0,1,116,97,0,98,6,142,121,72,106>>)), ?line {'EXIT',_} = (catch - binary_to_term( + binary_to_term_stress( %% A new-type fun in a list containing a bad creator pid. %% <<131, @@ -752,7 +752,7 @@ otp_5484(Config) when is_list(Config) -> ?line {'EXIT',_} = (catch - binary_to_term( + binary_to_term_stress( %% A new-type fun in a list containing a bad module. <<131, 108,0,0,0,1, %List, 1 element @@ -763,7 +763,7 @@ otp_5484(Config) when is_list(Config) -> ?line {'EXIT',_} = (catch - binary_to_term( + binary_to_term_stress( %% A new-type fun in a list containing a bad index. <<131, 108,0,0,0,1, %List, 1 element @@ -775,7 +775,7 @@ otp_5484(Config) when is_list(Config) -> ?line {'EXIT',_} = (catch - binary_to_term( + binary_to_term_stress( %% A new-type fun in a list containing a bad unique value. <<131, 108,0,0,0,1, %List, 1 element @@ -788,46 +788,46 @@ otp_5484(Config) when is_list(Config) -> %% An absurdly large atom. ?line {'EXIT',_} = - (catch binary_to_term(iolist_to_binary([<<131,100,65000:16>>| + (catch binary_to_term_stress(iolist_to_binary([<<131,100,65000:16>>| lists:duplicate(65000, 42)]))), %% Longer than 255 characters. ?line {'EXIT',_} = - (catch binary_to_term(iolist_to_binary([<<131,100,256:16>>| + (catch binary_to_term_stress(iolist_to_binary([<<131,100,256:16>>| lists:duplicate(256, 42)]))), %% OTP-7218. Thanks to Matthew Dempsky. Also make sure that we %% cover the other error cases for external funs (EXPORT_EXT). ?line {'EXIT',_} = - (catch binary_to_term( + (catch binary_to_term_stress( <<131, 113, %EXPORT_EXP 97,13, %Integer: 13 97,13, %Integer: 13 97,13>>)), %Integer: 13 ?line {'EXIT',_} = - (catch binary_to_term( + (catch binary_to_term_stress( <<131, 113, %EXPORT_EXP 100,0,1,64, %Atom: '@' 97,13, %Integer: 13 97,13>>)), %Integer: 13 ?line {'EXIT',_} = - (catch binary_to_term( + (catch binary_to_term_stress( <<131, 113, %EXPORT_EXP 100,0,1,64, %Atom: '@' 100,0,1,64, %Atom: '@' 106>>)), %NIL ?line {'EXIT',_} = - (catch binary_to_term( + (catch binary_to_term_stress( <<131, 113, %EXPORT_EXP 100,0,1,64, %Atom: '@' 100,0,1,64, %Atom: '@' 98,255,255,255,255>>)), %Integer: -1 ?line {'EXIT',_} = - (catch binary_to_term( + (catch binary_to_term_stress( <<131, 113, %EXPORT_EXP 100,0,1,64, %Atom: '@' @@ -835,7 +835,7 @@ otp_5484(Config) when is_list(Config) -> 113,97,13,97,13,97,13>>)), %fun 13:13/13 %% Bad funs. - ?line {'EXIT',_} = (catch binary_to_term(fake_fun(0, lists:seq(0, 256)))), + ?line {'EXIT',_} = (catch binary_to_term_stress(fake_fun(0, lists:seq(0, 256)))), ok. fake_fun(Arity, Env0) -> @@ -869,7 +869,7 @@ try_bad_lengths(B) -> try_bad_lengths(B, L) when L > 16#FFFFFFF0 -> Bin = <<B/binary,L:32>>, io:format("~p\n", [Bin]), - {'EXIT',_} = (catch binary_to_term(Bin)), + {'EXIT',_} = (catch binary_to_term_stress(Bin)), try_bad_lengths(B, L-1); try_bad_lengths(_, _) -> ok. @@ -923,7 +923,7 @@ otp_6817_try_bin(Bin) -> %% If the bug is present, the heap pointer will moved when the invalid term %% is found and we will have a linked list passing through the limbo area %% between the heap top and the stack pointer. - catch binary_to_term(Bin), + catch binary_to_term_stress(Bin), %% If the bug is present, we will overwrite the pointers in the limbo area. Filler = erlang:make_tuple(1024, 16#3FA), @@ -1238,7 +1238,7 @@ bit_sized_binary_sizes(Config) when is_list(Config) -> bsbs_1(A) -> BinSize = 32+A, io:format("A: ~p BinSize: ~p", [A,BinSize]), - Bin = binary_to_term(<<131,$M,5:32,A,0,0,0,0,0>>), + Bin = binary_to_term_stress(<<131,$M,5:32,A,0,0,0,0,0>>), BinSize = bit_size(Bin). deep(Config) when is_list(Config) -> @@ -1255,7 +1255,7 @@ deep(Config) when is_list(Config) -> deep_roundtrip(T) -> B = term_to_binary(T), - T = binary_to_term(B). + T = binary_to_term_stress(B). obsolete_funs(Config) when is_list(Config) -> erts_debug:set_internal_state(available_internal_state, true), @@ -1290,29 +1290,29 @@ obsolete_fun(Fun) -> Tuple = no_fun_roundtrip(Fun). no_fun_roundtrip(Term) -> - binary_to_term(erts_debug:get_internal_state({term_to_binary_no_funs,Term})). + binary_to_term_stress(erts_debug:get_internal_state({term_to_binary_no_funs,Term})). %% Test non-standard encodings never generated by term_to_binary/1 %% but recognized by binary_to_term/1. robustness(Config) when is_list(Config) -> - ?line [] = binary_to_term(<<131,107,0,0>>), %Empty string. - ?line [] = binary_to_term(<<131,108,0,0,0,0,106>>), %Zero-length list. + ?line [] = binary_to_term_stress(<<131,107,0,0>>), %Empty string. + ?line [] = binary_to_term_stress(<<131,108,0,0,0,0,106>>), %Zero-length list. %% {[],a} where [] is a zero-length list. - ?line {[],a} = binary_to_term(<<131,104,2,108,0,0,0,0,106,100,0,1,97>>), + ?line {[],a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,106,100,0,1,97>>), %% {42,a} where 42 is a zero-length list with 42 in the tail. - ?line {42,a} = binary_to_term(<<131,104,2,108,0,0,0,0,97,42,100,0,1,97>>), + ?line {42,a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,97,42,100,0,1,97>>), %% {{x,y},a} where {x,y} is a zero-length list with {x,y} in the tail. - ?line {{x,y},a} = binary_to_term(<<131,104,2,108,0,0,0,0, + ?line {{x,y},a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0, 104,2,100,0,1,120,100,0,1, 121,100,0,1,97>>), %% Bignums fitting in 32 bits. - ?line 16#7FFFFFFF = binary_to_term(<<131,98,127,255,255,255>>), - ?line -1 = binary_to_term(<<131,98,255,255,255,255>>), + ?line 16#7FFFFFFF = binary_to_term_stress(<<131,98,127,255,255,255>>), + ?line -1 = binary_to_term_stress(<<131,98,255,255,255,255>>), ok. @@ -1330,7 +1330,7 @@ run_otp_8180(Name) -> ?line {ok,Bins} = file:consult(Name), [begin io:format("~p\n", [Bin]), - ?line {'EXIT',{badarg,_}} = (catch binary_to_term(Bin)) + ?line {'EXIT',{badarg,_}} = (catch binary_to_term_stress(Bin)) end || Bin <- Bins], ok. @@ -1399,3 +1399,52 @@ unaligned_sub_bin(Bin0, Offs) -> Bin. id(I) -> I. + + +%% Stress binary_to_term with different initial reductions +binary_to_term_stress(Bin) -> + binary_to_term_stress(Bin, no_opts). + +binary_to_term_stress(Bin, Opts) -> + Reds = get_reds(), + T = b2t(erlang:system_info(context_reductions), + Bin, Opts, catch_binary_to_term(Bin, Opts)), + set_reds(Reds), + T = case Opts of + no_opts -> binary_to_term(Bin); + _ -> binary_to_term(Bin,Opts) + end. + +catch_binary_to_term(Bin, no_opts) -> + try binary_to_term(Bin) + catch + error:badarg -> binary_to_term_throws_badarg + end; +catch_binary_to_term(Bin, Opts) -> + try binary_to_term(Bin, Opts) + catch + error:badarg -> binary_to_term_throws_badarg + end. + +b2t(0, _Bin, _Opts, Term) -> + Term; +b2t(Reds, Bin, Opts, Term) -> + set_reds(Reds), + Term = catch_binary_to_term(Bin,Opts), + b2t(Reds div 3, Bin, Opts, Term). + +set_reds(Reds) -> + try erts_debug:set_internal_state(reds_left, Reds) + catch + error:undef -> + erts_debug:set_internal_state(available_internal_state, true), + set_reds(Reds) + end. + +get_reds() -> + try erts_debug:get_internal_state(reds_left) + catch + error:undef -> + erts_debug:set_internal_state(available_internal_state, true), + get_reds() + end. diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam Binary files differindex fb222cb64b..73fac27161 100644 --- a/erts/preloaded/ebin/erlang.beam +++ b/erts/preloaded/ebin/erlang.beam diff --git a/erts/preloaded/ebin/erts_internal.beam b/erts/preloaded/ebin/erts_internal.beam Binary files differindex 9ab806718b..12b36913a9 100644 --- a/erts/preloaded/ebin/erts_internal.beam +++ b/erts/preloaded/ebin/erts_internal.beam diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index a21da2ecc9..0ed677c3d8 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -362,15 +362,25 @@ binary_to_list(_Binary, _Start, _Stop) -> %% binary_to_term/1 -spec binary_to_term(Binary) -> term() when Binary :: ext_binary(). -binary_to_term(_Binary) -> - erlang:nif_error(undefined). +binary_to_term(Binary) -> + %% This BIF may throw badarg while trapping + try + erts_internal:binary_to_term(Binary) + catch + error:Reason -> erlang:error(Reason,[Binary]) + end. %% binary_to_term/2 -spec binary_to_term(Binary, Opts) -> term() when Binary :: ext_binary(), Opts :: [safe]. -binary_to_term(_Binary, _Opts) -> - erlang:nif_error(undefined). +binary_to_term(Binary, Opts) -> + %% This BIF may throw badarg while trapping + try + erts_internal:binary_to_term(Binary,Opts) + catch + error:Reason -> erlang:error(Reason,[Binary,Opts]) + end. %% bit_size/1 %% Shadowed by erl_bif_types: erlang:bit_size/1 diff --git a/erts/preloaded/src/erts_internal.erl b/erts/preloaded/src/erts_internal.erl index c8e8e7e069..d6a185482e 100644 --- a/erts/preloaded/src/erts_internal.erl +++ b/erts/preloaded/src/erts_internal.erl @@ -29,7 +29,7 @@ -module(erts_internal). -export([await_port_send_result/3]). - +-export([binary_to_term/1, binary_to_term/2]). -export([port_command/3, port_connect/2, port_close/1, port_control/3, port_call/3, port_info/1, port_info/2]). @@ -160,3 +160,13 @@ request_system_task(_Pid, _Prio, _Request) -> check_process_code(_Module, _OptionList) -> erlang:nif_error(undefined). +-spec binary_to_term(Binary) -> term() when + Binary :: binary(). +binary_to_term(_Binary) -> + erlang:nif_error(undefined). + +-spec binary_to_term(Binary, Opts) -> term() when + Binary :: binary(), + Opts :: [safe]. +binary_to_term(_Binary, _Opts) -> + erlang:nif_error(undefined). diff --git a/lib/Makefile b/lib/Makefile index ec26a01dc6..5128241563 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -28,10 +28,10 @@ ERLANG_APPLICATIONS = tools test_server common_test runtime_tools \ inets xmerl edoc erl_docgen # These are only build if -a is given to otp_build or make is used directly -ALL_ERLANG_APPLICATIONS = snmp otp_mibs appmon erl_interface asn1 jinterface \ +ALL_ERLANG_APPLICATIONS = snmp otp_mibs erl_interface asn1 jinterface \ wx debugger reltool gs \ ic mnesia crypto orber os_mon parsetools syntax_tools \ - pman public_key ssl toolbar tv observer odbc diameter \ + public_key ssl observer odbc diameter \ cosTransactions cosEvent cosTime cosNotification \ cosProperty cosFileTransfer cosEventDomain et megaco webtool \ eunit ssh typer percept eldap dialyzer hipe diff --git a/lib/appmon/AUTHORS b/lib/appmon/AUTHORS deleted file mode 100644 index b727dae36d..0000000000 --- a/lib/appmon/AUTHORS +++ /dev/null @@ -1,5 +0,0 @@ -Original Authors and Contributors: - -Peter Lundell -Stefan Anbratt -Gunilla Arendt diff --git a/lib/appmon/BUGS_AND_FIXES b/lib/appmon/BUGS_AND_FIXES deleted file mode 100644 index fdac7f34c5..0000000000 --- a/lib/appmon/BUGS_AND_FIXES +++ /dev/null @@ -1,5 +0,0 @@ - -***) reverse the list of children for a process, to match the starting -order. - -***) diff --git a/lib/appmon/Makefile b/lib/appmon/Makefile deleted file mode 100644 index 62033ab92e..0000000000 --- a/lib/appmon/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1996-2009. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Macros -# ---------------------------------------------------- - -SUB_DIRECTORIES = src priv doc/src - -SPECIAL_TARGETS = - -# ---------------------------------------------------- -# Default Subdir Targets -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_subdir.mk - diff --git a/lib/appmon/doc/html/.gitignore b/lib/appmon/doc/html/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/appmon/doc/html/.gitignore +++ /dev/null diff --git a/lib/appmon/doc/man3/.gitignore b/lib/appmon/doc/man3/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/appmon/doc/man3/.gitignore +++ /dev/null diff --git a/lib/appmon/doc/pdf/.gitignore b/lib/appmon/doc/pdf/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/appmon/doc/pdf/.gitignore +++ /dev/null diff --git a/lib/appmon/doc/src/Makefile b/lib/appmon/doc/src/Makefile deleted file mode 100644 index 7c93abe6d8..0000000000 --- a/lib/appmon/doc/src/Makefile +++ /dev/null @@ -1,120 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1997-2012. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Application version -# ---------------------------------------------------- -include ../../vsn.mk -VSN=$(APPMON_VSN) -APPLICATION=appmon - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN) - -# ---------------------------------------------------- -# Target Specs -# ---------------------------------------------------- -XML_APPLICATION_FILES = ref_man.xml -XML_REF3_FILES = appmon.xml - -XML_PART_FILES = \ - part.xml \ - part_notes.xml - -XML_CHAPTER_FILES = \ - appmon_chapter.xml \ - notes.xml - -BOOK_FILES = book.xml - -XML_FILES = $(BOOK_FILES) $(XML_APPLICATION_FILES) $(XML_REF3_FILES) \ - $(XML_PART_FILES) $(XML_CHAPTER_FILES) - -GIF_FILES = \ - app_win.gif \ - listbox_win.gif \ - main_win.gif \ - pinfo_win.gif \ - note.gif - -# ---------------------------------------------------- - -HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \ - $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html) - -INFO_FILE = ../../info - -MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3) - -HTML_REF_MAN_FILE = $(HTMLDIR)/index.html - -TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf - -# ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- -XML_FLAGS += - -# ---------------------------------------------------- -# Targets -# ---------------------------------------------------- -$(HTMLDIR)/%.gif: %.gif - $(INSTALL_DATA) $< $@ - -docs: pdf html man - -$(TOP_PDF_FILE): $(XML_FILES) - -pdf: $(TOP_PDF_FILE) - -html: gifs $(HTML_REF_MAN_FILE) - -clean clean_docs: - rm -rf $(HTMLDIR)/* - rm -f $(MAN3DIR)/* - rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo) - rm -f errs core *~ - rm -f $(JD_HTML) $(JD_PACK) - -man: $(MAN3_FILES) - -gifs: $(GIF_FILES:%=$(HTMLDIR)/%) - -debug opt: - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_docs_spec: docs - $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DIR) "$(RELSYSDIR)/doc/html" - $(INSTALL_DATA) $(HTMLDIR)/* \ - "$(RELSYSDIR)/doc/html" - $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)" - $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3" - $(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3" - -release_spec: - diff --git a/lib/appmon/doc/src/app_win.gif b/lib/appmon/doc/src/app_win.gif Binary files differdeleted file mode 100644 index 06f21d04a9..0000000000 --- a/lib/appmon/doc/src/app_win.gif +++ /dev/null diff --git a/lib/appmon/doc/src/app_win.ps b/lib/appmon/doc/src/app_win.ps deleted file mode 100644 index 73d4cad278..0000000000 --- a/lib/appmon/doc/src/app_win.ps +++ /dev/null @@ -1,680 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./app_win.tmp.eps) -%%CreationDate: (Tue Jun 12 17:59:02 2001) -%%BoundingBox: 0 46 300 384 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 46 300 384 -userdict begin -%%BeginData: -DisplayImage -0 46 -300.000000 338.000000 -12 -382 431 -1 -0 -0 -16 -ffffff -000000 -e8e3dc -708090 -b03060 -d9d9d9 -b3b3b3 -7f7f7f -a3a3a3 -828282 -000000 -000000 -000000 -000000 -000000 -000000 -04ff04ff04ff04de05000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500041a050c04d1050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000408 -050c04050500040a0500040a050104030505040105050401050104040501040305030403 -050104020501044a05010400050104000501040005010411050104050504040205010404 -050104050501040005010409050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000407050004020500040205000402 -050004050500040a05000409050304020501040205010400050104020501040005010404 -050104020501040105010402050204010501044a05010403050104000501041105010403 -050104040500040805010408050104080500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004080500040205000402 -050004020500040505000403050204030500040905000401050004020501040205010400 -050104020501040005020402050204010501040305010401050204010501040105010404 -050004000502040005020401050104020501040105030401050104000501040105010400 -050104060503040105010400050104060501040005010400050104000501040005010400 -050104020503040105010400050504020500040605000400050104010501040005010400 -050104000503040005010409050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000407050004020500040205000402 -050004050500040205040402050004080501040105010401050104020501040005010402 -050104000502040205020401050104030501040105010400050004000501040105010404 -050104010501040105010400050104020501040005010401050104000502040005010400 -050204000501040405010401050104000502040005010404050104000502040005010400 -050104000502040005010400050104010501040005040400050104020500040205010400 -050004000500040005010400050104000502040005060400050104080500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004080504040205000402050004050500040105060401050004080501040105010401 -050504010505040105030400050304010501040305010401050104000500040005010408 -050104010501040105010401050104000501040505010400050104010501040005010401 -050104040501040105010400050104010501040405010401050104000501040005010400 -050104010501040005010401050104000502040205010402050004010500040105000401 -050004000501040005010401050104000502040105010400050104090500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004070500040605000402050004050500040105060401050004080505040105010405 -050104050501040005000400050004000501040105010403050104010501040105020408 -050104010501040105010401050104000501040205040400050104010501040005010401 -050104040501040105010400050104010501040405010401050104000501040005010400 -050104010501040005050400050104030501040205000400050004020500040105000400 -050104000501040105010400050104020501040005010408050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000408 -050004060500040205000405050004010506040105000407050104030501040005010405 -050104050501040005020400050104010501040305010401050104010502040805010401 -050104010501040205020402050104010501040005010401050104000501040105010404 -050104010501040005010401050104040501040105010400050104000501040005010401 -050104000501040405010403050104020500040005000401050104000500040105010400 -050104010501040005010402050104000501040905000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040705000406 -050004020500040505000402050404020500040705010403050104000501040505010405 -050104010500040105010402050104010501040205010402050104010501040405010401 -050104010501040205020402050104010501040005020400050104000502040005010404 -050104010501040005010401050104040501040005020400050104000501040005020400 -050104000501040105010400050104030501040005000400050004010501040005010402 -050104000501040005020400050104020501040005010408050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000408 -050804020500040505000403050204030500040705010403050104000501040505010405 -050104010500040105010403050304030501040205010401050104040501040105010401 -050104030501040305020400050304000501040105010400050104060503040105010401 -050104050501040005010400050104000501040005010400050104020503040105010404 -050104020500040805010401050104000501040005010402050104000501040905000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -05000400050004070500040a050004050500040a050004530500040a0501040405010442 -050404200500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004080500040a050004050500040a050004520501040a -050104040501046905000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -05000400050004000500040005000400050004070500040a05000405050c04510501040b -050104040501046805000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -0500040005000400050004000500040005000408050c04e5050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -050004000500040005000400050004000500040005000400050004000500040005000400 -0500040005000400050004000500040005000400050004000500040005000400050004ff -04ff04ff041303ff03ff03fb00ff00ff00fa0900000105ff05790901000105ff05790901 -000105ff05790901000105ff05790901000105ff05790901000105040104050401000503 -010205120102050b01000506010005ff051801000502010005090102050c090100010504 -0100050f01000511010005020100050a010005ff0520010005020100050b0100050c0901 -000105040100050601020505010005030102050a01000502010005010100050001010502 -0104050201020503010205020100050001010503010205ff050301000502010005020102 -050501000502010005000101050509010001050401000508010005050100050201000502 -010005090100050201000501010105010100050301000506010005020100050201000501 -010105010100050101000502010005ff0502010005020100050101000502010005040100 -050201010501010005040901000105040103050501000505010005020100050201000509 -010005020100050101000502010005030100050601000502010005020100050101000502 -01000501010005ff05060104050101000502010005040100050201000502010005040901 -000105040100050801000505010005020104050901000502010005010100050201000503 -010005060100050201000502010005010100050201000502010205ff0503010005020100 -050101040504010005020100050201000504090100010504010005080100050501000502 -0100050d0100050201000501010005020100050301000506010005020100050201000501 -0100050201000505010005ff050201000502010005010100050801000502010005020100 -050409010001050401000508010005050100050201000502010005090100050201000501 -010105010100050301000506010005020100050201000501010005020100050101000502 -010005ff0502010005020100050101000502010005040100050201010501010005040901 -000105040100050801000505010005030102050b01020502010005000101050501010504 -01000503010205020100050201000502010205ff05030100050201000502010205050100 -0502010005000101050509010001052f010005ff053e0100050809010001052f010005ff -053e0100050809010001052f010005ff053e010005080901000105ff05790901000105ff -05790901000105ff05790901000109ff097b000009ff097c02ff02ff02ff02ff02ff02ff -02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02730800000008000000080000000800 -000008000000080000000800000008000000080000000800000008000000080000000800 -000008000000080000000800000008000000080000000800000008000000080000000800 -000008000000080000000800000008000000080000000800000008000000080000000800 -000008000000080000000800000008000000020900450209004502090045024700000800 -000008000000080000000800000008000000080000000800000008000000080000000800 -000008000000080000000800000008000000080000000800000008000000080000000800 -000008000000080000000800000008000000080000000800000008000000080000000800 -000008000000080000000800000008000000080000000800000008000209004409000209 -004409000209004409000247080000000842010002090001054109010209000105410901 -020900010541090102470000084201000800020900010541090102090001054109010209 -000105410901024708000000084201000209000105410901020900010541090102090001 -054109010247000008420100080002090001054109010209000105410901020900010541 -090102470800000008120104080b0101081c010002090001051301020514010005140901 -02090001050e0104052d0901020900010512010005020100050401000503010205030102 -051509010247000008150100080c0100081d010008000209000105120100050201000513 -0100051409010209000105100100052f0901020900010512010005010100050c01000505 -010005150901024708000000081401000803010008000101080401000804010208160100 -020900010512010005060102050201000500010105030101050001000514090102090001 -051001000503010005000101050301020503010205030102051209010209000105120100 -050001000504010205050100050501000515090102470000081501000803010108010100 -080101040801010008020100081401000800020900010513010005040100050201000501 -010105010100050101000501010105140901020900010510010005030101050101000501 -010005020100050101000502010005010100050201000511090102090001051201010507 -010005050100050501000515090102470800000008140100080301000802010008030100 -080301000802010008150100020900010514010105020100050201000501010005020100 -050101000502010005140901020900010510010005030100050901000501010005050100 -050201000511090102090001051201000500010005060100050501000505010005150901 -024700000815010008030100080201000803010008030100080201000814010008000209 -000105160100050101040501010005020100050101000502010005140901020900010510 -010005030100050601030501010005050104051109010209000105120100050101000505 -010005050100050501000515090102470800000008140100080301000802010008030100 -080301000802010008150100020900010512010005020100050101000505010005020100 -050101000502010005140901020900010510010005030100050501000502010005010100 -050501000515090102090001051201000501010005050100050501000505010005150901 -024700000815010008030100080201000803010008030100080201000814010008000209 -000105120100050201000501010005020100050101000502010005010100050101010514 -090102090001051001000503010005050100050201000501010005020100050101000502 -010005110901020900010512010005020100050401000505010005050100051509010247 -080000000812010408010100080201000803010008040102081601000209000105130102 -050301020502010005020100050201010500010005140901020900010510010005030100 -050601030502010205030102051209010209000105120100050201000504010005050100 -050501000515090102470000084201000800020900010541090102090001054109010209 -000105410901024708000000084201000209000105410901020900010541090102090001 -054109010247000008420100080002090001054109010209000105410901020900010541 -090102470800000008420100020900010541090102090001054109010209000105410901 -024700000842010008000209000105410901020900010541090102090001054109010247 -080000000842010002090001054109010209000105410901020900010541090102470000 -084201000800020900010541090102090001054109010209000105410901024708000000 -084201000209000105410901020900010541090102090001054109010247000008000100 -080001000800010008000100080001000800010008000100080001000800010008000100 -080001000800010008000100080001000800010008000100080001000800010008000100 -080001000800010008000100080001000800010008000100080001000800010008000100 -080001000800010008000100080001000800010008000100080002090001094302090001 -094302090001094302470800010008000100080001000800010008000100080001000800 -010008000100080001000800010008000100080001000800010008000100080001000800 -010008000100080001000800010008000100080001000800010008000100080001000800 -010008000100080001000800010008000100080001000800010008000100080001000800 -01000800010002090000094402090000094402090000094402ff02ff02ff02ff02ff02ff -02ff02ff02ff02ff02ff02ff02ff02ff02ff022901ff017d05ff05ff05ff05ff05ff05ff -05ff05ff05ff05ff05ff05ff05ff056d02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff -02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff -02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff -02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff -02ff02ff02ff02d5014902ff023301000647010002ff023301000647010002ff02330100 -0647010002ff023301000647010002ff02330100060e0103060701010603010306020103 -060601030610010002ff02330100060d0101060101010604010306020101060101010600 -0101060101010604010106010101060f010002ff02330100060d01010601010106060101 -060201010601010106000101060101010604010106010101060f010002ff02330100060a -010106000101060101010606010106020101060101010600010106010101060401010601 -010106010101060b010002ff023301000608010206010101060101010606010106020101 -0601010106000101060101010604010106010101060201020609010002ff023301000607 -010106030101060101010606010106020101060101010600010106010101060401010601 -0101060401010608010002ff023301000608010206010101060101010606010106020101 -0601010106000101060101010604010106010101060201020609010002ff02330100060a -010106000101060101010601010106020101060201010601010106000101060101010601 -0101060001010601010106010101060b010002ff02330100060e01030602010106020101 -060301030602010306020101060101030610010002ff023301000647010002ff02330100 -0647010002ff023301000647010002ff023301000647010002ff023301000647010002ff -023301000647010002ff023301220701012402ff0256070102ff027b070102ff027b0701 -02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701 -02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701 -02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701 -02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701 -02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701 -02ff027b070102ff0258014902ff023301000647010002ff023301000647010002ff0233 -01000647010002ff023301000647010002ff02330100060e010306070101060301030603 -0101060701030610010002ff02330100060d010106010101060401030602010106010101 -060001030606010106010101060f010002ff02330100060d010106010101060601010602 -010106010101060201010606010106010101060f010002ff02330100060a010106000101 -0601010106060101060201010601010106020101060601010601010106010101060b0100 -02ff02330100060801020601010106010101060601010602010106010101060201010606 -010106010101060201020609010002ff0233010006070101060301010601010106060101 -0602010106010101060201010606010106010101060401010608010002ff023301000608 -010206010101060101010606010106020101060101010602010106060101060101010602 -01020609010002ff02330100060a01010600010106010101060101010602010106020101 -060101010602010106030101060001010601010106010101060b010002ff02330100060e -01030602010106020101060301030603010106030101060101030610010002ff02330100 -0647010002ff023301000647010002ff023301000647010002ff023301000647010002ff -023301000647010002ff023301000647010002ff023301220701012402ff0256070102ff -027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff -027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff -027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff -027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff -027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff -027b070102ff027b070102ff027b070102ff0258014902ff023301000647010002ff0233 -01000647010002ff023301000647010002ff023301000647010002ff0233010006470100 -02ff023301000647010002ff023301000600010006000102060001020601010106020101 -060101030601010106000101060101010600010106090103060101010601010106000101 -060001010604010002ff0233010006000101060101010601010106000101060201010600 -010106010101060001020600010106000102060001010607010106010101060001010601 -010106000102060001010603010002ff0233010006000101060101010601010106010101 -060001010605010106000101060101010600010106010101060701020603010106010101 -06000101060101010603010002ff02330100060001010601010106010101060101010600 -010106020104060001010601010106000101060101010609010206010101060101010600 -0101060101010603010002ff023301000600010106010101060101010602010206020101 -0601010106000101060101010600010106010101060a0102060001010601010106000101 -060101010603010002ff0233010006000101060101010601010106020102060201010601 -010106000102060001010600010206000101060701010601010106000101060001020600 -0102060001010603010002ff023301000600010106010101060101010603010106030102 -060001030600010106010101060001010609010306020101060001010600010106000101 -0604010002ff02330100060e0100060a010106040101061901010607010002ff02330100 -060d0101060a010106040101061901010607010002ff02330100060c0101060b01010604 -010106040106060d01010607010002ff023301000647010002ff023301000647010002ff -023301000647010002ff023301220701012402ff0256070102ff027b070102ff027b0701 -02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701 -02ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b0701 -02ff0254074802ff0233074902ff023307010245070102ff023307010245070102ff0233 -07010245070102ff023307010245070102ff023307010245070102ff0233070102450701 -02ff023307010245070102ff023307010245070102ff023307010245070102ff02330701 -0245070102ff023307010245070102ff023307010245070102ff023307010245070102ff -023307010245070102ff023307010245070102ff023307010245070102ff023307010245 -070102ff021e012d0212013b02ff02000100062b0100021201000639010002ff02000100 -062b0100021201000639010002ff02000100062b0100021201000639010002ff02000100 -062b0100021201000639010002ff02000100062b010002120100063201010604010002ff -02000100062b010002120100063201010604010002ff0200010006000100060001020600 -010206010101060201010601010306010101060101010600010106000101060401000212 -010006010100060001020600010206010101060201010601010306010101060201010601 -01030601010106000101060101030603010002ff02000100060001010601010106010101 -060001010602010106000101060101010600010106010101060001020600010106030100 -021201000601010106010101060101010600010106020101060001010601010106000101 -0602010106000101060101010600010206000101060101010604010002ff020001000600 -010106010101060101010601010106000101060101020603010106010101060001010601 -010106030100021201000601010106010101060101010601010106000101060101010601 -0101060101010600010106010101060101010600010106010101060101010604010002ff -020001000600010106010101060101010601010106000101060301020601010106010101 -060001010601010106030100021201000601010106010101060101010601010106000101 -060101050601010106000101060101050600010106010101060101010604010002ff0200 -010006000101060101010601010106020102060501020600010106010101060001010601 -010106030100021201000601010106010101060101010602010206020101060601020602 -01010604010106010101060101010604010002ff02000100060001010601010106010101 -060201020602010106010101060001010600010206000102060001010603010002120100 -060101010601010106010101060201020602010106010101060201020602010106010101 -060001010601010106010101060001000602010002ff0200010006000101060101010601 -010106030101060301030602010106000101060001010600010106040100021201000601 -010106010101060101010603010106030103060401000604010306010101060101010602 -01010603010002ff02000100060e0100061101010607010002120100060f010006280100 -02ff02000100060d0101061101010607010002120100060e01010628010002ff02000100 -060c0101061201010607010002120100060d01010629010002ff02000100062b01000212 -01000639010002ff02000100062b0100021201000639010002ff02000100062b01000212 -01000639010002ff02000114070101160212013b02ff0215070102ff027b070102ff027b -070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b -070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b070102ff027b -070102ff025c074b02ff0230074c02ff023007010248070102ff023007010248070102ff -023007010248070102ff023007010248070102ff023007010248070102ff023007010248 -070102ff023007010248070102ff023007010248070102ff023007010248070102ff0230 -07010248070102ff023007010248070102ff023007010248070102ff0230070102480701 -02ff023007010248070102ff023007010248070102ff023007010248070102ff02300701 -0248070102ff021001420212012d02f901000640010002120100062b010002f901000640 -010002120100062b010002f901000640010002120100062b010002f90100064001000212 -0100062b010002f901000640010002120100061401020613010002f90100064001000212 -0100061301010615010002f9010006020100060001020600010206010101060201010601 -010306020103060101010600010306020101060101030601010106000101060301000212 -010106000102060001020601010106020101060001030601010306010100060001020600 -01020603010002f901000602010106010101060101010600010106020101060001010601 -010106000101060101010600010606020101060001010601010106000104060301000212 -010206010101060101010600010106020101060101010601010106010101060001010601 -0101060101010602010002f9010006020101060101010601010106010101060001010601 -010206030101060101010600010206020101060001010601010106010101060001020605 -010002120102060101010601010106010101060001010602010106010102060301010601 -0101060101010602010002f9010006020101060101010601010106010101060001010603 -010206010105060001010603010106000101060101050600010106060100021201020601 -010106010101060101010600010106020101060301020601010106010101060101010602 -010002f90100060201010601010106010101060201020605010206000101060401010604 -010206020101060401010606010002120102060101010601010106020102060301010604 -01020600010106010101060101010602010002f901000602010106010101060101010602 -010206020101060101010600010106010101060001010604010206020101060101010600 -010106060100021201020601010106010101060201020603010106010101060101010600 -010106010101060101010602010002f90100060201010601010106010101060301010603 -010306020103060101010605010006040103060101010606010002120102060101010601 -01010603010106030101060201030601010106010101060101010602010002f901000610 -0100062e010002120100060d0100061c010002f90100060f0101062e010002120100060c -0101061c010002f90100060e0101062f010002120100060b0101061d010002f901000640 -010002120100062b010002f901000640010002120100062b010002f90100064001000212 -0100062b010002f901420212012d02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff -02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff -02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff -02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff02ff -02ff0236 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 46 300 384 -%%EOF diff --git a/lib/appmon/doc/src/appmon.xml b/lib/appmon/doc/src/appmon.xml deleted file mode 100644 index 2707ea4d9a..0000000000 --- a/lib/appmon/doc/src/appmon.xml +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE erlref SYSTEM "erlref.dtd"> - -<erlref> - <header> - <copyright> - <year>1996</year> - <year>2013</year> - <holder>Ericsson AB, All Rights Reserved</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - The Initial Developer of the Original Code is Ericsson AB. - </legalnotice> - - <title>appmon</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev></rev> - </header> - <module>appmon</module> - <modulesummary>A graphical node and application process tree viewer.</modulesummary> - <description> - <warning> - <p> - The Appmon application has been superseded by the Observer application. - Appmon will be removed in R16. - </p> - </warning> - <p>The application monitor Appmon is a graphical utility used to - supervise applications executing either locally or on remote nodes. - The process tree of an application can furthermore be monitored.</p> - </description> - <funcs> - <func> - <name>start()</name> - <fsummary>Start Appmon.</fsummary> - <desc> - <p>Starts Appmon.</p> - </desc> - </func> - <func> - <name>stop()</name> - <fsummary>Stop Appmon.</fsummary> - <desc> - <p>Stops Appmon.</p> - </desc> - </func> - </funcs> - - <section> - <title>See Also</title> - <p>Appmon User's Guide</p> - </section> -</erlref> - diff --git a/lib/appmon/doc/src/appmon_chapter.xml b/lib/appmon/doc/src/appmon_chapter.xml deleted file mode 100644 index 1b6054f622..0000000000 --- a/lib/appmon/doc/src/appmon_chapter.xml +++ /dev/null @@ -1,328 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE chapter SYSTEM "chapter.dtd"> - -<chapter> - <header> - <copyright> - <year>2000</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Appmon</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev></rev> - <file>appmon_chapter.xml</file> - </header> - - <section> - <title>Introduction</title> - <warning> - <p> - The Appmon application has been superseded by the Observer application. - Appmon will be removed in R16. - </p> - </warning> - <p>The application monitor Appmon is a graphical node and application viewer. The tool shows an overview of all applications on all known nodes, and it is possible to view the process tree for an application running on any of the nodes.</p> - <note> - <p>If the Appmon code is not available at a node, for example an - embedded node, this node is ignored by Appmon and is not shown - in the Appmon window.</p> - </note> - </section> - - <section> - <title>Getting Started with Appmon</title> - <p>Start Appmon by calling <c><![CDATA[appmon:start()]]></c>. It will start the <seealso marker="#main_win">main window</seealso> showing a load meter and the applications running at the current node. By clicking on one of the applications a window showing the process tree of the application will be opened, the <seealso marker="#app_win">application window</seealso>.</p> - <p>The main window is equipped with a menubar from which it is possible to:</p> - <list type="bulleted"> - <item>exit Appmon</item> - <item>perform some operations on the node</item> - <item>set how information should be displayed</item> - <item>select which node to show</item> - <item>open help (this document).</item> - </list> - <p>The application window shows the process tree for an application with each process displayed as a box. It is possible to view information about the processes, to send messages to them, and to trace and kill them.</p> - </section> - - <section> - <title>The Main Window</title> - <marker id="main_win"></marker> - <p>The main window shows a load meter and all applications running at the displayed node. Select which node to display in the window by choosing the node name from the Nodes menu. It is also possible to run Appmon in a many-window mode where a new instance of the main window is opened for each node to be displayed.</p> - <image file="main_win.gif"> - <icaption>The Main Window.</icaption> - </image> - <p>The load meter shows load measured as processor time, or as the length of the ready queue.</p> - <p>Every application running at the node is shown as a button. Clicking the button will open the application window showing the process tree for the application.</p> - - <section> - <title>The File Menu</title> - <taglist> - <tag><em>Show List Box...</em></tag> - <item>This will open the <seealso marker="#listbox_win">listbox window</seealso> which lists all nodes and applications. This window can be more easy to use than the normal, graphical user interface when the system consists of a large number of nodes and/or applications.</item> - <tag><em>Close</em></tag> - <item>Close the window. If no other instance of the main window exists, Appmon will be stopped.</item> - <tag><em>Exit</em></tag> - <item>Stop Appmon.</item> - </taglist> - </section> - - <section> - <title>The Actions Menu</title> - <taglist> - <tag><em>Reboot</em></tag> - <item>Call <c><![CDATA[init:reboot()]]></c> at the currently displayed node. This will stop the node. If the <c><![CDATA[-heart]]></c> system flag was given, the heart program will try to reboot the system.</item> - <tag><em>Restart</em></tag> - <item>Call <c><![CDATA[init:restart()]]></c> at the currently displayed node. This will restart the node.</item> - <tag><em>Stop</em></tag> - <item>Call <c><![CDATA[init:stop()]]></c> at the currently displayed node. This will stop the node.</item> - <tag><em>Ping</em></tag> - <item>Call <c><![CDATA[net:ping(Node)]]></c> where <c><![CDATA[Node]]></c> is the currently displayed node. This can be useful when the connection to the node has been lost.</item> - </taglist> - </section> - - <section> - <title>The Options Menu</title> - <taglist> - <tag><em>One window/Many windows</em></tag> - <item>Select one of these radio button to run Appmon in one-window or many-window mode. In many-windows mode, a new instance of the main window is opened for each node to be displayed. The default value is one-window mode.</item> - <tag><em>Load: time/queue</em></tag> - <item>Select one of these radio buttons to either calculate load as processor time or as the length of the ready queue, which is the number of processes ready to execute. By default, the load is calculated as processor time.</item> - <tag><em>Load: progressive/linear</em></tag> - <item>Select one of these radio buttons to show load either according to a progressive or a linear scale. By default, the load is shown according to a progressive scale. </item> - </taglist> - </section> - - <section> - <title>The Nodes Menu</title> - <p>The Nodes menu contains all currently and previously known nodes, - where the Appmon code is available. Nodes where the Appmon code is - not available, for example embedded nodes, are ignored by Appmon and - are not shown.</p> - <p>Selecting a node from the Nodes menu will cause that node to be displayed in either the same window, or in a new window, depending on if Appmon is run in one-window or many-windows mode. If the connection to the node has been lost, this will be shown in the window.</p> - </section> - - <section> - <title>The Help Menu</title> - <taglist> - <tag><em>Help</em></tag> - <item>Selecting Help from the Help menu will cause the HTML version of the Appmon User's Guide (this document) to be displayed. Currently this function requires Netscape to be up and running.</item> - </taglist> - </section> - </section> - - <section> - <title>The Application Window</title> - <marker id="app_win"></marker> - <p>The application window shows the process tree for an application. The window title contains the application name and the node name. The window also contains a menubar and a toolbar.</p> - <p>The application window can be opened from the main window by clicking on the button denoting the application, or from the listbox window by selecting the application and clicking on the <em>Load</em> button. - </p> - <image file="app_win.gif"> - <icaption>The Application Window.</icaption> - </image> - <p>The application can be shown either as a strict supervision tree, or as a process view with all linked processes. In supervision mode, the tree-gathering and -building algorithm assumes conformance to the OTP design principles.</p> - - <section> - <title>The File Menu</title> - <taglist> - <tag><em>Close</em></tag> - <item>Close the application window.</item> - </taglist> - </section> - - <section> - <title>The Options Menu</title> - <taglist> - <tag><em>Refresh</em></tag> - <item>Refresh the application window.</item> - <tag><em>Sup. view/ Proc. view</em></tag> - <item>Select one of these radio buttons to show the application as a strict supervision tree, or as a process view with all linked processes. By default, the process view is used.</item> - </taglist> - </section> - - <section> - <title>The Toolbar</title> - <p>The toolbar consists of four buttons: <em>Info</em>, <em>Send</em>, <em>Trace</em> and <em>Kill</em>. First select one of these buttons and then select to which process the action should apply by clicking on a process in the process tree. By default <em>Info</em> is selected which means that clicking on a process, without selecting <em>Send</em>, <em>Trace</em> or <em>Kill</em> first, will open the <seealso marker="#pinfo_win">process information window</seealso>.</p> - <taglist> - <tag><em>Info</em></tag> - <item>Open the <seealso marker="#pinfo_win">process information window</seealso>, which displays the information about the process given by <c><![CDATA[process_info(Pid)]]></c>.</item> - <tag><em>Send</em></tag> - <item>Send a message to a process. A window is opened where the message can be specified. Click <em>Ok</em> to send the message or <em>Cancel</em> to cancel.</item> - <tag><em>Trace</em></tag> - <item>Switch on OTP tracing of a process. <c><![CDATA[sys:trace(Pid,true)]]></c> is called. Selecting <em>Trace</em> a second time for the same process will switch the tracing off instead.</item> - <tag><em>Kill</em></tag> - <item>Kill a process. <c><![CDATA[exit(Pid,kill)]]></c> is called.</item> - </taglist> - </section> - </section> - - <section> - <title>The Listbox Window</title> - <marker id="listbox_win"></marker> - <p>The listbox window lists all nodes and applications. This window can be more easy to use than the normal, graphical user interface when the system consists of a large number of nodes and/or applications.</p> - <image file="listbox_win.gif"> - <icaption>The Listbox Window.</icaption> - </image> - <p>The window contains three buttons:</p> - <taglist> - <tag><em>Load</em></tag> - <item>First selecting an application and then clicking the <em>Load</em> button will open the <seealso marker="#app_win">application window</seealso> for that application.</item> - <tag><em>Clear</em></tag> - <item>De-select any selected node or application name.</item> - <tag><em>Close</em></tag> - <item>Close the listbox window.</item> - </taglist> - </section> - - <section> - <title>The Process Information Window</title> - <marker id="pinfo_win"></marker> - <p>The process information window shows information about different processes as given by <c><![CDATA[process_info(Pid)]]></c>.</p> - <image file="pinfo_win.gif"> - <icaption>The Process Information Window.</icaption> - </image> - - <section> - <title>The File Menu</title> - <taglist> - <tag><em>Close</em></tag> - <item>Close the process information window.</item> - </taglist> - </section> - </section> - - <section> - <title>Using the Web Based version of Appmon</title> - - <section> - <title>Introduction</title> - <p>The web based version of Appmon is an alternative version of - Appmon. The main difference between the web based version of - Appmon and the original version of Appmon is that the web based - version of Appmon can monitor nodes and applications on nodes where - Appmon not is installed.</p> - </section> - - <section> - <title>Start the Web Based version of Appmon</title> - <p>To start the web based user interface configure and start - WebTool, see <em>WebTool User's Guide</em>. The web based - version of Appmon is compatible with the browsers - Netscape Navigator and Internet Explorer 4.0 and higher.</p> - <p>When WebTool is started, start the Web based version of Appmon via - WebTool. If WebTool succeeded to start the web based version of Appmon - a link named WebAppmon will appear in the topmost frame. Click on the link and - the main frame of the browser will show two frames.The left frame will - show a combo box for node selection and a list of all applications on - the currently selected node. </p> - <p>In the left frame it is possible to:</p> - <list type="bulleted"> - <item>Select which node to supervise.</item> - <item>Select an application to view its process tree.</item> - <item>Select an application to view its specification.</item> - </list> - <p>The right frame shows the selected information, either the application - specification or the process tree and process information.</p> - </section> - - <section> - <title>Selecting a Different Node</title> - <p>In the top of the left frame there is a combo box with all known - nodes. The name of the node that is monitored is the node whose name - is visible in the combo box. At startup the node on which the web - based version of Appmon is running on will be monitored.</p> - <p>To change node, select another node in the combo box, and - the list of running applications will change to the applications - that runs on the selected node.</p> - </section> - - <section> - <title>Viewing the Process Tree of an Application</title> - <p>To view the process tree of an application click on the application - name in the list of applications. The process tree of the selected - application will then appear in the right frame.</p> - <p>The processes in the process tree can have three different colors:</p> - <taglist> - <tag><em>Blue</em></tag> - <item>The relation to the process above in the process hierarchy - is a primary relation. That means that the process above is the - only process that link to it or the process above is a supervisor. </item> - <tag><em>Red</em></tag> - <item>The relation to the process above in the process hierarchy is a secondary - relation. This means that more than one process has a relation to it - and the process above in the hierarchy is not a supervisor.</item> - <tag><em>Black</em></tag> - <item>The process isn't a regular process instead it's a Port. The name of - the process will also begin with <em>Port:</em></item> - </taglist> - <p>If the process name begins with <em>Runs on another node:</em> The - monitored application runs on more than one node and this process is - the first process on a branch that runs on another node. </p> - </section> - - <section> - <title>Viewing the Application Specification</title> - <p>After the application name in the list of applications there are a - link named <em>Spec</em>, Click on this link and the application - specification will appear in the right frame. The application - specification is the data in the <em>.app</em> file of the selected - application. </p> - </section> - - <section> - <title>Select Process View</title> - <p>In the top of the page that shows the process tree, there are three - radio buttons for selecting which processes that shall be included - in the process tree. The default mode is that all processes - that one process in the application tree has a relation to is - included. It's possible to filter which of the processes - in the process tree that will be included. To reduce the number - of processes in the process tree select one of the radio buttons - on the top of the page </p> - <taglist> - <tag><em>All processes</em></tag> - <item>All processes that at least one process in the application - tree has a link to.</item> - <tag><em>Supervised processes</em></tag> - <item>All processes that are supervised by one of the supervisors in - the application</item> - <tag><em>Supervisors only</em></tag> - <item>Only the processes that actually are supervisors in the - applications supervision tree is included</item> - </taglist> - </section> - - <section> - <marker id="proc_info"></marker> - <title>Process Information</title> - <p>To see more information about a specific process click on the process - name and more information will be loaded under the application tree.</p> - <p>The Process information page shows information about a process as given - by the <c><![CDATA[process_info(Pid)]]></c>, but formatted in a more human readable form.</p> - </section> - - <section> - <title>Trace a process</title> - <p>If the link after the process name in the process tree is <em>start trace</em> - the process is not traced. If the link is <em>stop trace</em> then the process - id traced.</p> - <p>To toggle the trace flag for a process click on the link <em>start trace</em> or - <em>stop trace</em> after the process name in the process tree.</p> - </section> - </section> -</chapter> - diff --git a/lib/appmon/doc/src/book.xml b/lib/appmon/doc/src/book.xml deleted file mode 100644 index c9979c6050..0000000000 --- a/lib/appmon/doc/src/book.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE book SYSTEM "book.dtd"> - -<book xmlns:xi="http://www.w3.org/2001/XInclude"> - <header titlestyle="normal"> - <copyright> - <year>1997</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>appmon</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev>2.0</rev> - </header> - <insidecover> - </insidecover> - <pagetext>Appmon</pagetext> - <preamble> - </preamble> - <parts lift="no"> - <xi:include href="part.xml"/> - </parts> - <applications> - <xi:include href="ref_man.xml"/> - </applications> - <releasenotes> - <xi:include href="notes.xml"/> - </releasenotes> - <listofterms></listofterms> - <index></index> -</book> - diff --git a/lib/appmon/doc/src/fascicules.xml b/lib/appmon/doc/src/fascicules.xml deleted file mode 100644 index 37feca543f..0000000000 --- a/lib/appmon/doc/src/fascicules.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE fascicules SYSTEM "fascicules.dtd"> - -<fascicules> - <fascicule file="part" href="part_frame.html" entry="no"> - User's Guide - </fascicule> - <fascicule file="ref_man" href="ref_man_frame.html" entry="yes"> - Reference Manual - </fascicule> - <fascicule file="part_notes" href="part_notes_frame.html" entry="no"> - Release Notes - </fascicule> - <fascicule file="" href="../../../../doc/print.html" entry="no"> - Off-Print - </fascicule> -</fascicules> - diff --git a/lib/appmon/doc/src/listbox_win.gif b/lib/appmon/doc/src/listbox_win.gif Binary files differdeleted file mode 100644 index 38258b7552..0000000000 --- a/lib/appmon/doc/src/listbox_win.gif +++ /dev/null diff --git a/lib/appmon/doc/src/listbox_win.ps b/lib/appmon/doc/src/listbox_win.ps deleted file mode 100644 index 0f1e2eeda0..0000000000 --- a/lib/appmon/doc/src/listbox_win.ps +++ /dev/null @@ -1,741 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./listbox_win.tmp.eps) -%%CreationDate: (Tue Jun 12 18:01:07 2001) -%%BoundingBox: 0 85 200 356 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 85 200 356 -userdict begin -%%BeginData: -DisplayImage -0 85 -200.000000 271.000000 -12 -325 441 -1 -0 -0 -8 -ffffff -000000 -708090 -b03060 -d9d9d9 -808080 -c3c3c3 -000000 -03ff03ff03ff036704000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003000400030004000300040003000400031a040c03cc0400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -0400030004000308040c03050400030a0400030a04010343040103240401031904010300 -0401030f040103010401031e040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003070400030204000302 -04000302040003050400030a040003090403034204010324040103190401031204010321 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003080400030204000302040003020400030504000303 -040203030400030904000301040003010401030004010301040103000401030104000300 -040203000402030204030301040103000401030204010304040103000401030204030302 -040103000401030104030302040303060403030104010300040103020401030004010305 -040303010401030004010301040103000401030104010300040103010403030204030301 -04030300040103010403030104010300040103020403030a040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003070400030204000302040003020400030504000302040403020400030804010301 -040103000402030004010300040203000401030004010301040103010401030004010301 -040103000402030004010301040103040402030004010300040103010401030004010300 -040203000401030104010300040103010401030404010301040103000402030004010300 -040103000402030404010301040103000402030004010300040203000401030004010300 -040103000401030104010300040103010401030104010301040103000401030104010300 -040203000401030004010301040103080400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030804040302 -040003020400030504000301040603010400030804010301040103000401030104010300 -040103010401030004010301040103010401030004010301040103000401030104010308 -04010301040103000401030104010300040103010401030004010301040103000402030b -040103000401030104010300040103010401030804010300040103010401030004010301 -040103000401030004010300040103080401030104010301040103000401030104010300 -04010301040103000402030c040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003070400030604000302 -040003050400030104060301040003080405030004010301040103000401030104010300 -040103010401030104010300040103010401030004010301040103080401030104010300 -040103010401030004010301040103000405030204020306040403000401030104010300 -040103010401030504040300040103010401030004010301040103000401030004010300 -040103050404030104010301040103000401030104010300040103010401030204020309 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003080400030604000302040003050400030104060301 -040003070401030304030301040103000401030104010300040103010401030104010300 -040103010401030004010301040103080401030104010300040103010401030004010301 -040103000401030704020304040103010401030004010301040103000401030104010304 -040103010401030004010301040103000401030104010300040103000401030004010304 -040103010401030104010301040103000401030104010300040103010401030304020309 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003070400030604000302040003050400030204040302 -040003070401030304040300040103000402030004010300040103010401030104010300 -040103010401030004010301040103010401030404010301040103000401030104010300 -040103000402030004010301040103000401030104010304040103010401030004010301 -040103000401030004020304040103010401030004020300040103000402030004010300 -040103000401030004010301040103000401030104010301040103000402030004010301 -040103000401030104010300040103010401030804000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000308 -040803020400030504000303040203030400030704010303040303000401030104010300 -040103010401030104010301040103010403030104010301040103010401030404010301 -040103010403030204010300040103010403030204030306040203000403030104010301 -040103000401030504020300040303000401030104010300040103010401030004010301 -04030302040203000401030104010300040103010403030104010301040103010403030a -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003070400030a040003050400030a0400030f04010304 -0401036c040103040401033d040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003080400030a04000305 -0400030a0400030f040103040401036c040103040401033e040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003070400030a04000305040c030f040103040401036c040103040401033d04000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000308040c03e00400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003000400030004000300040003000400030004000300040003ff03ff03a1 -02ff02ff028904ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff046b0512 -04ff043105110000047e05b0040105010606050006060001047e05af0000040105010605 -0000050006060001047e050104ac00010401050106050000050106050001047e050104ac -00010401050106040001050106050001047e0501043301000430010004260100041d0001 -04010501060400010400050106040001047e050104040100040401000403010204020100 -0415010004040100040001000405010004060100040b010004030102040b0100040b0102 -0405010004120100041c000104010501060300010401050106040001047e050104040100 -040b010004020100041501000403010004020100040c010004120100040b0100040d0100 -04190100041c000104010501060300010402050106030001047e05010401010104000100 -040201020405010004020100040001010403010204020100040001010402010404010100 -0400010204020102040301010400010004010100040001010403010204050100040a0100 -04050102040501000403010204020100040201000402010204050100041b000104010501 -060200010403050106030001047e05010400010004010101040401000405010004020101 -040101000401010004020100040101010401010004030100040301000400010004000100 -04040100040201000401010104010101040101000404010004050100040a010004040100 -0402010004040100040501000402010004020100040101000402010004040100041b0001 -04010501060200010404050106020001047e050104000100040201000404010004050100 -040201000402010004010100040201000401010004070100040301000400010004000100 -040401000402010004020100040101000408010004050100040a01000408010004040100 -040501000402010004020100040101000402010004040100041b00010401050106010001 -0405050106020001047e0501040001000402010004040100040501000402010004020100 -040101040401010004070100040301000400010204040100040201000402010004010100 -0408010004050100040a0100040501030404010004050100040301000400010004020104 -04040100041b000104010501060100010406050106010001047e05010400010004020100 -040401000405010004020100040201000401010004050100040701000403010004080100 -0402010004020100040101000408010004050100040a0100040401000402010004040100 -0405010004030100040001000402010004080100041b0001040105010600000104070501 -06010001047e050104000100040101010404010004050100040201010401010004010100 -040201000401010004070100040401000401010004040100040201000401010104010100 -0408010004050100040b0100040301000402010004040100040501000404010004030100 -0402010004030100041c000104010501060000010408050106000001047e050104010101 -040001000404010004050100040201000400010104030102040201000408010104030101 -040501000403010104000100040101000408010004050100040b01000404010304040100 -04050100040401000404010204040100041c0001040105010001050b06000001047e0501 -0465010004260100041d0001040105010000050d0001047e050104ac000104010501060e -0001047e050104ac0001040105010010047e050104ac000104010501000d05000001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104160101040001000402010004020100040201020402 -010004000101040201000400010104750001040105010001040a05010001047e05010416 -010004000100040001000401010004020100040101000402010004010101040101000401 -01010401010004740001040105010001040a05010001047e050104160100040001000400 -010004020100040101000405010004010100040201000401010004020100047400010401 -05010001040a05010001047e050104160100040001000400010004020100040101000402 -01030401010004020100040101000402010004740001040105010001040a05010001047e -050104160100040001000400010004030100040001000401010004020100040101000402 -0100040101000402010004740001040105010001040a05010001047e0501041601000400 -010004000100040301010402010004020100040101010401010004010101040101000474 -0001040105010001040a05010001047e0501041601000400010004000100040401000403 -01030401010004000101040201000400010104750001040105010001040a05010001047e -050104200100040901000405010004780001040105010001040a05010001047e0501041d -010004000100040a01000405010004780001040105010001040a05010001047e0501041e -0100040b01000405010004780001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e05010416010004220102046e00010401 -05010001040a05010001047e05010416010004240100046e0001040105010001040a0501 -0001047e0501041601000401010004030102040201000400010104020100040001010403 -010204050100046e0001040105010001040a05010001047e050104160100040001000403 -01000402010004010101040101000401010104010100040101000402010004040100046e -0001040105010001040a05010001047e0501041601010404010004020100040101000405 -010004020100040101000402010004040100046e0001040105010001040a05010001047e -050104160101040401040401010004050100040201000401010404040100046e00010401 -05010001040a05010001047e050104160100040001000403010004050100040501000402 -01000401010004080100046e0001040105010001040a05010001047e0501041601000401 -01000402010004020100040101000405010004020100040101000402010004040100046e -0001040105010001040a05010001047e0501041601000402010004020102040201000405 -0100040201000402010204050100046e0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e0501042c0102047c0001040105010001040a05010001047e -0501042e0100047c0001040105010001040a05010001047e050104170102040301020403 -010204050100047c0001040105010001040a05010001047e050104160100040201000401 -010004020100040101000402010004040100047c0001040105010001040a05010001047e -050104160100040901000401010004080100047c0001040105010001040a05010001047e -050104170102040301030402010204050100047c0001040105010001040a05010001047e -0501041a010004010100040201000405010004040100047c0001040105010001040a0501 -0001047e050104160100040201000401010004020100040101000402010004040100047c -0001040105010001040a05010001047e050104170102040301030402010204050100047c -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e0501043301000430010004260100041d0001040105010001 -040a05010001047e050104040100040f0100041501000404010004000100040501000406 -0100040b010004030102040b0100040b01020405010004120100041c0001040105010001 -040a05010001047e050104040100040f0100041501000403010004020100040c01000412 -0100040b0100040d010004190100041c0001040105010001040a05010001047e05010401 -010104000100040201020403010104000100040101000400010104030102040201000400 -010104020104040101000400010204020102040301010400010004010100040001010403 -010204050100040a01000405010204050100040301020402010004020100040201020405 -0100041b0001040105010001040a05010001047e05010400010004010101040101000402 -010004010100040101010401010104010100040101000402010004010101040101000403 -010004030100040001000400010004040100040201000401010104010101040101000404 -010004050100040a01000404010004020100040401000405010004020100040201000401 -01000402010004040100041b0001040105010001040a05010001047e0501040001000402 -010004010100040201000401010004020100040101000402010004010100040201000401 -010004070100040301000400010004000100040401000402010004020100040101000408 -010004050100040a01000408010004040100040501000402010004020100040101000402 -010004040100041b0001040105010001040a05010001047e050104000100040201000401 -010004020100040101000402010004010100040201000401010404010100040701000403 -010004000102040401000402010004020100040101000408010004050100040a01000405 -0103040401000405010004030100040001000402010404040100041b0001040105010001 -040a05010001047e05010400010004020100040101000402010004010100040201000401 -010004020100040101000405010004070100040301000408010004020100040201000401 -01000408010004050100040a010004040100040201000404010004050100040301000400 -01000402010004080100041b0001040105010001040a05010001047e0501040001000401 -010104010100040201000401010004010101040101010401010004010100040201000401 -010004070100040401000401010004040100040201000401010104010100040801000405 -0100040b0100040301000402010004040100040501000404010004030100040201000403 -0100041c0001040105010001040a05010001047e05010401010104000100040201020403 -010104000100040101000400010104030102040201000408010104030101040501000403 -010104000100040101000408010004050100040b01000404010304040100040501000404 -01000404010204040100041c0001040105010001040a05010001047e0501041201000451 -010004260100041d0001040105010001040a05010001047e0501040e0100040201000498 -0001040105010001040a05010001047e0501040f010204990001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e05010416 -010004220102046e0001040105010001040a05010001047e05010416010004240100046e -0001040105010001040a05010001047e0501041601000401010004030102040201000400 -010104020100040001010403010204050100046e0001040105010001040a05010001047e -050104160100040001000403010004020100040101010401010004010101040101000401 -01000402010004040100046e0001040105010001040a05010001047e0501041601010404 -010004020100040101000405010004020100040101000402010004040100046e00010401 -05010001040a05010001047e050104160101040401040401010004050100040201000401 -010404040100046e0001040105010001040a05010001047e050104160100040001000403 -01000405010004050100040201000401010004080100046e0001040105010001040a0501 -0001047e0501041601000401010004020100040201000401010004050100040201000401 -01000402010004040100046e0001040105010001040a05010001047e0501041601000402 -0100040201020402010004050100040201000402010204050100046e0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001047e050104ac00010401 -05010001040a05010001047e050104ac0001040105010001040a05010001047e050104ac -0001040105010001040a05010001047e050104ac0001040105010001040a05010001047e -050104ac0001040105010001040a05010001047e050104ac0001040105010001040a0501 -0001047e050104ac0001040105010001040a05010001047e050104ac0001040105010001 -040a05010001047e050104ac0001040105010001040a05010001040900630410050104ac -0001040105010001040a050100010409006205000410050104ac0001040105010001040a -0501000104090001045f05010410050104ac0001040105010001040a0501000104090001 -045f05010410050104ac0001040105010001040a0501000104090001045f050104100501 -04ac0001040105010001040a0501000104090001045f05010410050104ac000104010501 -0001040a0501000104090001045f05010410050104ac0001040105010001040a05010001 -04090001045f05010410050104ac0001040105010001040a0501000104090001045f0501 -0410050104ac0001040105010001040a0501000104090001042101000417010004230501 -0410050104ac0001040105010001040a0501000104090001042101000417010004230501 -0410050104ac0001040105010001040a0501000104090001042101000406010204030102 -0403010104000100042305010410050104ac0001040105010001040a0501000104090001 -042101000405010004020100040101000402010004010100040101010423050104100501 -04ac0001040105010001040a050100010409000104210100040501000402010004050100 -0401010004020100042305010410050104ac0001040105010001040a0501000104090001 -042101000405010004020100040201030401010004020100042305010410050104ac0001 -040105010001040a05010001040900010421010004050100040201000401010004020100 -0401010004020100042305010410050104ac0001040105010001040a0501000104090001 -042101000405010004020100040101000402010004010100040101010423050104100501 -04ac0001040105010001040a050100010409000104210104040201020403010304020101 -04000100042305010410050104ac0001040105010001040a0501000104090001045f0501 -0410050104ac0001040105010001040a0501000104090001045f05010410050104ac0001 -040105010001040a0501000104090001045f05010410050104ac0001040105010001040a -0501000104090001045f05010410050104ac0001040105010001040a0501000104090001 -045f05010410050104ac0001040105010001040a0501000104090001045f050104100501 -04ac0001040105010001040a0501000104090001045f05010410050104ac000104010501 -0001040a0501000104090001045f05010410050104ac0001040105010001040a05010001 -04090001045f05010410050104ac0001040105010001040a0501000104090001045f0501 -0410050104ac0001040105010001040a050100010409000105610410050104ac00010401 -05010001040a050100010409000005620410050104ac0001040105010001040a05010001 -047e050104ac0001040105010001040a05010001047e050104ac0001040105010001040a -05010001047e050104ac0001040105010001040a05010001047e050104ac000104010501 -0001040a05010001047e050104ac0001040105010001040a05010001047e050104ac0001 -040105010001040a05010001047e050104ac0001040105010001040a05010001047e0501 -04ac0001040105010001040a05010001047e050104ac0001040105010001040a05010001 -047e050104ac0001040105010001040a05010001040900630410050104ac000104010501 -0001040a050100010409006205000410050104ac0001040105010001040a050100010409 -0001045f05010410050104ac0001040105010001040a0501000104090001045f05010410 -050104ac0001040105010001040a0501000104090001045f05010410050104ac00010401 -05010001040a0501000104090001045f05010410050104ac0001040105010001040a0501 -000104090001045f05010410050104ac0001040105010001040a0501000104090001045f -05010410050104ac0001040105010001040a0501000104090001045f05010410050104ac -0001040105010001040a0501000104090001041e010204030102043605010410050104ac -0001040105010001040a0501000104090001041d01000402010004040100043605010410 -050104ac0001040105010001040a0501000104090001041d010004020100040401000403 -0102040301020402010004000101042105010410050104ac0001040105010001040a0501 -000104090001041d01000408010004020100040201000401010004020100040101010401 -0100042005010410050104ac0001040105010001040a0501000104090001041d01000408 -010004020100040201000405010004010100042405010410050104ac0001040105010001 -040a0501000104090001041d010004080100040201040402010304010100042405010410 -050104ac0001040105010001040a0501000104090001041d010004020100040401000402 -0100040501000402010004010100042405010410050104ac0001040105010001040a0501 -000104090001041d01000402010004040100040201000402010004010100040201000401 -0100042405010410050104ac0001040105010001040a0501000104090001041e01020405 -0100040301020403010304010100042405010410050104ac0001040105010001040a0501 -000104090001045f05010410050104ac0001040105010001040a0501000104090001045f -05010410050104ac0001040105010001040a0501000104090001045f05010410050104ac -0001040105010001040a0501000104090001045f05010410050104ac0001040105010001 -040a0501000104090001045f05010410050104ac0001040105010001040a050100010409 -0001045f05010410050104ac0001040105010001040a0501000104090001045f05010410 -050104ac0001040105010001040a0501000104090001045f05010410050104ac00010401 -05010001040a0501000104090001045f05010410050104ac0001040105010001040a0501 -000104090001045f05010410050104ac0001040105010001040a05010001040900010561 -0410050104ac0001040105010001040a050100010409000005620410050104ac00010401 -05010001040a05010001047e050104ac0001040105010001050c0001047e050104ac0001 -040105010000050d0001047e050104ac000104010501060e0001047e050104ac00010401 -05010010047e050104ac0001040105010600000c05000001047e050104ac000104010501 -060000010408050106000001047e050104ac000104010501060100010407050106000001 -047e050104ac000104010501060100010406050106010001047e050104ac000104010501 -060200010405050106010001047e050104ac000104010501060200010404050106020001 -040900630410050104ac0001040105010603000104030501060200010409006205000410 -050104ac00010401050106030001040205010603000104090001045f05010410050104ac -00010401050106040001040105010603000104090001045f05010410050104ac00010401 -050106040001040005010604000104090001045f05010410050104ac0001040105010605 -000005020604000104090001045f05010410050104ac0001040105010605000005010605 -000104090001045f05010410050100ae04010501060605010605000104090001045f0501 -0410050000af04010501060605000606000104090001045f050104c30501001004090001 -041e0102040301020436050104c30500001104090001041d010004020100040401000436 -0501040e05b804180001041d010004020100040401000403010204030102040301020421 -0501040e05b7000004180001041d01000408010004020100040201000401010004020100 -040101000402010004200501040e0501060d00000600009406000001060c000104180001 -041d010004080100040201000402010004010100040501000402010004200501040e0501 -060b0001050006000093050006000003060a000104180001041d01000408010004020100 -04020100040201020402010404200501040e050106090002050106000001049005010600 -00050608000104180001041d010004020100040401000402010004020100040501000401 -010004240501040e05010607000304000501060000010490050106000001040100030606 -000104180001041d01000402010004040100040201000402010004010100040201000401 -01000402010004200501040e050106050003040205010600000104900501060000010403 -00030604000104180001041e01020405010004030102040301020403010204210501040e -05010603000304040501060000010490050106000001040500030602000104180001045f -0501040e0501060100030406050106000001049005010600000104070003060000010418 -0001045f0501040e05050408050106000001049005010600000104080503000104180001 -045f0501040e050106010503040605010600000104900501060000010407050306000001 -04180001045f0501040e0501060305030404050106000001049005010600000104050503 -0602000104180001045f0501040e05010605050304020501060000010490050106000001 -040305030604000104180001045f0501040e050106070503040005010600000104900501 -06000001040105030606000104180001045f0501040e0501060905040600000104900501 -0600000105030608000104180001045f0501040e0501060b050206000001059206000001 -0501060a000104180001045f0501040e0501060d0500060000000593060000000500060c -000104180001045f0501040e050100b6041800010561040e050000b704180000056204ff -04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04bb -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 85 200 356 -%%EOF diff --git a/lib/appmon/doc/src/main_win.gif b/lib/appmon/doc/src/main_win.gif Binary files differdeleted file mode 100644 index 36d742e91e..0000000000 --- a/lib/appmon/doc/src/main_win.gif +++ /dev/null diff --git a/lib/appmon/doc/src/main_win.ps b/lib/appmon/doc/src/main_win.ps deleted file mode 100644 index abb12d733b..0000000000 --- a/lib/appmon/doc/src/main_win.ps +++ /dev/null @@ -1,691 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./main_win.tmp.eps) -%%CreationDate: (Tue Jun 12 17:57:00 2001) -%%BoundingBox: 0 26 377 164 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 26 377 164 -userdict begin -%%BeginData: -DisplayImage -0 26 -377.000000 138.000000 -12 -520 191 -1 -0 -0 -16 -ffffff -000000 -708090 -b03060 -d9d9d9 -808080 -00ff00 -666666 -999999 -ececc5 -000000 -000000 -000000 -000000 -000000 -000000 -03ff03ff03ff03ff03ff0305040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400031b040c03e4040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000307040c03050400030a0400030a040103030405030104050301 -040103040401030304030303040103020401030b0403031e0401032c0401030004010300 -040103000401031104010305040403020401030404010305040103000401030904000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003080400030204000302 -04000302040003050400030a040003090403030204010302040103000401030204010300 -04010304040103020401030104010302040203010401030a040103010401034c04010303 -040103000401031104010303040103040400030804010308040103080400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003070400030204000302 -040003020400030504000303040203030400030904000301040003020401030204010300 -040103020401030004020302040203010401030304010301040203010401030104010305 -040103030401030004010302040103010403030104010300040303020401030004010301 -040303010401030104010301040103050403030104010300040103060401030004010300 -040103000401030004010300040103020403030104010300040503020400030604000300 -040103010401030004010300040103000403030004010309040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030804000302040003020400030204000305 -040003020404030204000308040103010401030104010302040103000401030204010300 -040203020402030104010303040103010401030004000300040103010401030504010303 -040103000401030204010300040103010401030004060302040103000401030004010301 -040103000401030104010301040103040401030104010300040203000401030404010300 -040203000401030004010300040203000401030004010301040103000404030004010302 -040003020401030004000300040003000401030004010300040203000406030004010308 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000307 -040403020400030204000305040003010406030104000308040103010401030104050301 -040503010403030004030301040103030401030104010300040003000401030904010303 -040103010401030004010301040103010401030004020302040103000401030104010300 -040103010401030104010300040103000401030504010301040103000401030104010304 -040103010401030004010300040103000401030104010300040103010401030004020302 -040103020400030104000301040003010400030004010300040103010401030004020301 -040103000401030904000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003080400030604000302040003050400030104060301040003080405030104010305 -040103050401030004000300040003000401030104010303040103010401030104020309 -040103030401030104010300040103010405030004010303040103000401030104010300 -040503010401030004010300040103050401030104010300040103010401030404010301 -040103000401030004010300040103010401030004050300040103030401030204000300 -040003020400030104000300040103000401030104010300040103020401030004010308 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000307 -040003060400030204000305040003010406030104000307040103030401030004010305 -040103050401030004020300040103010401030304010301040103010402030904010303 -040103020402030204010304040103040402030204010300040103050401030004010300 -040103050401030104010300040103010401030404010301040103000401030004010300 -040103010401030004010304040103030401030204000300040003010401030004000301 -040103000401030104010300040103020401030004010309040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030804000306040003020400030504000302 -040403020400030704010303040103000401030504010305040103010400030104010302 -040103010401030204010302040103010401030604010301040103030402030204010301 -040103000401030404020302040103000401030104010302040103010401030604010301 -040103000401030104010304040103000402030004010300040103000402030004010300 -040103010401030004010303040103000400030004000301040103000401030204010300 -040103000402030004010302040103000401030804000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030704080302040003050400030304020303 -040003070401030304010300040103050401030504010301040003010401030304030303 -040103020401030104010307040303050400030404030301040103050400030304010301 -040303030401030104010307040303010401030104010305040103000401030004010300 -040103000401030004010302040303010401030404010302040003080401030104010300 -040103000401030204010300040103090400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -0400030004000300040003080400030a040003050400030a040003be0404032004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003000400030004000300040003000400030004000300040003070400030a -040003050400030a040003e5040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003080400030a04000305040c03e404000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -0400030004000300040003000400030004000307040c03f8040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003000400030004000300040003ff03ff03ff03ff032802ff02ff02ff02ff -020f00ff00ff00ff00ff000e0500000104ff04ff04030501000104ff04ff040305010001 -04ff04ff04030501000104ff04ff04030501000104ff04ff040305010001040401040404 -01000403010204130100040c01000406010004200102040b010004060100041f01000402 -0100040c010004ff043601000402010004090102040c0501000104040100040f01000413 -0100040c01000427010004020100040a01000427010104010100040c010004ff04360100 -04020100040b0100040c0501000104040100040601020405010004030102040b01000400 -010004030102040201040402010204030102040201000400010104030102040a01000402 -01000401010004000101040201040402010204030102040201000400010104030102040a -010104010100040201020403010104000100040201020403010204ff0429010004020100 -040201020405010004020100040001010405050100010404010004080100040501000402 -010004020100040a01000400010004020100040201000403010004060100040201000402 -010004010101040101000401010004020100040901000402010004010101040101000403 -010004060100040201000402010004010101040101000401010004020100040901000400 -010004000100040101000402010004010100040101010401010004020100040101000402 -010004ff0428010004020100040101000402010004040100040201010401010004040501 -00010404010304050100040501000402010004020100040a010004000100040201000407 -0100040601000402010004020100040101000402010004010100040d0100040201000401 -01000402010004030100040601000402010004020100040101000402010004010100040d -010004000100040001000401010004020100040101000402010004010100040201000401 -010004ff042c010404010100040201000404010004020100040201000404050100010404 -010004080100040501000402010404090100040201000401010004070100040601000402 -010004020100040101000402010004020102040a01000402010004010100040201000403 -0100040601000402010004020100040101000402010004020102040a0100040101010401 -0100040201000401010004020100040101040402010204ff042901000402010004010104 -04040100040201000402010004040501000104040100040801000405010004020100040d -010404010100040701000406010004020100040201000401010004020100040501000409 -010004020100040101000402010004030100040601000402010004020100040101000402 -010004050100040901000401010104010100040201000401010004020100040101000409 -010004ff0428010004020100040101000408010004020100040201000404050100010404 -010004080100040501000402010004020100040901000402010004010100040201000403 -010004060100040201000402010004010100040201000401010004020100040901000402 -010004010101040101000403010004060100040201000402010004010100040201000401 -010004020100040901000402010004010100040201000401010004010101040101000402 -0100040101000402010004ff042801000402010004010100040201000404010004020101 -0401010004040501000104040100040801000405010004030102040a0100040201000402 -0102040501010404010004030102040201000402010004020102040b0102040201000400 -0101040501010404010004030102040201000402010004020102040a0100040201000402 -01020403010104000100040201020403010204ff04290100040201000402010204050100 -04020100040001010405050100010468010004ff048f01000408050100010468010004ff -048f01000408050100010468010004ff048f010004080501000104ff04ff040305010001 -04ff04ff04030501000104ff04ff04030501000105ff05ff0505000005ff05ff050604ff -04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff -04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff -04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04cf01ff01ff -010704ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff -04ff044c01150400010104010100041a017204ff045d0100081201010400010104000101 -041a017204ff045d01000812010404010100041a017204ff045d01000812010104000101 -04010100041a017204ff045d0100081201010400010104010100041a017204ff045d0114 -04050100041a011909010100090101000901010009010111090101050904010209010104 -09010105090101000901011704ff045d0100081201000421011909010103090101000901 -0111090101030901010409000108090101080901011704ff045d01000812010004210116 -090101000901010009010100090101000901010009010102090301010901010009050102 -090001060900010009010101090101000901010009010100090301000901011704ff045d -010008120100042101150901010009020100090101000901010009020100090101000901 -010109010100090401000901010209000102090101000900010009000100090101000901 -010009020100090601000901011704ff045d010008120100042101150901010109010100 -090101000901010009010101090101000901010109010100090201020901010209000101 -090001010900010109000100090101000901010109010100090201010901010009010117 -04ff045d0114042101150901010109010100090101000901010009010101090101000905 -010009010103090101020900010009000102090001010900010009010100090101010901 -010009010102090101000901011704ff045d010008120100042101150901010109010100 -090101000901010009010101090101000901010409010103090101020900010009000101 -090101000900010109010100090101010901010009010102090101000901011704ff045d -010008120100042101150901010009020100090101000901010009020100090101000901 -010109010100090101030901010009000100090001010901010009010102090101000901 -01000902010009010102090101000901011704ff045d0100081201000421011609010100 -090101000901010009010100090101000901010209030101090101040901010209000108 -09010101090101000901010009010102090101000901011704ff045d0100081201000421 -013d0904012f04ff045d01140421017204ff045d0100081201000421017204ff045d0100 -081201000421017204ff045d0100081201000421017204ff045d01000812010004210172 -04ff045d01140421017204ff045d01000812010004ff04f201000812010004ff04f20100 -0812010004ff04f201000812010004ff04f2011404ff04f201000812010004ff04f20100 -0812010004ff04f201000812010004ff04f201000812010004ff04f201140444010004ff -04ac0100081201000444010004ff04ac0100081201000444010004ff04ac010008120100 -0444010004ff04ac0100081201000444010004ff04ac01140444010004ff04ac01000812 -01000444010004ff04ac0100081201000444010004ff04ac0100081201000444010004ff -04ac0100081201000444010004ff04ac01140444010004ff04ac01000812010004440100 -04ff04ac0100081201000444010004ff04ac0100081201000444010004ff04ac01000812 -01000444010004ff04ac01140444010004ff04ac0100081201000444010004ff04ac0100 -081201000444010004ff04ac0100081201000444010004ff04ac01000812010004440100 -04ff04ac0114044401a004ff040c01000812010004440100044e0100044e010004ff040c -01000812010004440100044e0100044e010004ff040c01000812010004440100044e0100 -044e010004ff040c01000812010004440100044e0100044e010004ff040c011404440100 -044e0100044e010004ff040c01000812010004440100044e0100044e010004ff040c0100 -0812010004440100044e0100044e010004ff040c01000812010004440100044e0100044e -010004ff040c01000812010004440100044e0100044e010004ff040c011404440100044e -0100044e010004ff040c01000812010004440100044e0100044e010004ff040c01000812 -010004440100044e0100044e010004ff040c01000812010004440100044e0100044e0100 -04ff040c01000812010004440100044e0100044e010004ff040c011404440100044e0100 -044e010004ff040c01000812010004440100044e0100044e010004ff040c010008120100 -04440100044e0100044e010004ff040c01000812010004440100044e0100044e010004ff -040c01000812010004210045040900450409004504ea0114042000450701040700450701 -04070045070104e901000812010004200001044307010407000104430701040700010443 -070104e901000812010004200001044307010407000104430701040700010443070104e9 -01000812010004200001044307010407000104430701040700010443070104e901000812 -010004200001044307010407000104430701040700010443070104e9011404200001040f -0101041e01010410070104070001042a010104160701040700010443070104e901000612 -0101041f0001040f0101041e01010410070104070001042a010104160701040700010443 -070104e90100061201010403010204180001040f01010401010104010103040101010400 -010304000101040201030401010104100701040700010416010304020103040201030401 -01010416070104070001040d010004000102040001020401010104020101040101030401 -0101040001010401010104000101040f070104e901000612010104020101040001010417 -0001040f0101040001010401010104010101040001070400010104000101040101010400 -010104100701040700010415010104010101040001010401010104000101040101010400 -01010416070104070001040d010104010101040101010400010104020101040001010401 -010104000102040001010400010204000101040e070104e9010006120101040201010400 -010104170001040f01030402010104010101040001020401010104010101040001010401 -010104000101041007010407000104150102040701010400010204030101041607010407 -0001040d0101040101010401010104010101040001010405010104000101040101010400 -010104010101040e070104e901170401010204180001040f010304020105040001010402 -010104010101040001050400010104100701040700010417010204020104040201020401 -01010416070104070001040d010104010101040101010401010104000101040201040400 -0101040101010400010104010101040e070104e901010403010204010101040201030400 -01020402010004190001040f010104000101040101010404010104020101040101010400 -010104040101041007010407000104180102040001010401010104030102040001010416 -070104070001040d01010401010104010101040201020402010104010101040001010401 -01010400010104010101040e070104e90101040201010400010104000102040001010400 -010104210001040f01010401010104000101040101010400010104020101040101010400 -010104010101040001010410070104070001041501010401010104000101040101010400 -010104010101040001010416070104070001040d01010401010104010101040201020402 -01010401010104000102040001010400010204000101040e070104e90101040201010400 -010104000102040001010400010104210001040f01010402010104000103040101010402 -010104010101040101030401010104100701040700010416010304020102040001010400 -0103040101010416070104070001040d0101040101010401010104030101040301020400 -0103040001010401010104000101040f070104e901030401010204010102040101030421 -000104430701040700010443070104070001041b0100040a0101040401010412070104ea -01020402010004030100040301000423000104430701040700010443070104070001041a -0101040a0101040401010412070104ff041f000104430701040700010443070104070001 -04190101040b0101040401010412070104ff041f00010443070104070001044307010407 -00010443070104ff041f0001044307010407000104430701040700010443070104ff041f -0000074604070000074604070000074604ff04200746040807460408074604ff04ff04ff -04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff042c01ff -01ff010704ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff -04ff04ff0447 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 26 377 164 -%%EOF diff --git a/lib/appmon/doc/src/note.gif b/lib/appmon/doc/src/note.gif Binary files differdeleted file mode 100644 index 6fffe30419..0000000000 --- a/lib/appmon/doc/src/note.gif +++ /dev/null diff --git a/lib/appmon/doc/src/notes.xml b/lib/appmon/doc/src/notes.xml deleted file mode 100644 index ac17c555f7..0000000000 --- a/lib/appmon/doc/src/notes.xml +++ /dev/null @@ -1,300 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE chapter SYSTEM "chapter.dtd"> - -<chapter> - <header> - <copyright> - <year>2004</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Appmon Release Notes</title> - <prepared></prepared> - <docno>nil</docno> - <date>nil</date> - <rev>nil</rev> - <file>notes.xml</file> - </header> - <p>This document describes the changes made to the Appmon application.</p> - -<section><title>Appmon 2.1.14.2</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Misc build updates</p> - <p> - Own Id: OTP-10784</p> - </item> - <item> - <p> - The backend module appmon_info.erl is moved from appmon - application to runtime_tools. This allows appmon to be - run from a remote erlang node towards a target node which - does not have appmon (and its dependencies) installed, as - long as runtime_tools is installed there.</p> - <p> - Own Id: OTP-10786</p> - </item> - </list> - </section> - -</section> - -<section><title>Appmon 2.1.14.1</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p>The GS applications is now deprecated and will be - removed in the R16 release. The following GS-based - applications have been superseded by the Observer - application and will removed in R16: Appmon, Pman, - Tv.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-9907</p> - </item> - </list> - </section> - -</section> - -<section><title>Appmon 2.1.14</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Eliminate use of deprecated regexp module</p> - <p> - Own Id: OTP-9810</p> - </item> - <item> - <p> - Miscellaneous documentation build updates</p> - <p> - Own Id: OTP-9813</p> - </item> - </list> - </section> - -</section> - -<section><title>Appmon 2.1.13</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - An obsolete compiler directive for native code generation - was removed from a source file.</p> - <p> - Own Id: OTP-8839</p> - </item> - </list> - </section> - -</section> - -<section><title>Appmon 2.1.12</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Warnings due to new autoimported BIFs removed</p> - <p> - Own Id: OTP-8674 Aux Id: OTP-8579 </p> - </item> - </list> - </section> - -</section> - -<section><title>Appmon 2.1.11</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p>The documentation is now possible to build in an open - source environment after a number of bugs are fixed and - some features are added in the documentation build - process. </p> - <p>- The arity calculation is updated.</p> - <p>- The module prefix used in the function names for - bif's are removed in the generated links so the links - will look like - "http://www.erlang.org/doc/man/erlang.html#append_element-2" - instead of - "http://www.erlang.org/doc/man/erlang.html#erlang:append_element-2".</p> - <p>- Enhanced the menu positioning in the html - documentation when a new page is loaded.</p> - <p>- A number of corrections in the generation of man - pages (thanks to Sergei Golovan)</p> - <p>- The legal notice is taken from the xml book file so - OTP's build process can be used for non OTP - applications.</p> - <p> - Own Id: OTP-8343</p> - </item> - </list> - </section> - -</section> - -<section><title>Appmon 2.1.10.2</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - The documentation is now built with open source tools - (xsltproc and fop) that exists on most platforms. One - visible change is that the frames are removed.</p> - <p> - Own Id: OTP-8201</p> - </item> - </list> - </section> - -</section> - - <section> - <title>Appmon 2.1.10.1</title> - - <section> - <title>Improvements and New Features</title> - <list type="bulleted"> - <item> - <p> - Updated the application with new tags for automatic updates - of copyright notices. - </p> - <p>Own Id: OTP-7851</p> - </item> - </list> - </section> - </section> - - <section> - <title>Appmon 2.1.9</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>Fixed dialyzer warning in <c><![CDATA[appmon_info]]></c>.</p> - </item> - </list> - </section> - </section> - - <section> - <title>Appmon 2.1.8</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>Removed some dead code from the <c><![CDATA[appmon_info]]></c> and - <c><![CDATA[process_info]]></c> modules. Also rewritten large parts - of <c><![CDATA[process_info]]></c> to make it easier to read and more - efficient.</p> - <p>Own Id: OTP-6534</p> - </item> - </list> - </section> - </section> - - <section> - <title>Appmon 2.1.7</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>Appmon now handles a process name containing the - character '@' correctly. (Thanks to Mikael Magnusson).</p> - <p>Own Id: OTP-6308</p> - </item> - <item> - <p>The "Send" button in the application window was broken, - it always failed (silently).</p> - <p>Own Id: OTP-6333</p> - </item> - </list> - </section> - </section> - - <section> - <title>Appmon 2.1.6</title> - - <section> - <title>Improvements and New Features</title> - <list type="bulleted"> - <item> - <p>Internal change only (using a private digraph instead of - a public one).</p> - <p>Own Id: OTP-5983</p> - </item> - <item> - <p>Notification windows are now centered over the parent - window (if possible).</p> - <p>Own Id: OTP-6010 Aux Id: OTP-5987</p> - </item> - <item> - <p>Removed some dead code from <c><![CDATA[appmon_info]]></c>, - discovered by Dialyzer.</p> - <p>Own Id: OTP-6040</p> - </item> - </list> - </section> - </section> - - <section> - <title>Appmon 2.1.5</title> - - <section> - <title>Improvements and New Features</title> - <list type="bulleted"> - <item> - <p>Eliminated 5 discrepancies found by Dialyzer in the - Appmon application.</p> - <p>Own Id: OTP-5633</p> - </item> - </list> - </section> - </section> - - <section> - <title>Appmon 2.1.4</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>The graphic applications now search for HTML - documentation in the correct place.</p> - <p>Own Id: OTP-5381</p> - </item> - </list> - </section> - </section> -</chapter> - diff --git a/lib/appmon/doc/src/part.xml b/lib/appmon/doc/src/part.xml deleted file mode 100644 index c9766d39ca..0000000000 --- a/lib/appmon/doc/src/part.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE part SYSTEM "part.dtd"> - -<part xmlns:xi="http://www.w3.org/2001/XInclude"> - <header> - <copyright> - <year>2000</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Appmon User's Guide</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev></rev> - </header> - <description> - <p>The Application Monitor, <em>Appmon</em>, is a graphical utility used - to supervise applications executing either locally or on remote nodes. - The process tree of an application can furthermore be monitored.</p> - </description> - <xi:include href="appmon_chapter.xml"/> -</part> - diff --git a/lib/appmon/doc/src/part_notes.xml b/lib/appmon/doc/src/part_notes.xml deleted file mode 100644 index 8b1b8fe39e..0000000000 --- a/lib/appmon/doc/src/part_notes.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE part SYSTEM "part.dtd"> - -<part xmlns:xi="http://www.w3.org/2001/XInclude"> - <header> - <copyright> - <year>2004</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Appmon Release Notes</title> - <prepared>Ingela Anderton Andin</prepared> - <docno></docno> - <date>2004-09-07</date> - <rev></rev> - <file>part_notes.sgml</file> - </header> - <description> - <p>The Application Monitor, <em>Appmon</em>, is a graphical utility - used to supervise applications executing either locally or on - remote nodes. The process tree of an application can furthermore - be monitored.</p> - </description> - <include file="notes"></include> -</part> - diff --git a/lib/appmon/doc/src/pinfo_win.gif b/lib/appmon/doc/src/pinfo_win.gif Binary files differdeleted file mode 100644 index fda0900436..0000000000 --- a/lib/appmon/doc/src/pinfo_win.gif +++ /dev/null diff --git a/lib/appmon/doc/src/pinfo_win.ps b/lib/appmon/doc/src/pinfo_win.ps deleted file mode 100644 index d47d7d47a9..0000000000 --- a/lib/appmon/doc/src/pinfo_win.ps +++ /dev/null @@ -1,1353 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./pinfo_win.tmp.eps) -%%CreationDate: (Tue Jun 12 18:01:56 2001) -%%BoundingBox: 0 73 377 347 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 73 377 347 -userdict begin -%%BeginData: -DisplayImage -0 73 -377.000000 274.000000 -12 -580 421 -1 -0 -0 -8 -ffffff -000000 -708090 -b03060 -d9d9d9 -c3c3c3 -828282 -000000 -03ff03ff03ff03ff03ff035e040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003000400031a040c03c50400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003000400030004000308040c03050400030a0400030a0401030304050301 -0405030104010304040103030403030304010302040103090405032d040103090402031e -040103010401031704000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -0400030004000307040003020400030204000302040003050400030a0400030904030302 -040103020401030004010302040103000401030404010302040103010401030204020301 -04010309040103020401032c04010308040103200401031a040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000308040003020400030204000302 -040003050400030304020303040003090400030104000302040103020401030004010302 -040103000402030204020301040103030401030104020301040103010401030504010302 -040303000401030004030302040303020403030204030302040303060401030004010300 -040103010403030104030301040103000402030004020300040203020403030104030300 -0401030104030301040103000401030a0400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003070400030204000302040003020400030504000302 -040403020400030804010301040103010401030204010300040103020401030004020302 -040203010401030304010301040103000400030004010301040103050401030204080301 -040103000401030104010300040103010401030004010301040103000401030104010305 -040103000402030004010301040103010401030104010300040603010401030104010300 -040103010401030104010301040103000401030104010300040203000401030804000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030804040302 -040003020400030504000301040603010400030804010301040103010405030104050301 -040303000403030104010303040103010401030004000300040103090405030004020301 -040103010401030004010304040103010401030004020303040203080401030004010301 -040103010401030104010301040103000402030104010301040103010401030404010301 -040103010401030004010301040103000401030104010309040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000307040003060400030204000305 -040003010406030104000308040503010401030504010305040103000400030004000300 -040103010401030304010301040103010402030904010304040103020401030104010300 -040103040405030204020303040203060401030004010301040103010401030104010301 -040103000401030204010301040103010401030104040301040103010401030004010301 -040103000401030104010308040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000308040003060400030204000305040003010406030104000307 -040103030401030004010305040103050401030004020300040103010401030304010301 -040103010402030904010304040103020401030104010300040103040401030704020303 -040203050401030004010301040103010401030104010301040103000401030204010301 -040103010401030004010301040103010401030104010300040103010401030004010301 -040103090400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003070400030604000302040003050400030204040302040003070401030304010300 -040103050401030504010301040003010401030204010301040103020401030204010301 -040103050401030404010302040103010401030004010301040103000401030104010300 -040103010401030004010301040103050401030004010301040103010401030104010301 -040103000401030204010301040103010401030004010301040103010401030004020300 -040103010401030004010301040103080400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003080408030204000305040003030402030304000307 -040103030401030004010305040103050401030104000301040103030403030304010302 -040103010401030504010304040103030403030204030302040303020403030204030306 -040103000401030104010301040103020403030104010302040103010401030104010301 -040203000401030104010300040103010403030104010301040103090400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003070400030a04000305 -0400030a040003c504000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003080400030a040003050400030a040003c6040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -0400030004000300040003000400030004000300040003070400030a04000305040c03c5 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000308 -040c03d90400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003ff03ff03ff03ff039f02ff02ff02ff02ff028700ff00ff00ff00ff008606000001 -04ff04ff043f0601000104ff04ff043f0601000104ff04ff043f0601000104ff04ff043f -0601000104ff04ff043f0601000104040104040401000403010204ff04ff042806010001 -04040100040f010004ff04ff0428060100010404010004060102040501000403010204ff -04ff042106010001040401000408010004050100040201000402010004ff04ff04200601 -0001040401030405010004050100040201000402010004ff04ff04200601000104040100 -04080100040501000402010404ff04ff0420060100010404010004080100040501000402 -010004ff04ff042406010001040401000408010004050100040201000402010004ff04ff -0420060100010404010004080100040501000403010204ff04ff04210601000104ff04ff -043f0601000104ff04ff043f0601000104ff04ff043f0601000104ff04ff043f06010001 -04ff04ff043f0601000104ff04ff043f0601000106ff06ff0641000006ff06ff064204ff -04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff0484061204ff04ff04300611 -0000040106ff06ff062c040106010506060005060001040106ff06ff062b000004010601 -0505000006000506000104010601040a0101045f0101047801010404010104ff04370001 -0401060105050000060105050001040106010409010004600100047c01000405010004ff -043600010401060105040001060105050001040106010409010004060100040c01000404 -010004060100040a01020418010204030102040b0100042701020405010004020100040f -0100040c01000404010004180104040301000405010004ff043600010401060105040001 -04000601050400010401060104090100041a010004140100041a010004050100040b0100 -04290100040901000423010004180100040701000405010004ff04360001040106010503 -000104010601050400010401060104090100040401020402010004000101040301020402 -0104040201020403010204050100040a0102040301020405010004050100040b01000403 -01000400010104020100040001010403010204030102040c010004030102040201000400 -0101040a0102040201000400010104030102040201040408010004000101040901000407 -01000405010004ff04360001040106010503000104020601050300010401060104090100 -040601000402010104010100040401000404010004060100040201000402010004040100 -040901000402010004010100040201000404010004050100040b01000403010104010100 -040101010401010004010100040201000401010004020100040b01000405010004020101 -04010100040b010004020101040101000404010004040100040a01010401010004080103 -040401000405010004ff0436000104010601050200010403060105030001040106010407 -010104070100040201000402010004040100040401000406010004060100040401000409 -010004090100040401000405010004090101040401000402010004010100040501000402 -010004010100040f0100040501000402010004020100040b010004020100040201000404 -010004040100040a010004020100040c0100040401010404010104ff0434000104010601 -050200010404060105020001040106010409010004060100040201000402010004040100 -0404010004060100040301030404010004090100040601030404010004050100040b0100 -040301000402010004010100040501000402010004010100040f01000405010004020100 -04020100040b010004020100040201000404010004040100040a010004020100040c0100 -040301000405010004ff0436000104010601050100010405060105020001040106010409 -010004060100040201000402010004040100040401000406010004020100040201000404 -01000409010004050100040201000404010004050100040b010004030100040201000401 -0100040501000402010004010100040f0100040501000402010004020100040b01000402 -0100040201000404010004040100040a0100040201000408010004020100040301000405 -010004ff0436000104010601050100010406060105010001040106010409010004060100 -040201000402010004040100040401000406010004020100040201000404010004090100 -040201000401010004020100040401000405010004040101040401000403010104010100 -0401010004050100040201000401010004020100040b0100040501000402010104010100 -040301010405010004020100040201000404010004040100040a01010401010004030101 -040201000402010004030100040501000405010104ff042e000104010601050000010407 -060105010001040106010409010004060100040201000402010004040100040501010404 -01000403010304040100040a010204030103040401000405010004040101040401000403 -010004000101040201000406010204030102040c01000405010004020100040001010404 -010104050100040201000402010004040100040501010408010004000101040401010403 -010204040100040501000405010104ff042e000104010601050000010408060105000001 -0401060104090100043301050420010004040100040301000419010504190100041d0105 -0401010004080100040b0100040501000406010004ff042e0001040106010001060b0500 -000104010601040a0101045601010406010104010100043701010426010004060101040a -0101040401010405010104ff042f0001040106010000060d000104010601047001000460 -010004ff0454000104010601050e000104010601040a01010463010104ff04b500010401 -0601050e000104010601040901000467010004ff04b4000104010601050e000104010601 -04090100040c0100040c01000429010004040100040601000412010004ff04b400010401 -0601050e00010401060104090100040c0100040c0100042f0100041a010004ff04b40001 -04010601050e000104010601040901000404010204020104040201020402010404010100 -040201000402010204090100040201000402010204030102040201040402010204020100 -0400010104030101040001000403010004ff04b4000104010601050e0001040106010409 -010004030100040201000403010004030100040201000403010004030100040201000401 -010004020100040801000402010004010100040201000404010004040100040601000402 -01010401010004010100040101010403010004ff04b4000104010601050e000104010601 -0407010104040100040701000407010004030100040301000402010004010100040c0100 -040001000400010004050100040401000404010004060100040201000402010004010100 -040201000404010104ff04b2000104010601050e00010401060104090100040401020404 -010004040103040301000403010004020100040201020409010004000100040001000402 -0103040401000404010004060100040201000402010004010100040201000403010004ff -04b4000104010601050e0001040106010409010004070100040301000403010004020100 -040301000403010004020100040501000408010004000100040001000401010004020100 -040401000404010004060100040201000402010004010100040201000403010004ff04b4 -000104010601050e00010401060104090100040301000402010004030100040301000402 -010004030100040301000401010104010100040201000403010104020100040001000400 -010004010100040201000404010004040100040601000402010004020100040101000401 -0101040301000405010104ff04ac000104010601050e0001040106010409010004040102 -040501010402010304040101040201010400010004020102040401010403010004000100 -040301030404010004050101040401000402010004020100040201010400010004030100 -0405010104ff04ac000104010601050e0001040106010409010004300100043001000403 -01000406010004ff04ac000104010601050e000104010601040a0101042c0101042d0100 -04020100040101010405010104ff04ad000104010601050e000104010601046a010204ff -04ba000104010601050e000104010601040a01010486010104ff0492000104010601050e -00010401060104090100048a010004ff0491000104010601050e00010401060104090100 -04660102041901010404010004ff0491000104010601050e000104010601040901000468 -010004180100040101000403010004ff0491000104010601050e00010401060104090100 -040301010400010004030102040301020403010204030102040301010400010004020102 -040a010104000100040101000402010004020102040201000402010004020102040c0100 -040301020402010004000101040a0100040101000403010004ff0491000104010601050e -000104010601040901000403010004000100040001000401010004020100040101000402 -010004010100040201000401010004020100040101000401010104010100040201000408 -010004010101040101000402010004010100040201000401010004020100040101000402 -0100040b01000402010004020100040101010401010004090100040101000403010004ff -0491000104010601050e0001040106010407010104040100040001000400010004010100 -040201000401010004050100040901000401010004020100040101000402010004080100 -040201000401010004020100040101000402010004010100040201000401010004020100 -040b01000402010004020100040101000402010004090100040101000404010104ff048f -000104010601050e00010401060104090100040301000400010004000100040101040402 -010204030102040301030401010004020100040101040408010004020100040101000402 -010004010104040101000402010004010104040b01000402010404010100040201000409 -0100040101000403010004ff0491000104010601050e0001040106010409010004030100 -040001000400010004010100040901000405010004010100040201000401010004020100 -04010100040c010004020100040101000402010004010100040501000402010004010100 -040f010004020100040501000402010004090100040101000403010004ff049100010401 -0601050e0001040106010409010004030100040001000400010004010100040201000401 -010004020100040101000402010004010100040201000401010004010101040101000402 -010004080100040101010401010004010101040101000402010004010100040101010401 -010004020100040b01000402010004020100040101000402010004030101040301000401 -0100040301000405010104ff0489000104010601050e0001040106010409010004030100 -040001000400010004020102040301020403010204030103040201010400010004020102 -040a010104000100040201010400010004020102040301010400010004020102040c0100 -0403010204020100040201000403010104040101040401000405010104ff048900010401 -0601050e00010401060104090100042a01000407010504050100041c010504190100040b -01000406010004ff0489000104010601050e000104010601040a01010424010004020100 -04130100043a0101040a01010405010104ff048a000104010601050e0001040106010432 -01020414010004ff04dc000104010601050e000104010601040a0101044e010104ff04ca -000104010601050e0001040106010409010004430103040101030404010004ff04c90001 -04010601050e0001040106010409010004430100040701000404010004ff04c900010401 -0601050e0001040106010409010004430100040701000404010004ff04c9000104010601 -050e00010401060104090100040301010400010004030102040301020403010204030102 -04030101040001000402010204030102040a0100040701000404010004ff04c900010401 -0601050e0001040106010409010004030100040001000400010004010100040201000401 -010004020100040101000402010004010100040201000401010004010101040101000402 -0100040101000402010004090100040701000404010004ff04c9000104010601050e0001 -040106010407010104040100040001000400010004010100040201000401010004050100 -040901000401010004020100040101000402010004010100040d01000407010004050101 -04ff04c70001040106010010040106010409010004030100040001000400010004010104 -04020102040301020403010304010100040201000401010404020102040a010004070100 -0404010004ff04c9000104010601000d0600000104010601040901000403010004000100 -040001000401010004090100040501000401010004020100040101000402010004010100 -0409010004090100040701000404010004ff04c90001040106010001040a060100010401 -060104090100040301000400010004000100040101000402010004010100040201000401 -010004020100040101000402010004010100040101010401010004020100040101000402 -0100040301010403010004070100040401000405010104ff04c10001040106010001040a -060100010401060104090100040301000400010004000100040201020403010204030102 -040301030402010104000100040201020403010204040101040301000407010004040100 -0405010104ff04c10001040106010001040a060100010401060104090100042a01000412 -01000403010304010103040401000406010004ff04c10001040106010001040a06010001 -04010601040a0101042401000402010004100101041101010405010104ff04c200010401 -06010001040a06010001040106010432010204ff04f20001040106010001040a06010001 -04010601040a01010478010104ff04a00001040106010001040a06010001040106010409 -0100042e01030405010004310100040601030404010004ff049f0001040106010001040a -060100010401060104090100040401020405010004090100041401000407010004040101 -040b01000405010104030102040b010104020100040801000404010004ff049f00010401 -06010001040a060100010401060104090100040601000410010004140100040601000404 -010004010100040901010404010004010100040101000402010004090100040101000402 -0100040701000404010004ff049f0001040106010001040a060100010401060104090100 -04060100040301020402010004000101040201000401010004030102040a010004050100 -040501000401010004080100040001000404010004010100040501000409010004010100 -04030100040601000404010004ff049f0001040106010001040a06010001040106010409 -010004060100040501000402010104010100040101000400010004030100040201000409 -0100040401000406010004010100040a0100040401000401010004050100040901000401 -010004040100040501000404010004ff049f0001040106010001040a0601000104010601 -04070101040701000405010004020100040201000401010104040100040d010004030100 -0407010004010100040a0100040401000401010004030101040a01000401010004050100 -040401000405010104ff049d0001040106010001040a0601000104010601040901000406 -01000405010004020100040201000401010104050102040a010004040100040601000401 -0100040a0100040401000401010004050100040901000401010004040100040501000404 -010004ff049f0001040106010001040a0601000104010601040901000406010004050100 -040201000402010004010100040001000407010004090100040501000405010004010100 -040a01000404010004010100040501000409010004010100040301000406010004040100 -04ff049f0001040106010001040a06010001040106010409010004060100040501000402 -010004020100040101000401010004020100040201000403010104030100040601000404 -010004010100040301010404010004040100040101000401010004020100040301010403 -0100040101000402010004070100040401000405010104ff04970001040106010001040a -060100010401060104090100040601000405010004020100040201000401010004020100 -040201020404010104030100040701000404010104040101040201040403010104030102 -04040101040401010402010004080100040401000405010104ff04970001040106010001 -040a06010001040106010409010004290100040301030405010004310100040601030404 -01000406010004ff04970001040106010001040a0601000104010601040a010104250101 -045001010405010104ff04980001040106010001040a060100010401060104ff04ff0428 -0001040106010001040a0601000104010601040a01010458010104ff0419010104a40001 -040106010001040a06010001040106010409010004510103040301000406010004040100 -04450100040a01030475010004310100040601030404010004a30001040106010001040a -0601000104010601040901000407010004040100040b010004060100042d010004060100 -040601000403010204270100041b0100040a01000477010004040101040b010004050101 -04040100040c010104020100040801000404010004a30001040106010001040a06010001 -040106010409010004070100041101000435010004060100040501000403010004000100 -0400010004260100041a0100040b01000476010004040100040101000409010104040100 -0401010004020101040b01000401010004020100040701000404010004a3000104010601 -0001040a0601000104010601040901000404010104000100040201020403010204020104 -040201020403010204020100040001010403010204020100040001010402010004020100 -040901000406010004040100040401000400010004040102040201000400010104030102 -0403010204030102040201040402010204020100040001010403010204030100040c0100 -040401010400010004020100040201000402010204020100040201000401010004000101 -040901010400010004020100040201000402010204020100040001010402010004000101 -040a010204020100040201000401010004000101040a0100040501000401010004080100 -0400010004040100040101000401010004000100040b0100040101000403010004060100 -0404010004a30001040106010001040a0601000104010601040901000403010004010101 -040401000402010004020100040301000406010004020100040201000401010104010100 -0401010004020100040101010401010004010100040201000409010004060100040a0100 -040001000403010004020100040101010401010004010100040201000401010004020100 -040101000402010004030100040301000402010004010101040101000401010004020100 -041001000404010004000100040001000401010004020100040101000402010004010100 -040201000401010104010100040801000400010004000100040101000402010004010100 -040201000401010104010100040101010401010004080100040201000401010004020100 -0401010104010100040801000406010004010100040a0100040401000401010004030100 -040b01000401010004040100040501000404010004a30001040106010001040a06010001 -040106010407010104040100040201000404010004020100040701000406010004020100 -040201000401010004020100040501000401010004060100040101000409010004040101 -040c01020406010004010100040201000401010004050100040201000401010004070100 -040301000402010004010100040501000414010004040100040001000400010004020100 -040101000401010004050100040201000401010004020100040801000400010004000100 -040201000401010004050100040101000402010004010100040201000408010004050100 -040201000401010004020100040701000407010004010100040a01000404010004010100 -04030100040b01000401010004050100040401000405010104a10001040106010001040a -060100010401060104090100040301000402010004040100040201000407010004060100 -040201000402010004010100040201000402010304010100040601000401010004090100 -04060100040c010004000100040201030401010004020100040101000405010404020102 -040401000403010004020100040101000406010204110100040401000400010004000100 -040201000401010004020102040201000402010004010100040201000408010004000100 -040001000402010004010100040201030401010004020100040101000402010004090102 -04020100040201000401010004020100040801000406010004010100040a010004040100 -0401010004030100040b01000401010004040100040501000404010004a3000104010601 -0001040a0601000104010601040901000403010004020100040401000402010004070100 -040601000402010004020100040101000402010004010100040201000401010004070100 -040001000409010004060100040c01000400010004010100040201000401010004020100 -040101000405010004090100040301000403010004020100040101000409010004100100 -040401000400010004000100040301000400010004050100040101000402010004010100 -040201000408010004000100040001000403010004000100040101000402010004010100 -040201000401010004020100040c01000401010004020100040101000402010004090100 -0405010004010100040a0100040401000401010004030100040b01000401010004030100 -040601000404010004a30001040106010001040a06010001040106010409010004030100 -040101010404010004020100040201000403010004060100040201000402010004010100 -0402010004010100040201000401010004070101040401010403010004060100040a0100 -040001000400010004010100040201000401010004020100040101000402010004010100 -040201000401010004020100040301000403010004020100040101000405010004020100 -040a01010403010004040100040001000400010004030101040201000402010004010100 -040101010401010104010100040301010402010004000100040001000403010104020100 -040201000401010104010100040101010401010004080100040201000401010004010101 -040101010401010004030101040401000404010004010100040301010404010004040100 -040101000403010004050101040301000401010004020100040701000404010004050101 -049b0001040106010001040a060100010401060104090100040401010400010004040100 -040301020405010104040100040301020402010004020100040201030401010004080100 -040401010403010004060100040b01020403010304010100040201000402010204030102 -0403010204050101040201020402010004060102040b0101040301000404010004000100 -040001000404010004030102040301010400010004010100040001010404010104020100 -0400010004000100040401000403010304010100040001010402010004000101040a0102 -040301010400010004010100040001010404010104050100040401010404010104020104 -0403010104020104040301010404010104020100040801000404010004050101049b0001 -040106010001040a06010001040106010409010004450100040501000403010304030100 -040c0100044c010004030103040b01000410010004080100040c01000409010004050100 -04040105040f0100040801000406010004310100040601030404010004060100049b0001 -040106010001040a0601000104010601040a0101044001000400010004040101040d0101 -0456010104110100040001000411010004060101040a010004000100040a010004050100 -041a0100040601010449010104050101049c0001040106010001040a0601000104010601 -044e0100048301000412010004140100040b010004050100041a010004f9000104010601 -0001040a0601000104010601046501010474010104ff04490001040106010001040a0601 -000104010601046401000406010004040100045a0100040b010004ff044b000104010601 -0001040a060100010401060104640100040601000403010204050100040c010004040100 -04060100040a0102041801020403010204050100040b010004220100040c010004040100 -040d01000404010004fe0001040106010001040a06010001040106010464010004050100 -0403010004000100040001000418010004140100041a01000405010004040100040c0100 -043601000413010004fe0001040106010001040a06010001040106010464010004040100 -040401000400010004040102040201000400010104030102040201040402010204030102 -04050100040a010204030102040501000405010004030100040d01000404010104000100 -040201020402010004000101040a01020402010004000101040301020402010404090102 -0402010404fc0001040106010001040a060100010401060104640100040a010004000100 -040601000402010104010100040401000404010004060100040201000402010004040100 -040901000402010004010100040201000404010004050100041201000403010004010101 -04010100040201000401010104010100040b010004020101040101000404010004040100 -040d01000404010004fe0001040106010001040a060100010401060104620101040c0102 -040501000402010004020100040401000404010004060100040601000404010004090100 -040901000404010004050100041001010404010004020100040101000402010004010100 -04020100040b010004020100040201000404010004040100040d01000404010004fe0001 -040106010001040a060100010401060104640100040c0100040001000404010004020100 -040201000404010004040100040601000403010304040100040901000406010304040100 -04050100041201000403010004020100040101040401010004020100040b010004020100 -040201000404010004040100040d01000404010004fe0001040106010001040a06010001 -0401060104640100040c0100040001000404010004020100040201000404010004040100 -040601000402010004020100040401000409010004050100040201000404010004050100 -041201000403010004020100040101000405010004020100040b01000402010004020100 -0404010004040100040d01000404010004fe0001040106010001040a0601000104010601 -04640100040a010004000100040001000404010004020100040201000404010004040100 -040601000402010004020100040401000409010004020100040101000402010004040100 -04050100040b010104040100040301000401010104010100040201000401010004020100 -040301010405010004020100040201000404010004040100040d01000404010004050101 -04f60001040106010001040a060100010401060104640100040b01020405010004020100 -040201000404010004050101040401000403010304040100040a01020403010304040100 -04050100040b010104040100040401010400010004020102040201000402010004030101 -0405010004020100040201000404010004050101040b0100040501010403010104f60001 -040106010001040a060100010401060104640100040c0100043301050427010004040100 -0407010004120100041d01050412010004f60001040106010001040a0601000104010601 -04650101046b0101040601010401010004020100041001010435010104f7000104010601 -0001040a060100010401060104e1010204ff04430001040106010001040a060100010401 -060104ff04ff04280001040106010001040a060100010401060104fd010304ff04260001 -040106010001040a060100010401060104fd010004ff04290001040106010001040a0601 -00010401060104fd010004ff04290001040106010001040a060100010401060104fd0100 -0405010104000100040201020402010004000101040a0102040301020402010004000101 -040201000402010004020102040201000400010104e10001040106010001040a06010001 -0401060104fd010004040100040101010401010004020100040101010401010004080100 -040201000401010004020100040101010401010004010100040201000401010004020100 -040101010401010004e00001040106010001040a060100010401060104fd010004040100 -040201000401010004020100040101000402010004080100040501000402010004010100 -040501000402010004010100040201000401010004e40001040106010001040a06010001 -0401060104fd010004040100040201000401010404010100040201000409010204020104 -040101000406010004000100040201040401010004e40001040106010001040a06010001 -0401060104fd01000404010004020100040101000405010004020100040c010004010100 -040501000406010004000100040201000405010004e40001040106010001040a06010001 -0401060104fd010004040100040101010401010004020100040101000402010004080100 -040201000401010004020100040101000407010004030100040201000401010004070101 -04da0001040106010001040a060100010401060104fd0100040501010400010004020102 -040201000402010004090102040301020402010004070100040401020402010004070101 -04da0001040106010001040a060100010401060104fd010304050100040e0105042e0100 -04da0001040106010001040a060100010401060104ff04030100040201000441010104db -0001040106010001040a060100010401060104ff0404010204ff04200001040106010001 -040a060100010401060104ff04ff04280001040106010001040a060100010401060104ff -040701000431010004ec0001040106010001040a060100010401060104ff040601000404 -0101040b01000405010104030102040b01010402010004eb0001040106010001040a0601 -00010401060104ff04050100040401000401010004090101040401000401010004010100 -0402010004090100040101000402010004ea0001040106010001040a0601000104010601 -04ff04040100040501000401010004080100040001000404010004010100040501000409 -0100040101000403010004e90001040106010001040a060100010401060104ff04030100 -0406010004010100040a0100040401000401010004050100040901000401010004040100 -04e80001040106010001040a060100010401060104ff040201000407010004010100040a -0100040401000401010004030101040a0100040101000405010004e70001040106010001 -040a060100010401060104ff040301000406010004010100040a01000404010004010100 -0405010004090100040101000404010004e80001040106010001040a0601000104010601 -04ff040401000405010004010100040a0100040401000401010004050100040901000401 -01000403010004e90001040106010001040a060100010401060104ff0405010004040100 -040101000403010104040100040401000401010004010100040201000403010104030100 -04010100040201000406010104e10001040106010001040a060100010401060104ff0406 -010004040101040401010402010404030101040301020404010104040101040201000407 -010104e10001040106010001040a060100010401060104ff040701000431010004090100 -04e10001040106010001040a060100010401060104ff0443010104e20001040106010001 -040a060100010401060104ff04ff04280001040106010001040a060100010401060104ff -04ff04280001040106010001040a060100010401060104ff040701000431010004ec0001 -040106010001040a060100010401060104ff0406010004040101040b0100040501010403 -0102040b01010402010004eb0001040106010001040a060100010401060104ff04050100 -040401000401010004090101040401000401010004010100040201000409010004010100 -0402010004ea0001040106010001040a060100010401060104ff04040100040501000401 -0100040801000400010004040100040101000405010004090100040101000403010004e9 -0001040106010001040a060100010401060104ff040301000406010004010100040a0100 -04040100040101000405010004090100040101000404010004e80001040106010001040a -060100010401060104ff040201000407010004010100040a010004040100040101000403 -0101040a0100040101000405010004e70001040106010001040a060100010401060104ff -040301000406010004010100040a01000404010004010100040501000409010004010100 -0404010004e80001040106010001040a060100010401060104ff04040100040501000401 -0100040a010004040100040101000405010004090100040101000403010004e900010401 -06010001040a060100010401060104ff0405010004040100040101000403010104040100 -040401000401010004010100040201000403010104030100040101000402010004060101 -04e10001040106010001040a060100010401060104ff0406010004040101040401010402 -010404030101040301020404010104040101040201000407010104e10001040106010001 -040a060100010401060104ff04070100043101000409010004e10001040106010001040a -060100010401060104ff0443010104e20001040106010001040a060100010401060104ff -04ff04280001040106010001040a060100010401060104ff040601010463010104b90001 -040106010001040a060100010401060104ff040501000467010004b80001040106010001 -040a060100010401060104ff0405010004040102041801020443010004b8000104010601 -0001040a060100010401060104ff0405010004060100041a01000443010004b800010401 -06010001040a060100010401060104ff0405010004060100040301020403010204030102 -040501000409010104000100040201000402010004020102040301020402010004000101 -04020100040201000402010204020100040001010404010004b80001040106010001040a -060100010401060104ff0405010004060100040201000402010004010100040201000401 -010004020100040401000409010004000100040001000401010004020100040101000402 -010004010100040201000401010104010100040101000402010004010100040201000401 -0101040101000403010004b80001040106010001040a060100010401060104ff04030101 -040701000402010004020100040101000409010004040100040901000400010004000100 -040201000401010004010100040501000402010004010100040501000402010004010100 -04020100040101000408010104b60001040106010001040a060100010401060104ff0405 -010004060100040201000402010004010100040601030404010004090100040001000400 -010004020100040101000402010204020104040101000406010004000100040201040401 -01000407010004b80001040106010001040a060100010401060104ff0405010004060100 -040201000402010004010100040501000402010004040100040901000400010004000100 -040301000400010004050100040101000405010004060100040001000402010004050100 -0407010004b80001040106010001040a060100010401060104ff04050100040601000402 -010004020100040101000402010004010100040201000404010004040101040201000400 -010004000100040301010402010004020100040101000402010004010100040701000403 -01000402010004010100040701000405010104b00001040106010001040a060100010401 -060104ff0405010004060100040301020403010204030103040401000404010104020100 -040001000400010004040100040301020403010204020100040701000404010204020100 -040701000405010104b00001040106010001040a060100010401060104ff040501000429 -0100040c0100042e01000406010004b00001040106010001040a060100010401060104ff -0406010104250101040a010004000100042d01010405010104b10001040106010001040a -060100010401060104ff043c010004ea0001040106010001040a060100010401060104ff -04ff04280001040106010001040a060100010401060104ff04ff04280001040106010001 -040a060100010401060104ff04ff04280001040106010001040a060100010401060104ff -04ff04280001040106010001040a060100010401060104ff040301010400010004020100 -040201000402010204030102040201000400010104020100040201000402010204020100 -0400010104ef0001040106010001040a060100010401060104ff04030100040001000400 -010004010100040201000401010004020100040101000402010004010101040101000401 -0100040201000401010004020100040101010401010004ee0001040106010001040a0601 -00010401060104ff04030100040001000400010004020100040101000401010004050100 -0402010004010100040501000402010004010100040201000401010004f2000104010601 -0001040a060100010401060104ff04030100040001000400010004020100040101000402 -010204020104040101000406010004000100040201040401010004f20001040106010001 -040a060100010401060104ff040301000400010004000100040301000400010004050100 -04010100040501000406010004000100040201000405010004f20001040106010001040a -060100010401060104ff0403010004000100040001000403010104020100040201000401 -01000402010004010100040701000403010004020100040101000407010104e800010401 -06010001040a060100010401060104ff0403010004000100040001000404010004030102 -04030102040201000407010004040102040201000407010104e80001040106010001040a -060100010401060104ff040d0100042f010004e80001040106010001040a060100010401 -060104ff040a010004000100042e010104e90001040106010001040a0601000104010601 -04ff040b010004ff041b0001040106010001040a060100010401060104ff04ff04280001 -040106010001040a060100010401060104ff040401030401010304ff0419000104010601 -0001040a060100010401060104ff040401000407010004ff04190001040106010001040a -060100010401060104ff040401000407010004ff04190001040106010001040a06010001 -0401060104ff040401000407010004ff04190001040106010001040a0601000104010601 -04ff040401000407010004ff04190001040106010001040a060100010401060104ff0404 -01000407010004ff04190001040106010001040a060100010401060104ff040401000407 -010004ff04190001040106010001040a060100010401060104ff040401000407010004ff -04190001040106010001040a060100010401060104ff04040100040701000404010104ff -04120001040106010001040a060100010401060104ff04040100040701000404010104ff -04120001040106010001040a060100010401060104ff04040103040101030405010004ff -04120001040106010001040a060100010401060104ff0412010104ff0413000104010601 -0001040a060100010401060104ff04ff04280001040106010001040a0601000104010601 -04ff0418010104040101040b010104f80001040106010001040a060100010401060104ff -0404010304010103040201030404010004050100040301030404010004f7000104010601 -0001040a060100010401060104ff04040100040701000405010004040100040501000406 -01000404010004f70001040106010001040a060100010401060104ff0404010004070100 -040501000404010004050100040601000404010004f70001040106010001040a06010001 -0401060104ff0404010004070100040501000404010004050100040601000404010004f7 -0001040106010001040a060100010401060104ff04040100040701000405010004040100 -04050100040601000404010004f70001040106010001040a060100010401060104ff0404 -010004070100040501000405010104040101040401000405010104f50001040106010001 -040a060100010401060104ff040401000407010004050100040401000405010004060100 -0404010004f70001040106010001040a060100010401060104ff04040100040701000405 -01000404010004050100040601000404010004f70001040106010001040a060100010401 -060104ff0404010004070100040501000404010004050100040601000404010004050101 -04ef0001040106010001040a060100010401060104ff0404010004070100040501000404 -01000405010004060100040401000405010104ef0001040106010001040a060100010401 -060104ff0404010304010103040201030404010004050100040301030404010004060100 -04ef0001040106010001040a060100010401060104ff0418010104040101040b01010405 -010104f00001040106010001040a060100010401060104ff04ff04280001040106010001 -040a0601000104010601040a0101046a010104ff04ae0001040106010001040a06010001 -0401060104090100046e010004ff04ad0001040106010001040a06010001040106010409 -0100040501000430010004040100040d0101040901020412010004ff04ad000104010601 -0001040a0601000104010601040901000405010004360100040c0100040d010004120100 -04ff04ad0001040106010001040a06010001040106010409010004030104040101000400 -0101040301020402010004000101040a010204020100040201000402010204020104040a -0100040401020405010004030102040301020404010004ff04ad0001040106010001040a -060100010401060104090100040501000403010104010100040101000402010004010101 -04010100040801000402010004010100040201000404010004040100040a010404010100 -0402010004040100040201000402010004010100040201000403010004ff04ad00010401 -06010001040a060100010401060104070101040601000403010004090100040101000402 -0100040801000402010004020100040001000405010004040100040c0100040701000404 -01000402010004050100040201000404010104ff04ab0001040106010001040a06010001 -040106010409010004050100040301000406010304010100040201000408010404030100 -0406010004040100040c0100040401030404010004030102040201040403010004ff04ad -0001040106010001040a0601000104010601040901000405010004030100040501000402 -010004010100040201000408010004060100040001000405010004040100040c01000403 -0100040201000404010004060100040101000407010004ff04ad0001040106010001040a -060100010401060104090100040501000403010004050100040201000401010104010100 -040801000402010004010100040201000404010004040100040501010404010004030100 -040201000404010004020100040201000401010004020100040301000405010104ff04a5 -0001040106010001040a0601000104010601040901000406010104010100040601030401 -010004000101040a01020402010004020100040401000405010104030101040401000404 -0103040401000403010204030102040401000405010104ff04a50001040106010001040a -060100010401060104090100041801000404010504200100042701000406010004ff04a5 -0001040106010001040a0601000104010601040a01010416010004290101042601010405 -010104ff04a60001040106010001040a06010001040106010423010004ff04ff04030001 -040106010001040a0601000104010601040a010104be010104ff045a0001040106010001 -040a06010001040106010409010004c2010004ff04590001040106010001040a06010001 -0401060104090100042d0100041701000402010204410100041701000402010204120100 -04ff04590001040106010001040a060100010401060104090100042d0100041701000404 -01000441010004170100040401000412010004ff04590001040106010001040a06010001 -040106010409010004040102040201000400010104020100040001010403010204020100 -040001010409010004000101040301020402010004000101040301010400010004040100 -040301020402010004000101040a01020402010004000101040201000400010104030102 -040201000400010104090100040001010403010204020100040001010403010104000100 -040401000403010204020100040001010404010004ff04590001040106010001040a0601 -000104010601040901000403010004020100040101010401010004010101040101000401 -010004020100040101010401010004080101040101000401010004020100040101010401 -010004010100040101010404010004020100040201000401010104010100040801000402 -010004010101040101000401010104010100040101000402010004010101040101000408 -010104010100040101000402010004010101040101000401010004010101040401000402 -01000402010004010101040101000403010004ff04590001040106010001040a06010001 -040106010407010104040100040201000401010004050100040501000402010004010100 -040c01000402010004050100040101000402010004010100040201000404010004020100 -0402010004010100040c0100040201000401010004050100040501000402010004010100 -040c01000402010004050100040101000402010004010100040201000404010004020100 -04020100040101000408010104ff04570001040106010001040a06010001040106010409 -0100040301040401010004050100040501000402010004010100040c0100040201000402 -010304010100040201000401010004020100040401000402010404010100040c01040401 -010004050100040501000402010004010100040c01000402010004020103040101000402 -010004010100040201000404010004020104040101000407010004ff0459000104010601 -0001040a0601000104010601040901000403010004050100040501000405010004020100 -04010100040c010004020100040101000402010004010100040201000401010004020100 -040401000402010004050100040c01000405010004050100040501000402010004010100 -040c01000402010004010100040201000401010004020100040101000402010004040100 -04020100040501000407010004ff04590001040106010001040a06010001040106010409 -010004030100040201000401010004050100040501000402010004010100040c01000402 -010004010100040201000401010004020100040101000401010104040100040201000402 -010004010100040701010402010004020100040101000405010004050100040201000401 -0100040c0100040201000401010004020100040101000402010004010100040101010404 -0100040201000402010004010100040701000405010104ff04510001040106010001040a -0601000104010601040901000404010204020100040501000406010204020100040c0100 -040201000402010304010100040201000402010104000100040401000403010204020100 -040701010403010204020100040501000406010204020100040c01000402010004020103 -040101000402010004020101040001000404010004030102040201000407010004050101 -04ff04510001040106010001040a06010001040106010409010004250105043501000424 -0105043401000406010004ff04510001040106010001040a0601000104010601040a0101 -045d0101045e01010405010104ff04520001040106010001040a060100010401060104ff -04ff04280001040106010001040a0601000104010601040a0101046a010104ff04ae0001 -040106010001040a060100010401060104090100046e010004ff04ad0001040106010001 -040a060100010401060104090100041401000413010004040100043501020404010004ff -04ad0001040106010001040a060100010401060104090100042f01000437010004040100 -04ff04ad0001040106010001040a06010001040106010409010004030100040001010402 -010004000101040301020403010204020100040001010403010204020104040101000402 -010004080100040001010403010204020100040001010402010104000100040301020405 -01000404010004ff04ad0001040106010001040a06010001040106010409010004030101 -040101000401010104010100040401000402010004020100040101010401010004040100 -040401000403010004020100040801010401010004010100040201000401010104010100 -0401010004000100040001000401010004020100040401000404010004ff04ad00010401 -06010001040a060100010401060104070101040401000402010004010100040801000402 -010004020100040101000408010004040100040401000401010004080100040201000401 -0100040201000401010004050100040001000400010004050100040401000405010104ff -04ab0001040106010001040a060100010401060104090100040301000402010004010100 -040801000402010004020100040101000408010004040100040401000401010004080100 -040201000401010004020100040101000405010004000100040001000402010304040100 -0404010004ff04ad0001040106010001040a060100010401060104090100040301000402 -010004010100040801000402010004020100040101000408010004040100040501000400 -010004080100040201000401010004020100040101000405010004000100040001000401 -010004020100040401000404010004ff04ad0001040106010001040a0601000104010601 -040901000403010104010100040101000408010004020100040201000401010004080100 -040401000405010104040101040201000402010004010100040201000401010004050100 -0400010004000100040101000402010004040100040401000405010104ff04a500010401 -06010001040a060100010401060104090100040301000400010104020100040801000403 -010204020100040801000405010104040100040401010402010004020100040201020402 -01000405010004000100040001000402010304040100040401000405010104ff04a50001 -040106010001040a060100010401060104090100040301000432010004050100042e0100 -0406010004ff04a50001040106010001040a0601000104010601040a010104010100042f -01000400010004040101042d01010405010104ff04a60001040106010001040a06010001 -04010601040e01000430010004ff04e60001040106010001040a0601000104010601040a -0101049b010104ff047d0001040106010001040a06010001040106010409010004620100 -043101000408010004ff047c0001040106010001040a060100010401060104090100042e -0102041401000419010004040101040b01000405010104040101040b0101040201000407 -010004ff047c0001040106010001040a0601000104010601040901000430010004140100 -041801000404010004010100040901010404010004010100040201000401010004090100 -04010100040201000406010004ff047c0001040106010001040a06010001040106010409 -010004040101040001000401010004000101040301020402010004020100040101000400 -0101040c010004030102040301020403010104000100040201020402010004000101040a -010004050100040101000408010004000100040401000401010004020100040101000409 -010004010100040301000405010004ff047c0001040106010001040a0601000104010601 -040901000403010004010101040101010401010004010100040201000401010004020100 -0401010104010100040b0100040201000402010004010100040201000401010004010101 -04010100040201000401010104010100040801000406010004010100040a010004040100 -0401010004020100040101000409010004010100040401000404010004ff047c00010401 -06010001040a060100010401060104070101040401000402010004010100040501000402 -010004010100040201000401010004020100040b01000402010004020100040501000401 -010004020100040101000402010004010100040b01000407010004010100040a01000404 -01000401010004020100040101000409010004010100040501000404010104ff047a0001 -040106010001040a06010001040106010409010004030100040201000401010004050100 -0402010004010100040201000401010004020100040b0100040201040402010304010100 -040201000401010404010100040c01000406010004010100040a01000404010004010100 -04020100040101000409010004010100040401000404010004ff047c0001040106010001 -040a06010001040106010409010004030100040201000401010004050100040201000401 -0100040201000401010004020100040b0100040201000405010004020100040101000402 -01000401010004050100040d01000405010004010100040a010004040100040101000402 -0100040101000409010004010100040301000405010004ff047c0001040106010001040a -060100010401060104090100040301000401010104010100040501000402010004010100 -040101010401010104010100040b01000402010004020100040101000402010004010100 -040101010401010004020100040101000407010104040100040401000401010004030101 -040401000404010004010100040201000401010004030101040301000401010004020100 -040601000405010104ff04740001040106010001040a0601000104010601040901000404 -010104000100040101000406010204030101040001000401010004000101040c01000403 -010204030103040201010400010004020102040201000407010104050100040401010404 -0101040201040403010104040101040401010404010104020100040701000405010104ff -04740001040106010001040a060100010401060104090100040701000416010004040105 -042e01000406010004310100040801000406010004ff04740001040106010001040a0601 -000104010601040a010104010100040201000416010004370101044201010405010104ff -04750001040106010001040a0601000104010601040f01020417010004ff04fc00010401 -06010001040a0601000104010601040a0101045c010104ff04bc0001040106010001040a -0601000104010601040901000460010004ff04bb0001040106010001040a060100010401 -06010409010004030100042b01000418010204030102040301020404010004ff04bb0001 -040106010001040a06010001040106010409010004030100044401000402010004010100 -0402010004010100040201000403010004ff04bb0001040106010001040a060100010401 -060104090100040301000400010104030102040301020402010004000101040a01020403 -01020402010404020102040d010004050100040501000403010004ff04bb000104010601 -0001040a0601000104010601040901000403010104010100040101000402010004010100 -040201000401010104010100040801000402010004040100040601000401010004020100 -040c010004050100040501000403010004ff04bb0001040106010001040a060100010401 -060104070101040401000402010004010100040201000405010004010100040201000408 -010004080100040501000402010004020100040b010004040101040401010405010104ff -04b90001040106010001040a060100010401060104090100040301000402010004010104 -04020103040101000402010004090102040501000404010004030104040a010004070100 -040501000403010004ff04bb0001040106010001040a0601000104010601040901000403 -0100040201000401010004050100040201000401010004020100040c0100040401000403 -010004040100040d010004080100040501000403010004ff04bb0001040106010001040a -060100010401060104090100040301000402010004010100040201000401010004020100 -040101010401010004080100040201000404010004020100040501000402010004030101 -0402010004050100040201000401010004020100040301000405010104ff04b300010401 -06010001040a060100010401060104090100040301000402010004020102040301030401 -010004000101040a01020405010004020104040201020404010104020104040201020403 -0102040401000405010104ff04b30001040106010001040a060100010401060104090100 -041801000404010504200100041901000406010004ff04b30001040106010001040a0601 -000104010601040a01010416010004290101041801010405010104ff04b4000104010601 -0001040a06010001040106010423010004ff04ff04030001040106010001040a06010001 -04010601040a0101045c010104ff04bc0001040106010001040a06010001040106010409 -01000460010004ff04bb0001040106010001040a060100010401060104090100040c0100 -041101000416010004190100040401020404010004ff04bb0001040106010001040a0601 -00010401060104090100040c0100041101000430010104030100040201000403010004ff -04bb0001040106010001040a060100010401060104090100040401020402010404020102 -040301020402010004010100040a01020403010204020104040201020409010004000100 -040701000403010004ff04bb0001040106010001040a0601000104010601040901000403 -01000402010004030100040301000402010004010100040201000401010004000100040a -01000402010004040100040601000401010004020100040a0100040701000403010004ff -04bb0001040106010001040a060100010401060104070101040401000407010004070100 -0401010004050101040b010004080100040501000402010004020100040a010004060100 -0405010104ff04b90001040106010001040a060100010401060104090100040401020404 -0100040401030401010004050101040c0102040501000404010004030104040a01000405 -01000405010004ff04bb0001040106010001040a06010001040106010409010004070100 -040301000403010004020100040101000405010004000100040e01000404010004030100 -04040100040e0100040401000406010004ff04bb0001040106010001040a060100010401 -060104090100040301000402010004030100040301000402010004010100040201000401 -010004010100040901000402010004040100040201000405010004020100040301010404 -010004030100040701000405010104ff04b30001040106010001040a0601000104010601 -040901000404010204050101040201030402010204020100040201000409010204050100 -0402010404020102040401010402010404010104040301000405010104ff04b300010401 -06010001040a0601000104010601040901000425010504200100041201000406010004ff -04b30001040106010001040a0601000104010601040a0101044801010411010104050101 -04ff04b40001040106010001040a060100010401060104ff04ff04280001040106010001 -040a0601000104010601040a0101045c010104ff04bc0001040106010001040a06010001 -04010601040901000460010004ff04bb0001040106010001040a06010001040106010409 -0100041501000411010004060100041f0102040401010404010004ff04bb000104010601 -0001040a0601000104010601040901000415010004110100042601000402010004020100 -040101000403010004ff04bb0001040106010001040a0601000104010601040901000403 -010004000101040301020403010104000100040101000402010004020102040201040402 -010204030102040201000400010104030102040d010004020100040101000403010004ff -04bb0001040106010001040a060100010401060104090100040301010401010004010100 -040201000401010004010101040101000402010004010100040201000403010004060100 -040201000402010004010101040101000401010004020100040c01000402010004010100 -0403010004ff04bb0001040106010001040a060100010401060104070101040401000405 -010004020100040101000402010004010100040201000401010004070100040601000402 -010004020100040101000402010004010100040e010104030100040101000404010104ff -04b90001040106010001040a060100010401060104090100040301000405010404010100 -040201000401010004020100040101000407010004060100040201000402010004010100 -0402010004020102040d010004020100040101000403010004ff04bb0001040106010001 -040a06010001040106010409010004030100040501000405010004020100040101000402 -01000401010004070100040601000402010004020100040101000402010004050100040c -010004020100040101000403010004ff04bb0001040106010001040a0601000104010601 -040901000403010004050100040201000401010004010101040101000401010104010100 -040201000403010004060100040201000402010004010100040201000401010004020100 -0403010104020100040201000402010004010100040301000405010104ff04b300010401 -06010001040a060100010401060104090100040301000406010204030101040001000402 -010104000100040201020405010104040100040301020402010004020100040201020404 -01010403010204040101040401000405010104ff04b30001040106010001040a06010001 -0401060104090100044c0100041201000406010004ff04b30001040106010001040a0601 -000104010601040a010104480101041101010405010104ff04b40001040106010001040a -060100010401060104ff04ff04280001040106010001040a0601000104010601040a0101 -04890101049401010404010104f10001040106010001040a060100010401060104090100 -048a010004980100040501000403010304e80001040106010001040a0601000104010601 -040901000418010004300102040301020412010004060100041901000406010104090102 -040301020436010104030100041901020402010404010104040201020402010404030100 -040501000406010004e80001040106010001040a06010001040106010409010004180100 -0432010004050100041201000421010004050100040d0100040501000435010004050100 -041801000402010004010100040501000405010004020100040101000407010004050100 -0406010004e80001040106010001040a0601000104010601040901000404010104000100 -040201020402010004000101040201000400010104030102040301010400010004020102 -040a01020403010204050100040501000403010204030102040201040402010204030102 -0402010004000101040b0100040501000403010004020100040401000405010004030102 -040201000402010004020102040301020402010004000101040a01020404010004030104 -040201020402010004000101040901000405010004050100040901000401010004070100 -040501000406010004e80001040106010001040a06010001040106010409010004030100 -040101010401010004020100040101010401010004010101040101000401010004020100 -040101000401010104010100040201000408010004020100040101000402010004040100 -040501000402010004020100040101000402010004030100040601000402010004020100 -0401010104010100040a0100040301040401010004020100040401000405010004020100 -040201000401010004020100040101000402010004010100040201000401010104010100 -040801000402010004010104040301000403010004020100040101010401010004080100 -0405010304020103040601000401010304040100040501000406010004e8000104010601 -0001040a0601000104010601040701010404010004020100040501000401010004050100 -040201000405010004010100040201000401010004020100040801000405010004020100 -040401000405010004020100040201000401010004070100040601000402010004020100 -040101000402010004080101040601000403010004020100040401000405010004020100 -040501000400010004000100040101000402010004010100040201000401010004020100 -040c01000403010004050100040301000402010004010100040c01030406010004050100 -040301010406010004040101040401010404010004e80001040106010001040a06010001 -040106010409010004030100040201000402010304010100040501000402010004020103 -040101000402010004010104040801000405010004020100040401000405010004020104 -04010100040701000406010004020100040201000401010004020100040a010004050100 -040301000402010004040100040501000403010204020100040001000400010004010104 -0401010404010100040201000409010304030100040501000403010404010100040c0100 -040201000405010004050100040501000405010004030100040501000406010004e80001 -040106010001040a06010001040106010409010004030100040201000401010004020100 -0401010004050100040201000401010004020100040101000402010004010100040c0100 -040501000402010004040100040501000402010004050100040701000406010004020100 -040201000401010004020100040a01000405010004030100040201000404010004050100 -040601000401010004000100040001000401010004050100040501000402010004080100 -0402010004030100040501000403010004050100040c0100040201000401010004020100 -040101000402010004050100040101000402010004030100040501000406010004e80001 -040106010001040a06010001040106010409010004030100040101010401010004020100 -040101000405010104010100040101000402010004010100040101010401010004020100 -040801000402010004010100040201000404010004050100040201000402010004010100 -040201000403010004060100040201000402010004010100040201000403010104040100 -040501000403010004010101040401000405010004020100040201000401010004000100 -040001000401010004020100040101000402010004010101040101000408010004020100 -040301000405010004030100040201000401010004070101040201000402010004010100 -040201000401010004020100040101000402010004010100040201000403010004050100 -0406010004e80001040106010001040a0601000104010601040901000404010104000100 -0402010304010100040501000400010104030103040201010400010004020102040a0102 -040301020405010004050100040301020403010204050101040401000403010204020100 -040201000403010104040100040501000404010104000100040401000405010004030102 -040301000400010004030102040301020402010004000101040a01030403010004060101 -040201020402010004070101040301020403010204030102040301020403010204040100 -040501000406010004e80001040106010001040a06010001040106010409010004070100 -0421010004070105044a010004040100043b010004040105042701000427010004050100 -0403010304e80001040106010001040a0601000104010601040a01010401010004020100 -041d01000402010004560101040601010439010004300101042601010404010104f10001 -040106010001040a0601000104010601040f0102041f0102049c010004ff045400010401 -06010001040a060100010401060104ff04ff04280001040106010001040a060100010401 -060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401 -06010001040a060100010401060104ff04ff04280001040106010001040a060100010401 -060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401 -06010001040a060100010401060104ff04ff04280001040106010001040a060100010401 -060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401 -06010001040a060100010401060104ff04ff04280001040106010001040a060100010401 -060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401 -06010001040a060100010401060104ff04ff04280001040106010001040a060100010401 -060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401 -06010001040a060100010401060104ff04ff04280001040106010001040a060100010401 -060104ff04ff04280001040106010001040a060100010401060104ff04ff042800010401 -06010001040a060100010401060104ff04ff04280001040106010001060c000104010601 -04ff04ff04280001040106010000060d00010401060104ff04ff0428000104010601050e -00010401060104ff04ff042800010401060100100401060104ff04ff0428000104010601 -0500000c060000010401060104ff04ff0428000104010601050000010408060105000001 -0401060104ff04ff04280001040106010501000104070601050000010401060104ff04ff -04280001040106010501000104060601050100010401060104ff04ff0428000104010601 -0502000104050601050100010401060104ff04ff04280001040106010502000104040601 -050200010401060104ff04ff042800010401060105030001040306010502000104010601 -04ff04ff04280001040106010503000104020601050300010401060104ff04ff04280001 -040106010504000104010601050300010401060104ff04ff042800010401060105040001 -04000601050400010401060104ff04ff0428000104010601050500000602050400010401 -060104ff04ff0428000104010601050500000601050500010401060100ff00ff002a0401 -060105060601050500010401060000ff00ff002b04010601050606000506000104ff04ff -04300601001004ff04ff04300600001104ff04ff04ff04ff04ff04ff04ff04ff04ff04ff -04ff04ff04ff0498010204ff04ff044001000401010004ff04ff043f0100040201000402 -010204020100040001010403010204ff04ff042a01000402010004010100040201000401 -010104010100040101000402010004ff04ff042901000402010004010100040201000401 -010004020100040101000402010004ff04ff042901000402010004010100040201000401 -0100040201000401010404ff04ff04290100040201000401010004020100040101000402 -01000401010004ff04ff042d010004010100040201000402010004010100040201000401 -01000402010004ff04ff042901020404010204020100040201000402010204ff04ff04ff -04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04ff04c1 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 73 377 347 -%%EOF diff --git a/lib/appmon/doc/src/ref_man.xml b/lib/appmon/doc/src/ref_man.xml deleted file mode 100644 index b54df2ee9b..0000000000 --- a/lib/appmon/doc/src/ref_man.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE application SYSTEM "application.dtd"> - -<application xmlns:xi="http://www.w3.org/2001/XInclude"> - <header> - <copyright> - <year>1996</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Appmon Reference Manual</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev></rev> - </header> - <description> - <p>The Application Monitor, <em>Appmon</em>, is a graphical utility used - to supervise applications executing either locally or on remote nodes. - The process tree of an application can furthermore be monitored.</p> - </description> - <xi:include href="appmon.xml"/> -</application> - diff --git a/lib/appmon/doc/src/warning.gif b/lib/appmon/doc/src/warning.gif Binary files differdeleted file mode 100644 index 96af52360e..0000000000 --- a/lib/appmon/doc/src/warning.gif +++ /dev/null diff --git a/lib/appmon/ebin/.gitignore b/lib/appmon/ebin/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/appmon/ebin/.gitignore +++ /dev/null diff --git a/lib/appmon/info b/lib/appmon/info deleted file mode 100644 index c33a50d106..0000000000 --- a/lib/appmon/info +++ /dev/null @@ -1,5 +0,0 @@ -group: tools -short: A utility used to supervise Applications executing on several -short: Erlang nodes - - diff --git a/lib/appmon/priv/Makefile b/lib/appmon/priv/Makefile deleted file mode 100644 index 356fe9b842..0000000000 --- a/lib/appmon/priv/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1996-2012. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -include ../vsn.mk -VSN = $(APPMON_VSN) - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/appmon-$(VSN) - -# -# Macros -# -HELP_FILES = \ - appmon_help.txt - -TOOLBAR_FILES = \ - appmon.tool \ - appmon.gif \ - start_info.html \ - main_frame.html \ - info_frames.html \ - blank.html - -# -# Rules -# - -debug opt: - -docs: - -clean: - - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_spec: opt - $(INSTALL_DIR) "$(RELSYSDIR)/priv" - $(INSTALL_DATA) $(HELP_FILES) $(TOOLBAR_FILES) "$(RELSYSDIR)/priv" - -release_docs_spec: - -FORCE: diff --git a/lib/appmon/priv/appmon.gif b/lib/appmon/priv/appmon.gif Binary files differdeleted file mode 100644 index 583fcb8311..0000000000 --- a/lib/appmon/priv/appmon.gif +++ /dev/null diff --git a/lib/appmon/priv/appmon.tool b/lib/appmon/priv/appmon.tool deleted file mode 100644 index 93a469c6a4..0000000000 --- a/lib/appmon/priv/appmon.tool +++ /dev/null @@ -1,24 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -{version,"1.2"}. -[{config_func,{appmon_web,configData,[]}}, -{tool,"Appmon"}, - {start,{appmon,start,[]}}, - {icon,"appmon.gif"}, - {message,"Application Monitor"}, - {html,"../doc/html/index.html"}]. diff --git a/lib/appmon/priv/appmon_help.txt b/lib/appmon/priv/appmon_help.txt deleted file mode 100644 index f1685be4d8..0000000000 --- a/lib/appmon/priv/appmon_help.txt +++ /dev/null @@ -1,154 +0,0 @@ - - - - Help for the application monitor system - --------------------------------------- - - - - - - The monitor system has two types of windows, the node window - which opens when appmon:start() is evaluated, and the - application window which opens when an application in the node - window is clicked on. - - All nodes that are known to appmon is shown in the node - window, normally this is all Erlang nodes visible with the - nodes() command. - - -The Node window ---------------- - - The node window monitors nodes. At the top there is a menubar - and below that, each known node is shown separated with a thin - line from the others. A node is represented by its name as - root of its application tree. The node name pictures the - application controller on that node. The name itself is a menu - where operations on the node can be performed (rebooting it - for instance). To the far left is a load meter (like those on - a tape deck) which measures the current load at the - node. Below the node name (the application controller) is a - tree with applications, clicking on these applications starts - the application monitor. - - - The top window menubar - ---------------------- - - File:Quit - Stop the monitor. - - Options: - Load: time - Load is calculated (roughly) as processor time. - Load: queue - Load is calculated as the length of the ready - queue. - Load: prog - A progressive scale is used for load values. - Load: linear - A linear scale is used for load values. - - Help - Prints this message. - - - The application controller menu - ------------------------------- - Reboot - Reboot the node - Restart - Restart the node - Stop - Stop the node - - - The load meter - -------------- - - Load can be measured as processor time / elapsed time or as - the length of the runtime queue, depending on the setting in - the Options menu. - - -The Application window ----------------------- - - The application window monitors an application. It will - automaticly update the window every other second or so if - there are any changes in the process tree. At the top there is - a menubar followed by a toolbar and then the application - tree. Application trees come in two flavours: supervision - view, where a strict supervision tree is shown, and process - view, where all linked processes in the application is shown. - - - The application window menubar - ------------------------------ - - File:Quit - Quit the application window. - - Options:Refresh - Update process information and refresh - screen. - - Options:Sup. view - - Show strict supervision tree only. - - Options:Proc. view - - Show all linked processes. - - Help - Prints this message. - - - The application window toolbar - ------------------------------ - - The application toolbar controls the actions of the mouse - pointer. Clicking on a process in the application window have - different meaning depending on which tool is selected. The - procedure is to first press a button (T for trace for example) - and then click on the process that should be traced. - - Info - Process information is printed in the shell. This mode - is default and automaticly returned to after a mouse click. - - Send - Send a message to the clicked process. A window will - pop up where the message can be written (and you can also - change the destination pid). Double clicking on this button - pops up a window where pid and message can be filled in. - - Trace - Toggle trace on/off on the process. Note that not all - processes respond to the sys:trace call. - - Kill - Send a non-trappable exit signal to the process. - - -Technical Detail ----------------- - - Files and distribution - ---------------------- - - Appmon is a distributed program but all graphics is handled on - one node (the one it is started on) so GS need only to be - loaded on that single node. All real monitoring is done in a - single module (appmon_info) being run on each node which acts - as an information centre. The various windows (node and - application) then subscribe for information. - - In summary: only the appmon_info module must be accessible by - the clients, the rest of the appmon files are only needed at - the server. - - Trouble shooting - ---------------- - - Q. Why doesn't all my nodes show up in the node window? - - A 1. Are the nodes visible with the nodes() command in the - shell? If not you must do net:ping(NodeName) to add nodes to - the Erlang distribution. - - A 2. Is the appmin_info module loadable at the missing - node(s)? - - Q. Why doesn't the application window show my application - supervision structure? - - A. Does your application have a real application master? It is - absolutely necessary that your top process behaves as a - supervisor should (a program is not supervised just because it - is started with application:start). diff --git a/lib/appmon/priv/blank.html b/lib/appmon/priv/blank.html deleted file mode 100644 index 44e86908a0..0000000000 --- a/lib/appmon/priv/blank.html +++ /dev/null @@ -1,6 +0,0 @@ -<HTML> -<HEAD></HEAD> -<BODY BGCOLOR="#FFFFFF"> - -</BODY> -</HTML>
\ No newline at end of file diff --git a/lib/appmon/priv/info_frames.html b/lib/appmon/priv/info_frames.html deleted file mode 100644 index 9320364883..0000000000 --- a/lib/appmon/priv/info_frames.html +++ /dev/null @@ -1,9 +0,0 @@ -<HTML> -<HEAD> -<TITLE>WebAppmon </TITLE> -</HEAD> -<FRAMESET ROWS="85%,15%" BORDER="0"> -<FRAME NAME="main" SRC="./start_info.html"> -<FRAME NAME="proc_data" SRC="./blank.html"> -</FRAMESET> -</HTML>
\ No newline at end of file diff --git a/lib/appmon/priv/main_frame.html b/lib/appmon/priv/main_frame.html deleted file mode 100644 index 57e540a2c1..0000000000 --- a/lib/appmon/priv/main_frame.html +++ /dev/null @@ -1,9 +0,0 @@ -<HTML> -<HEAD> -<TITLE>WebAppmon </TITLE> -</HEAD> -<FRAMESET COLS="15%,85%" > - <FRAME NAME="left" SRC="../../erl/appmon_web/node_info"> - <FRAME NAME="base_frames" SRC="./info_frames.html"> -</FRAMESET> -</HTML>
\ No newline at end of file diff --git a/lib/appmon/priv/start_info.html b/lib/appmon/priv/start_info.html deleted file mode 100644 index 580319beb1..0000000000 --- a/lib/appmon/priv/start_info.html +++ /dev/null @@ -1,31 +0,0 @@ -<HTML> -<HEAD> -</HEAD> -<BODY BGCOLOR="#FFFFFF"> -<TABLE WIDTH=100% HEIGHT=100%> -<TR VALIGN="middle"> -<TD ALIGN="center"> - -<TABLE WIDTH="60%"> -<TR> -<TD ALIGN="center"> -<FONT SIZE=6>Welcome to the Web based User Interface to Appmon -</FONT></TD> -</TR> - -<TR> -<TD><BR><BR><BR><BR> -</TD> -</TR> - -<TR> -<TD ALIGN="center"> -</TD> -</TR> -</TABLE> - -</TD> -</TR> -</TABLE> -</BODY> -</HTML>
\ No newline at end of file diff --git a/lib/appmon/src/Makefile b/lib/appmon/src/Makefile deleted file mode 100644 index c1620bc37a..0000000000 --- a/lib/appmon/src/Makefile +++ /dev/null @@ -1,103 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1996-2013. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Application version -# ---------------------------------------------------- -include ../vsn.mk -VSN=$(APPMON_VSN) - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/appmon-$(VSN) - -# ---------------------------------------------------- -# Target Specs -# ---------------------------------------------------- - -MODULES= \ - appmon \ - appmon_a \ - appmon_dg \ - appmon_place \ - appmon_txt \ - appmon_lb \ - process_info \ - appmon_web - -# appmon_info \ Moved to runtime tools where it belongs - - -HRL_FILES= appmon_dg.hrl - -ERL_FILES= $(MODULES:%=%.erl) - -TARGET_FILES= $(MODULES:%=../ebin/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET) - -APP_FILE= appmon.app -APPUP_FILE= appmon.appup - -APP_SRC= $(APP_FILE).src -APPUP_SRC= $(APPUP_FILE).src - -APP_TARGET= ../ebin/$(APP_FILE) -APPUP_TARGET= ../ebin/$(APPUP_FILE) - -# ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- -ERL_COMPILE_FLAGS += +warn_obsolete_guard - -# ---------------------------------------------------- -# Targets -# ---------------------------------------------------- - -debug opt: $(TARGET_FILES) - -clean: - rm -f $(TARGET_FILES) - rm -f core - -docs: - -# ---------------------------------------------------- -# Special Build Targets -# ---------------------------------------------------- - -$(APP_TARGET): $(APP_SRC) ../vsn.mk - $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ - -$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk - $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_spec: opt - $(INSTALL_DIR) "$(RELSYSDIR)/src" - $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) "$(RELSYSDIR)/src" - $(INSTALL_DIR) "$(RELSYSDIR)/ebin" - $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin" - -release_docs_spec: - diff --git a/lib/appmon/src/appmon.app.src b/lib/appmon/src/appmon.app.src deleted file mode 100644 index aa6a08772e..0000000000 --- a/lib/appmon/src/appmon.app.src +++ /dev/null @@ -1,24 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -{application, appmon, - [{description, "DEVTOOLS CXC 138 16"}, - {vsn, "%VSN%"}, - {modules, [appmon, appmon_a, appmon_dg, %% appmon_info, moved to runtime tools - appmon_lb, appmon_place, appmon_txt,process_info,appmon_web]}, - {registered,[appmon, appmon_info, appmon_txt,webappmon_server,proc_info]}, - {applications, [kernel, stdlib]}]}. diff --git a/lib/appmon/src/appmon.appup.src b/lib/appmon/src/appmon.appup.src deleted file mode 100644 index 0d918b6081..0000000000 --- a/lib/appmon/src/appmon.appup.src +++ /dev/null @@ -1,18 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2001-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -{"%VSN%",[],[]}. diff --git a/lib/appmon/src/appmon.erl b/lib/appmon/src/appmon.erl deleted file mode 100644 index ba98a24400..0000000000 --- a/lib/appmon/src/appmon.erl +++ /dev/null @@ -1,1081 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(appmon). --behaviour(gen_server). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,1}}]). - -%%%--------------------------------------------------------------------- -%%% Appmon main module. -%%% Creates the main window and receives load and application -%%% information from all connected nodes. -%%%--------------------------------------------------------------------- - -%% External exports --export([start/0, stop/0]). - -%% gen_server callbacks --export([init/1, handle_cast/2, handle_info/2, terminate/2]). --export([handle_call/3, code_change/3]). % not used - -%% Canvas button data --record(canvasbutton, {text, ul, ll, rect, x, y, w, h}). - -%% Options - all the fields are GS radio buttons --record(options, {single, many, time, queue, prog, linear}). - -%% Main window data --record(win, {name, % atom() Monitored node - window, % gsobj() - wwindow, % int() Window width - hwindow, % int() Window height - options, % #options{} - canvas, % gsobj() - wcanvas, % int() Canvas width - hcanvas, % int() Canvas height - l1, l2, % gsobj() Canvas lines - leds, % [gsobj()] Load meter - nodelabel, % {gsobj(),gsobj()} - appobjs=[], % [gsobj()] Buttons etc. - nodemenu}). % gsobj() Node menu - -%% Node data --record(mnode, {name, % atom() Node name - status, % alive | dead - pid, % pid() - apps, % [{Pid,App,Descr}] - load}). % {Old, New} - -%% Internal state data --record(state, {gs, % pid() - wins=[], % [#win()] GUIs - window_mode, % single | many - load_mode1, % time | queue - load_mode2, % prog | linear - lbpid, % pid() - mnodes=[]}). % [#mnode{}] - -%%%--------------------------------------------------------------------- -%%% External exports -%%%--------------------------------------------------------------------- - -start() -> - gen_server:start({local, appmon}, ?MODULE, [], []). - -stop() -> - gen_server:cast(appmon, stop). - - -%%%--------------------------------------------------------------------- -%%% gen_server callbacks -%%%--------------------------------------------------------------------- - -%%---------------------------------------------------------------------- -%% Func: init/1 -%% Returns: {ok, State} | -%% {ok, State, Timeout} | -%% ignore | -%% {stop, Reason} -%%---------------------------------------------------------------------- -init([]) -> - process_flag(trap_exit, true), - - %% Subscribe to {nodeup,Node} and {nodedown,Node} messages - net_kernel:monitor_nodes(true), - - LbPid = appmon_lb:start(self ()), - - %% Check which remote nodes have appmon code available (OTP-4887) - NodesOk = lists:filter(fun(Node) -> check_node(Node) end, nodes()), - Nodes = [node()|NodesOk], - - %% Start monitoring the existing nodes - MNodes = mk_mnodes(Nodes, LbPid), - - %% Draw the main window - GS = gs:start([{kernel,true}]), - GUI = draw_win(GS, node()), - - %% Update the Nodes menu with all known nodes - lists:foreach(fun(Node) -> - display_addnode(GUI, Node) - end, - Nodes), - - %% Mark the default options as selected in the Options menu - display_setopt(GUI, single), - display_setopt(GUI, time), - display_setopt(GUI, prog), - - {ok, #state{gs=GS, wins=[GUI], - window_mode=single, load_mode1=time, load_mode2=prog, - lbpid=LbPid, mnodes=MNodes}}. - -check_node(Node) -> - case rpc:call(Node, code, which, [appmon]) of - File when is_list(File) -> - true; - _ -> % non_existing (| cover_compiled) - false - end. - -%%---------------------------------------------------------------------- -%% Func: handle_call/3 -%% Returns: {reply, Reply, State} | -%% {reply, Reply, State, Timeout} | -%% {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, Reply, State} | (terminate/2 is called) -%% {stop, Reason, State} (terminate/2 is called) -%%---------------------------------------------------------------------- -handle_call(norequest, _From, State) -> - {reply, null, State}. - -%%---------------------------------------------------------------------- -%% Func: handle_cast/2 -%% Returns: {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, State} (terminate/2 is called) -%%---------------------------------------------------------------------- -handle_cast(stop, State) -> - {stop, normal, State}. - -%%---------------------------------------------------------------------- -%% Func: handle_info/2 -%% Returns: {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, State} (terminate/2 is called) -%%---------------------------------------------------------------------- -%% Load information from a node -handle_info({delivery, _Serv, load, Node, Load}, State) -> - - %% Update node information - MNode = get_mnode(Node, State#state.mnodes), - MNode1 = MNode#mnode{load=Load}, - MNodes = replace_mnode(Node, MNode1, State#state.mnodes), - - %% If Node is currently displayed, update graphics - case get_win(Node, State#state.wins) of - {ok, GUI} -> - display_load(GUI, Load); - false -> - ignore - end, - - {noreply, State#state{mnodes=MNodes}}; - -%% Application information from a node -handle_info({delivery, _Serv, app_ctrl, Node, Apps}, State) -> - - %% Update node information - MNode = get_mnode(Node, State#state.mnodes), - MNode1 = MNode#mnode{apps=Apps}, - MNodes = replace_mnode(Node, MNode1, State#state.mnodes), - - %% If Node is currently displayed, update graphics - Wins = case get_win(Node, State#state.wins) of - {ok, GUI} -> - draw_clear(GUI), - GUI1 = draw_apps(GUI, Apps), - replace_win(Node, GUI1, State#state.wins); - false -> - State#state.wins - end, - - appmon_lb:add_apps (State#state.lbpid, Apps, Node), - {noreply, State#state{wins=Wins, mnodes=MNodes}}; - -handle_info({nodeup, Node}, State) -> - - %% First, make sure appmon code is available at remode node, - %% or the node should be ignored (OTP-3591) - case check_node(Node) of - true -> - - %% If this is a previously unknown node, update window's - %% 'Nodes' menu - case get_mnode(Node, State#state.mnodes) of - false -> - display_addnode(State#state.wins, Node); - _OldMnode -> - ignore - end, - - %% Update node information (=> state is automatically - %% changed to 'alive') - MNode = mk_mnode(Node, State#state.lbpid), - MNodes = replace_mnode(Node, MNode, State#state.mnodes), - - %% If Node is currently displayed, update graphics - case get_win(Node, State#state.wins) of - {ok, GUI} -> - display_nodeup(GUI, Node); - false -> - ignore - end, - - appmon_lb:update_status(State#state.lbpid, Node, alive), - {noreply, State#state{mnodes=MNodes}}; - - false -> - {noreply, State} - end; - -handle_info({nodedown, Node}, State) -> - - %% If this is a previously unknown node, ignore the message. - %% (The situation occurs when failing to connect to another node). - %% Otherwise, update the node information. - case get_mnode(Node, State#state.mnodes) of - false -> - {noreply, State}; - MNode -> - MNode1 = MNode#mnode{status=dead}, - MNodes = replace_mnode(Node, MNode1, State#state.mnodes), - - %% If Node is currently displayed, update graphics - Wins = case get_win(Node, State#state.wins) of - {ok, GUI} -> - display_nodedown(GUI), - GUI1 = draw_clear(GUI), - replace_win(Node, GUI1, State#state.wins); - false -> - State#state.wins - end, - - appmon_lb:remove_node(State#state.lbpid, Node), - {noreply, State#state{wins=Wins, mnodes=MNodes}} - end; - -%% Application 'button' events -handle_info({gs, _Obj, buttonpress, Data, _Arg}, State) -> - {canvasbutton, CBtn, _App} = Data, - press(CBtn), - {noreply, State}; -handle_info({gs, _Obj, buttonrelease, Data, [_,X,Y|_]}, State) -> - {canvasbutton, CBtn, {application, App, Node}} = Data, - release(CBtn), - - %% Check that mouse button was released over the button! - L = CBtn#canvasbutton.x, R = L + CBtn#canvasbutton.w, - T = CBtn#canvasbutton.y, B = T + CBtn#canvasbutton.h, - if - X>L, X<R, Y>T, Y<B -> - MNode = get_mnode(Node, State#state.mnodes), - {value, {Pid, _App, _Descr}} = - lists:keysearch(App, 2, MNode#mnode.apps), - appmon_a:start(Node, App, Pid); - true -> - ignore - end, - {noreply, State}; - -handle_info({gs, _Button, click, Data, _Arg}, State) -> - ThisNode = node(), - case Data of - - %% File menu item - listbox -> - appmon_lb:open_win(State#state.lbpid, - parse_nodes(State#state.mnodes)), - {noreply, State}; - {close, WinObj} -> - {ok, GUI} = get_win2(WinObj, State#state.wins), - gs:destroy(WinObj), - - %% Terminate if this was the only open window - case remove_win(GUI#win.name, State#state.wins) of - [] -> - {stop, normal, State}; - Wins -> - {noreply, State#state{wins=Wins}} - end; - exit -> - {stop, normal, State}; - - %% Actions menu item - {action, Action, WinObj} -> - {ok, GUI} = get_win2(WinObj, State#state.wins), - Node = GUI#win.name, - - if - Node==ThisNode -> - case Action of - ping -> - %% Ignore - makes no sense to ping yourself - ignore; - _ -> % reboot | restart | stop - apply(init, Action, []) - end; - - Node/=ThisNode -> - case Action of - ping -> - net_adm:ping(Node); - _ -> % reboot | restart | stop - rpc:cast(Node, init, Action, []) - end - end, - {noreply, State}; - - %% Options menu item - {window_mode, Mode} -> - - %% Update windows so they all show the same options - lists:foreach(fun(GUI) -> - display_setopt(GUI, Mode) - end, - State#state.wins), - {noreply, State#state{window_mode=Mode}}; - - {option, Tag, Option} -> - - %% Update windows so they all show the same options - lists:foreach(fun(GUI) -> - display_setopt(GUI, Tag) - end, - State#state.wins), - - %% Update all appmon_info processes about which kind of - %% load data is desired - lists:foreach(fun(MNode) -> - appmon_info:load(MNode#mnode.pid, - MNode#mnode.name, - true, - Option) - end, - State#state.mnodes), - - if - Tag==time; Tag==queue -> - {noreply, State#state{load_mode1=Tag}}; - Tag==prog; Tag==linear -> - {noreply, State#state{load_mode2=Tag}} - end; - - %% Nodes menu item - {node, Node, WinObj} -> - - %% Check first if this window is already displayed - case get_win(Node, State#state.wins) of - {ok, GUI} -> - - %% Node is already displayed, raise its window - gs:config(GUI#win.window, raise), - - {noreply, State}; - - %% Node is not displayed - false -> - - %% Redraw existing window or create a new window - %% depending on window mode - case State#state.window_mode of - - single -> - {ok, GUI} = - get_win2(WinObj, State#state.wins), - - %% Clear window and correct the node name - draw_clear(GUI), - GUI1 = draw_nodename(GUI, Node), - - %% Update window with the correct node name - %% and the applications running at the node - MNode = get_mnode(Node, State#state.mnodes), - GUI2 = case MNode#mnode.status of - dead -> - display_nodedown(GUI1), - GUI1; - alive -> - display_nodeup(GUI1, Node), - draw_apps(GUI1, - MNode#mnode.apps) - end, - Wins = replace_win(GUI#win.name, GUI2, - State#state.wins), - - {noreply, State#state{wins=Wins}}; - - many -> - GUI = draw_win(State#state.gs, Node), - - %% Update Nodes menu with all known nodes - - %% use MNodes to get them in the right order - lists:foreach(fun(MNode) -> - Name = - MNode#mnode.name, - display_addnode(GUI, - Name) - end, - State#state.mnodes), - - %% Mark selected options in the Options menu - display_setopt(GUI, many), - display_setopt(GUI, State#state.load_mode1), - display_setopt(GUI, State#state.load_mode2), - - %% Add the applications running at the node - MNode = get_mnode(Node, State#state.mnodes), - - GUI1 = case MNode#mnode.status of - dead -> - display_nodedown(GUI), - GUI; - alive -> - display_nodeup(GUI, Node), - draw_apps(GUI, - MNode#mnode.apps) - end, - Wins = [GUI1|State#state.wins], - - {noreply, State#state{wins=Wins}} - end - end; - - %% Help menu = Help button - help -> - HelpFile = filename:join([code:lib_dir(appmon), - "doc", "html", "part_frame.html"]), - case State#state.wins of - [Win] -> - tool_utils:open_help(Win#win.window, HelpFile); - _ -> - tool_utils:open_help(State#state.gs, HelpFile) - end, - {noreply, State}; - - _Other -> - {noreply, State} - end; -handle_info({gs, WinObj, configure, _, [WWindow, HWindow|_]}, State) -> - {ok, GUI} = get_win2(WinObj, State#state.wins), - GUI1 = draw_resize(GUI, WWindow, HWindow), - display_scrollbar(GUI1), - Wins = replace_win(GUI#win.name, GUI1, State#state.wins), - {noreply, State#state{wins=Wins}}; -handle_info({gs, WinObj, destroy, _, _}, State) -> % OTP-1179 - {ok, GUI} = get_win2(WinObj, State#state.wins), - - %% Terminate if this was the only open window - case remove_win(GUI#win.name, State#state.wins) of - [] -> - {stop, normal, State}; - Wins -> - {noreply, State#state{wins=Wins}} - end; - -handle_info(stop, State) -> - {stop, normal, State}; -handle_info({'EXIT', Pid, Reason}, State) -> - case Reason of - shutdown -> - %% Appmon is being asked to shut down, eg during reboot - {stop, Reason, State}; - _ -> - case State#state.gs of - - %% GS exited, kill appmon - {0, Pid} -> - {stop, normal, State}; - - _ -> - {noreply, State} - end - end; -handle_info(_Info, State) -> - {noreply, State}. - -%%---------------------------------------------------------------------- -%% Func: terminate/2 -%% Purpose: Shutdown the server -%% Returns: any (ignored by gen_server) -%%---------------------------------------------------------------------- -terminate(_Reason, State) -> - bcast(State#state.mnodes, {kill}), - appmon_lb:stop(State#state.lbpid), - ok. - -%%---------------------------------------------------------------------- -%% Func: code_change/3 -%% Purpose: Convert process state when code is changed -%% Returns: {ok, NewState} -%%---------------------------------------------------------------------- -code_change(_OldVsn, State, _Extra) -> - {ok, State}. - - -%%%--------------------------------------------------------------------- -%%% Internal functions -%%%--------------------------------------------------------------------- - -%%---------------------------------------------------------------------- -%% MNode manipulating functions -%%---------------------------------------------------------------------- - -%% mk_mnodes(Nodes, LbPid) -> MNodes -%% Nodes -> [atom()] -%% LbPid -> pid() -%% MNodes -> [#mnode{}] -mk_mnodes([Node|Nodes], LbPid) -> - [mk_mnode(Node, LbPid) | mk_mnodes(Nodes, LbPid)]; -mk_mnodes([], _LbPid) -> - []. - -mk_mnode(Node, LbPid) -> - - %% Create an appmon process at the node - {ok, Pid} = appmon_info:start_link(Node, self(), []), - - appmon_lb:add_node(LbPid, Node), - appmon_info:load(Pid, Node, true, [{timeout,1000}]), - appmon_info:app_ctrl(Pid, Node, true, []), - - #mnode{name=Node, status=alive, pid=Pid}. - -%% get_mnode(Node, MNodes) -> MNode | false -%% Node -> atom() -%% MNodes -> [#mnode{}] -%% MNode -> #mnode{} -get_mnode(Node, MNodes) -> - case lists:keysearch(Node, #mnode.name, MNodes) of - {value, MNode} -> - MNode; - false -> - false - end. - -%% replace_mnode(Node, MNode, MNodes1) -> Mnodes2 -%% Node -> atom() -%% MNode -> #mnode{} -%% MNodes1 -> MNodes2 -> [#mnode{}] -%% Replaces, or adds if previously not included, the mnode with name -%% Node in MNodes1 with MNode. -replace_mnode(Node, MNode, [#mnode{name=Node} | MNodes]) -> - [MNode | MNodes]; -replace_mnode(Node, MNode, [MNode2 | MNodes]) -> - [MNode2 | replace_mnode(Node, MNode, MNodes)]; -replace_mnode(_Node, MNode, []) -> - [MNode]. - - -%%---------------------------------------------------------------------- -%% GUI list manipulating functions -%%---------------------------------------------------------------------- - -%% get_win(Node, Wins) -> Win -%% Node -> atom() -%% Wins -> [#win{}] -%% Win -> #win{} -get_win(Node, Wins) -> - case lists:keysearch(Node, #win.name, Wins) of - {value, Win} -> - {ok, Win}; - false -> - false - end. - -%% get_win2(WinObj, Wins) -> Win -%% Window -> gsobj() -%% Wins -> [#win{}] -%% Win -> #win{} -get_win2(WinObj, Wins) -> - case lists:keysearch(WinObj, #win.window, Wins) of - {value, Win} -> - {ok, Win}; - false -> - false - end. - -%% replace_win(Node, Win, Wins) -> Wins2 -%% Node -> atom() -%% Win -> #win{} -%% Wins -> Wins2 -> [#win{}] -replace_win(Node, Win, Wins) -> - lists:keyreplace(Node, #win.name, Wins, Win). - -%% remove_win(Node, Wins) -> Wins2 -%% Node -> atom() -%% Wins -> Wins2 -> [#win{}] -remove_win(Node, Wins) -> - lists:keydelete(Node, #win.name, Wins). - - - - -%%---------------------------------------------------------------------- -%% GUI manipulating functions -%%---------------------------------------------------------------------- --define(PAD, 10). % Pad between objects --define(PAD2, 4*?PAD). % Pad betw. node lbl and app - --define(hMENUBAR, 25). % Note: Hardwired in Tcl/Tk - --define(xNODELBL, 60). % Node label --define(yNODELBL, 35). --define(hNODELBL, 20). - --define(xMETER, 5). % Meter --define(yMETER, ?yNODELBL). --define(wMETER, 20). --define(hMETER, ?hNODELBL + ?PAD + ?PAD2 + ?hBTN). --define(LEDCOUNT, 16). - --define(xBTN, ?xNODELBL). % Application buttons --define(yBTN, ?yNODELBL + ?hNODELBL + ?PAD + ?PAD2). --define(wBTN, 70). % min width --define(hBTN, 20). - --define(wCANVAS, 470 + ?wMETER + 3*?PAD). % Canvas --define(hCANVAS, ?yNODELBL + ?hNODELBL + ?PAD + ?PAD2 + ?hBTN + 2*?PAD). - --define(wWIN, ?wCANVAS). % Window --define(hWIN, ?hMENUBAR + ?hCANVAS). - -%%--Main window--------------------------------------------------------- - -draw_win(GS, Node) -> - - %% Main window - NodeStr = atom_to_list(Node), - Win = gs:create(window, GS, [{title, - "APPMON: Overview on " ++ NodeStr}, - {width, ?wWIN}, {height, ?hWIN}, - {configure, true}]), - Canvas = gs:create(canvas, Win, [{x, 0}, {y, ?hMENUBAR}, - {width, ?wCANVAS}, - {height, ?hCANVAS}]), - L1 = gs:create(line, Canvas, [{coords, - [{0,?yNODELBL-?PAD}, - {?wCANVAS,?yNODELBL-?PAD}]}]), - L2 = gs:create(line, Canvas, [{coords, - [{0,?hCANVAS-?PAD}, - {?wCANVAS,?hCANVAS-?PAD}]}]), - - %% Standard buttons - MenuBar = gs:create(menubar, Win, [{height, ?hMENUBAR}]), - - FileMenuBtn = gs:create(menubutton, MenuBar, - [{label, {text,"File"}}]), - FileMenu = gs:create(menu, FileMenuBtn, []), - gs:create(menuitem, FileMenu, [{label, {text,"Show List Box..."}}, - {data, listbox}]), - gs:create(menuitem, FileMenu, [{label, {text, "Close"}}, - {data, {close, Win}}]), - gs:create(menuitem, FileMenu, [{itemtype, separator}]), - gs:create(menuitem, FileMenu, [{label, {text, "Exit"}}, - {data, exit}]), - - ActionMenuBtn = gs:create(menubutton, MenuBar, - [{label,{text,"Actions"}}]), - ActionMenu = gs:create(menu, ActionMenuBtn, []), - gs:create(menuitem, ActionMenu, [{label, {text,"Reboot"}}, - {data, {action, reboot, Win}}]), - gs:create(menuitem, ActionMenu, [{label, {text,"Restart"}}, - {data, {action, restart, Win}}]), - gs:create(menuitem, ActionMenu, [{label, {text,"Stop"}}, - {data, {action, stop, Win}}]), - gs:create(menuitem, ActionMenu, [{label, {text,"Ping"}}, - {data, {action, ping, Win}}]), - - OptMenuBtn = gs:create(menubutton, MenuBar, - [{label, {text,"Options"}}]), - OptMenu = gs:create(menu, OptMenuBtn, []), - G0 = now(), % Group identity unique per window! - SMI = gs:create(menuitem, OptMenu, [{label, {text,"One window"}}, - {itemtype, radio}, {group, G0}, - {data, {window_mode, single}}]), - MMI = gs:create(menuitem, OptMenu, [{label, {text,"Many windows"}}, - {itemtype, radio}, {group, G0}, - {data, {window_mode, many}}]), - gs:create(menuitem, OptMenu, [{itemtype, separator}]), - G1 = now(), - TMI = gs:create(menuitem, OptMenu, [{label, {text,"Load: time"}}, - {itemtype, radio}, {group, G1}, - {data, - {option, time, - [{load_method,time}]}}]), - QMI = gs:create(menuitem, OptMenu, [{label, {text,"Load: queue"}}, - {itemtype, radio}, {group, G1}, - {data, - {option, queue, - [{load_method,queue}]}}]), - G2 = now(), - PMI = gs:create(menuitem, OptMenu, - [{label, {text,"Load: progressive"}}, - {itemtype, radio}, {group, G2}, - {data, {option, prog, [{load_scale,prog}]}}]), - LMI = gs:create(menuitem, OptMenu, [{label, {text,"Load: linear"}}, - {itemtype, radio}, {group, G2}, - {data, - {option, linear, - [{load_scale,linear}]}}]), - - NodeMenuBtn = gs:create(menubutton, MenuBar, - [{label, {text,"Nodes"}}]), - NodeMenu = gs:create(menu, NodeMenuBtn, []), - - HelpMenuBtn = gs:create(menubutton, MenuBar, - [{label, {text,"Help"}}, {side, right}]), - HelpMenu = gs:create(menu, HelpMenuBtn, []), - gs:create(menuitem, HelpMenu, [{label, {text,"Help"}}, - {data, help}]), - - %% Meter - HLed = trunc((?hMETER)/(?LEDCOUNT)), - Leds = draw_leds(?LEDCOUNT, Canvas, ?yMETER, HLed, []), - leds_down(Leds, ?LEDCOUNT, 0), - gs:create(text, Canvas, [{coords, - [{?xMETER, ?yMETER+HLed*?LEDCOUNT}]}, - {anchor, nw}, - {font, {screen,8}}, - {text, "Load"}]), - gs:create(text, Canvas, [{coords, [{?xMETER+?wMETER, ?yMETER}]}, - {anchor, nw}, - {font, {screen,8}}, - {text, "Hi"}]), - gs:create(text, Canvas, [{coords, [{?xMETER+?wMETER, - ?yMETER+HLed*?LEDCOUNT}]}, - {anchor, w}, - {font, {screen,8}}, - {text, "Lo"}]), - - %% Node label - WNodeLbl = 8*length(NodeStr)+10, - NLRect = gs:create(rectangle, Canvas, - [{coords, [{?xNODELBL,?yNODELBL}, - {?xNODELBL+WNodeLbl, - ?yNODELBL+?hNODELBL}]}, - {fill, black}]), - Xc = ?xNODELBL + round(WNodeLbl/2), - Yc = ?yNODELBL + round(?hNODELBL/2), - NLText = gs:create(text, Canvas, [{text, NodeStr}, - {fg, {250,235,215}}, - {coords, [{Xc,Yc}]}, - {anchor, c}]), - NodeLbl = {NLRect, NLText}, - - gs:config(Win, {map, true}), - #win{name=Node, - window=Win, wwindow=?wWIN, hwindow=?hCANVAS, - options=#options{single=SMI, many=MMI, - time=TMI, queue=QMI, prog=PMI, linear=LMI}, - canvas=Canvas, wcanvas=?wCANVAS, hcanvas=?hCANVAS, - l1=L1, l2=L2, leds=Leds, nodelabel=NodeLbl, nodemenu=NodeMenu}. - -draw_leds(N, Canvas, Y, HLed, Leds) when N>0 -> - Led = gs:create(rectangle, Canvas, - [{coords, - [{?xMETER,Y}, {?xMETER+?wMETER,Y+HLed}]}]), - draw_leds(N-1, Canvas, Y+HLed, HLed, [Led | Leds]); -draw_leds(0, _Canvas, _Y, _HLed, Leds) -> - Leds. - -%%--Draw functions------------------------------------------------------ -%% Functions that modify the GUI and its data (win{}) - -%% Display the node name in the window title -%% (The name in the node label is changed by display_nodeup|nodedown) -%% Used when a changing the node to display -draw_nodename(GUI, Node) -> - NodeStr = atom_to_list(Node), - gs:config(GUI#win.window, - {title, "APPMON: Overview on " ++ NodeStr}), - GUI#win{name=Node}. - -%% Resize the canvas (when the window has been resized) -draw_resize(GUI, W, H) -> - Hc = H - ?hMENUBAR, - gs:config(GUI#win.canvas, [{width, W}, {height, Hc}]), - Yline1 = ?yNODELBL-?PAD, - Yline2 = ?hCANVAS-?PAD, - gs:config(GUI#win.l1, [{coords, [{0,Yline1},{W,Yline1}]}]), - gs:config(GUI#win.l2, [{coords, [{0,Yline2},{W,Yline2}]}]), - GUI#win{wwindow=W, hwindow=Hc}. - -%% Clear the GUI from applications and connecting lines -draw_clear(GUI) -> - draw_clear2(GUI#win.appobjs), - gs:config(GUI#win.canvas, [{hscroll, false}]), - GUI#win{appobjs=[]}. -draw_clear2([CBtn | AppObjs]) when is_record(CBtn, canvasbutton) -> - gs:destroy(CBtn#canvasbutton.text), - gs:destroy(CBtn#canvasbutton.ul), - gs:destroy(CBtn#canvasbutton.ll), - gs:destroy(CBtn#canvasbutton.rect), - draw_clear2(AppObjs); -draw_clear2([GSObj | AppObjs]) -> - gs:destroy(GSObj), - draw_clear2(AppObjs); -draw_clear2([]) -> - ignore. - -%% Display the applications, which are a list of tuples: {Pid,App,Descr} -%% Display them in the reversed order to get them chronologically -%% from left to right. -draw_apps(GUI, Apps) -> - {AppObjs, WCanvas} = draw_apps(GUI, lists:reverse(Apps), ?xNODELBL, - undefined, 0, []), - NewGUI = GUI#win{wcanvas=WCanvas, appobjs=AppObjs}, - display_scrollbar(NewGUI), - NewGUI. - -draw_apps(GUI, [App | Apps], X, Lx0, N, GSObjs) -> - - %% Some necessary data - {_Pid, AppName, _Descr} = App, - Text = atom_to_list(AppName), - Width = erlang:max(8*length(Text)+10, ?wBTN), - - %% Connect the application to the node label with a line - %% Lx0 = leftmost X coordinate (above previous application button) - %% Lx = X coordinate, Ly1, Ly2 = top and bottom Y coordinates - Lx = X + trunc(Width/2), - Line = case N of - %% First (leftmost application) - draw a vertical line - %% between the node label and application button - 0 -> - Ly1 = ?yNODELBL + ?hNODELBL +?PAD, - Ly2 = Ly1 + ?PAD2, - gs:create(line, GUI#win.canvas, - [{coords, [{Lx, Ly1}, {Lx, Ly2}]}]); - %% Nth application, N>1 - draw a horizontal line from - %% line connecting to the previous application button, - %% to above this application button, then vertically down - %% to the application button - _ -> - Ly1 = ?yNODELBL + ?hNODELBL + ?PAD + ?PAD2/2, - Ly2 = Ly1 + ?PAD2/2, - gs:create(line, GUI#win.canvas, - [{coords, [{Lx0, Ly1}, {Lx, Ly1}, - {Lx, Ly2}]}]) - end, - - %% The application is represented using a 'canvasbutton' - Data = {application, AppName, GUI#win.name}, - AppBtn = canvasbutton(GUI#win.canvas, Text, X, ?yBTN, Width, ?hBTN, - Data), - - draw_apps(GUI, Apps, X+Width+?PAD, Lx, N+1, [AppBtn, Line|GSObjs]); -draw_apps(_GUI, [], X, _N, _Lx0, GSObjs) -> - {GSObjs, X}. - -%%--Display functions--------------------------------------------------- -%% Functions that modify the GUI but not its data - -%% Add a new node to the Nodes menu -%% Used when a new node has connected -display_addnode([GUI|GUIs], Node) -> - display_addnode(GUI, Node), - display_addnode(GUIs, Node); -display_addnode([], _Node) -> - ignore; -display_addnode(GUI, Node) -> - Txt = "Show " ++ atom_to_list(Node), - gs:create(menuitem, GUI#win.nodemenu, - [{label, {text,Txt}}, - {data, {node, Node, GUI#win.window}}]). - -%% Show that a node has come back up -display_nodeup(GUI, Node) -> - {Rect, Text} = GUI#win.nodelabel, - - %% Check coordinates for the rectangle and compute the new width - [{L, T}, {_R, B}] = gs:read(Rect, coords), - NodeStr = atom_to_list(Node), - W = 8*length(NodeStr)+10, - - gs:config(Rect, [{coords, [{L, T}, {L+W, B}]}, {fill, black}]), - gs:config(Text, [{text, NodeStr}, {fg, {250,235,215}}, - {coords, - [{L+round(W/2), T+round((?hNODELBL)/2)}]}]). - -%% Show that a node has gone down -display_nodedown(GUI) -> - {Rect, Text} = GUI#win.nodelabel, - - [{L, T}, {_R, B}] = gs:read(Rect, coords), - gs:config(Rect, [{coords, [{L, T}, {L+114, B}]}, {fill, gray}]), - gs:config(Text, [{text, "No connection"}, {fg, black}, - {coords, [{L+57, T+round((?hNODELBL)/2)}]}]). - -%% Add/remove scrollbars as necessary -display_scrollbar(GUI) -> - - WWindow = GUI#win.wwindow, - HWindow = GUI#win.hwindow, - WCanvas = GUI#win.wcanvas, - HCanvas = GUI#win.hcanvas, - if - WCanvas>WWindow -> - gs:config(GUI#win.canvas, - [{hscroll, bottom}, - {scrollregion,{0,0,WCanvas,HCanvas}}]); - true -> - gs:config(GUI#win.canvas, [{hscroll, false}]) - end, - if - HCanvas>HWindow -> - gs:config(GUI#win.canvas, - [{vscroll, left}, - {scrollregion,{0,0,WCanvas,HCanvas}}]); - - true -> - gs:config(GUI#win.canvas, [{vscroll, false}]) - end. - -%% Select option radio buttons -display_setopt(GUI, Option) -> - gs:config(radiobutton(GUI, Option), {select,true}). - -radiobutton(GUI, single) -> (GUI#win.options)#options.single; -radiobutton(GUI, many) -> (GUI#win.options)#options.many; -radiobutton(GUI, time) -> (GUI#win.options)#options.time; -radiobutton(GUI, queue) -> (GUI#win.options)#options.queue; -radiobutton(GUI, prog) -> (GUI#win.options)#options.prog; -radiobutton(GUI, linear) -> (GUI#win.options)#options.linear. - -%% Display load -%% Used when load information is received from the displayed node --define(highloadfg, {255,99,71}). --define(midloadfg, yellow). --define(lowloadfg, green). --define(highloadbg, {140,157,178}). --define(midloadbg, ?highloadbg). --define(lowloadbg, ?highloadbg). - -display_load(GUI, {Old, New}) -> - if - Old == New -> - true; - Old > New -> - leds_down(GUI#win.leds, Old, New); - true -> - leds_up(GUI#win.leds, Old, New) - end. - -leds_down(_Leds, Old, New) when Old == New -> - done; -leds_down(Leds, Old, New) when Old > New -> - reset_led(Leds, Old), - leds_down(Leds, Old-1, New). -leds_up(_Leds, Old, New) when Old == New -> - done; -leds_up(Leds, Old, New) when Old < New -> - set_led(Leds, Old), - leds_up(Leds, Old+1, New). - -led_on_col(N) when N > 13 -> ?highloadfg; -led_on_col(N) when N > 9 -> ?midloadfg; -led_on_col(_) -> ?lowloadfg. - -led_off_col(N) when N > 13 -> ?highloadbg; -led_off_col(N) when N > 9 -> ?midloadbg; -led_off_col(_) -> ?lowloadbg. - -reset_led(_Leds, 0) -> ok; -reset_led(Leds, N) -> - gs:config(lists:nth(N, Leds), [{fill, led_off_col(N)}]). - -set_led(_Leds, 0) -> ok; -set_led(Leds, N) -> - gs:config(lists:nth(N, Leds), [{fill, led_on_col(N)}]). - -%%---------------------------------------------------------------------- -%% Utilities -%%---------------------------------------------------------------------- - -bcast(MNodes, Msg) -> - lists:foreach(fun(MNode) -> - case MNode#mnode.status of - alive -> - MNode#mnode.pid ! Msg; - dead -> - ignore - end - end, - MNodes). - -%% parse_nodes(MNodes) -> NodeApps -%% MNodes -> [#mnode{}] -%% NodeApps -> [{Node, Status, Apps}] -%% Node -> atom() -%% Status -> alive | dead -%% Apps -> [{Pid, App}] -%% Pid -> pid() -%% App -> atom() -parse_nodes(MNodes) -> - parse_nodes(MNodes, []). -parse_nodes([MNode|MNodes], NodeApps) -> - Apps = parse_apps(MNode#mnode.apps, []), - parse_nodes(MNodes, - [{MNode#mnode.name,MNode#mnode.status,Apps}|NodeApps]); -parse_nodes([], NodeApps) -> - NodeApps. - -parse_apps([{Pid, App, _Descr}|Rest], Apps) -> - parse_apps(Rest, [{Pid, App}|Apps]); -parse_apps([], Apps) -> - Apps. - -%%---------------------------------------------------------------------- -%% Canvas buttons -%%---------------------------------------------------------------------- - -canvasbutton(Canvas, Text, X, Y, W, H, Data) -> - - %% Draw a rectangle (for event catching) - Rect = gs:create(rectangle, Canvas, [{coords, [{X,Y}, {X+W,Y+H}]}, - {fill, gs:read(Canvas, bg)}, - {buttonpress, true}, - {buttonrelease, true}]), - - %% Make the rectangle area look like a 3D button by using lines - Ul = gs:create(line, Canvas, [{coords, [{X,Y+H},{X,Y},{X+W,Y}]}, - {fg, white}, {width, 2}]), - Ll = gs:create(line, Canvas, [{coords, [{X,Y+H},{X+W,Y+H},{X+W,Y}]}, - {fg, {87,87,87}}, {width, 2}]), - - %% Write the text in the middle - Xc = X + round(W/2), - Yc = Y + round(H/2), - T = gs:create(text, Canvas, [{text, Text}, {coords, [{Xc,Yc}]}, - {anchor, c}, - {buttonpress, true}, - {buttonrelease, true}]), - - %% Create the canvasbutton object - CBtn = #canvasbutton{text=T, ul=Ul, ll=Ll, rect=Rect, - x=X, y=Y, w=W, h=H}, - - %% Configure the data - gs:config(T, {data, {canvasbutton, CBtn, Data}}), - gs:config(Rect, {data, {canvasbutton, CBtn, Data}}), - - CBtn. - -press(Canvasbutton) -> - gs:config(Canvasbutton#canvasbutton.ul, {fg, {87,87,87}}), - gs:config(Canvasbutton#canvasbutton.ll, {fg, white}). - -release(Canvasbutton) -> - gs:config(Canvasbutton#canvasbutton.ul, {fg, white}), - gs:config(Canvasbutton#canvasbutton.ll, {fg, {87,87,87}}). diff --git a/lib/appmon/src/appmon_a.erl b/lib/appmon/src/appmon_a.erl deleted file mode 100644 index 6838a7a275..0000000000 --- a/lib/appmon/src/appmon_a.erl +++ /dev/null @@ -1,1122 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(appmon_a). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,1}}]). - -%%---------------------------------------------------------------------- -%% -%% Monitors an application, i.e its supervision tree. -%% -%%---------------------------------------------------------------------- -%% -%% -%% INTRODUCTION -%% ------------ -%% -%% This file contains a description of the files involved -%% and the communication between the appmon_a display -%% manager and the appmon_a2 information gatherer. Further -%% information on the placement algorithm can be found in -%% the place.erl file. -%% -%% -%% FILES -%% ----- -%% -%% The supervision tree graphical software consists of -%% the following files: -%% -%% appmon_a Gen server driving the process display window. -%% Responsible for assigning gs identifiers to all -%% processes and process link -%% appmon_a2 The process information gathering routines. -%% Works by following the process links from application -%% master once every second -%% dg The process database is implemented as a shared -%% digraph (see manual pages for digraph) and this is -%% the routines handling this digraph. Since the digraph -%% is shared appmon_a2 will put some info into it that the -%% appmon_a later will modify. The structures used are -%% described in dg.hrl -%% place Places a tree, decides the x and y coordinates (not -%% necessarily corresponding to window coordinates) of -%% processes (or vertices to be specific). Note that -%% special routines are used to transform the possibly -%% cyclic digraph into a strict tree before trying to -%% place it. -%% -%% -%% -%% IMPLEMENTATION DETAIL -%% --------------------- -%% -%% The appmon_a module will follow links between processes, -%% starting with the application master. A unique -%% reference is used to prevent infinite recursion. Note -%% that this process and link gathering is done in the -%% live digraph so that already known processes are -%% updated with the reference and new ones are added to -%% the digraph. After all processes and links have been -%% added or updated a search is made for those processes -%% and links that have an old reference. These are those -%% processes and links that are not present in the -%% application any more. Those are extracted from the -%% digraph and then deleted and the extracts are then -%% used (by appmon_a) to delete the appropriate gs -%% objects. The responsibilities of appmon_a is thus 1) add -%% all new processes and links to the digraph and 2) make -%% a list of all those objects from the digraph that have -%% been deleted. -%% -%% When appmon_a2 has gathered all necessary information it -%% notifies the appmon_a display manager. Note that this is -%% implemented as a call (as opposed to a cast) to -%% prevent appmon_a2 from changing the digraph while appmon_a -%% uses it. appmon_a places all processes using the place -%% module. place will place the processes in the x y -%% planes, hopefully in a nice way, re-forming the -%% digraph during the process into a strict tree using -%% some simple heuristics, some links that makes the -%% graph cyclic will be considered secondary and later -%% coloured red. Note that the process links are not -%% placed since their coordinates are those of the -%% processes that they are links between. The place -%% module is only concerned at a fairly high level of -%% abstraction. Currently its x coordinates are used as -%% real coordinates while the y coordinates must be -%% scaled to correct values, thus the x plane is -%% continous and the y plane is disctrete. -%% -%% Having placed processes the new ones are drawn on the -%% display along with all new process links, then all -%% processes and process links are moved to their -%% possibly new positions. The place module is not -%% sensitive to changes in position and therefore has no -%% concept of which nodes will have to be moved. hence -%% all nodes are moved (but most of them probably to the -%% same position as before) -%% -%% -%% -%% -%%---------------------------------------------------------------------- - - - --export([start/2, start/3, stop/0]). - - --record(astate, {app, name, client, digraph}). - --import(lists, [foreach/2]). - -%% gen server stuff --behaviour(gen_server). --export([init/1, handle_cast/2, handle_info/2, terminate/2]). --export([handle_call/3, code_change/3]). - - --define(APPSPACE, 10). % The space between apps --define(NODEAREA_H, 90). % The height of a node --define(BUTTAREA_H, 80). % The button area height --define(APPBUTT_H, 20). % Height of appl button --define(EDITORW, 260). - --define(MAXWIDTH, 800). --define(MINWIDTH, 382). --define(MAXHEIGHT, 450). --define(MINHEIGHT, 325). - --define(SUPVIEWTXT, "Sup. view"). --define(PROCVIEWTXT, "Proc. view"). --define(CLOSETXT, "Close"). --define(REFRESHTXT, "Refresh"). --define(SAVEOPTSTXT, "Save options"). --define(HELPTXT, "Help"). - --define(CHARWIDTH, 7). %Should use GS primitives - --define( darkkhaki, {189, 183, 107}). --define( palegoldenrod, {238, 232, 170}). --define( peachpuff4, {139, 119, 101}). --define( red, red). --define( darkgrey, {169, 169, 169}). --define( lightgrey, {211, 211, 211}). --define( royalblue, {65, 105, 225}). --define( aquamarine4, {69, 139, 116}). --define( palegreen4, {84, 139, 84}). --define( darkseagreen, {105, 139, 105}). --define( f_line_col, {150, 150, 255}). - - --include("appmon_dg.hrl"). - - -%%------------------------------------------------------------ -%%------------------------------------------------------------ - - -start(NodeName, AppName) -> - gen_server:start_link(?MODULE, {NodeName, AppName, AppName}, []). - -start(NodeName, AppName, AppId) -> - gen_server:start_link(?MODULE, {NodeName, AppName, AppId}, []). - - -stop() -> - ok. - - - -%%------------------------------------------------------------ -%% Public interface - - -%%------------------------------------------------------------ -%% Administration - -%% AppName is the name of the application, usually an atom like sasl -%% or kernel, AppId is the application pid or the application name, -%% either goes. -init({NodeName, AppName, AppId}) -> - process_flag(trap_exit, true), - {ok, Client} = appmon_info:start_link(NodeName, self(), []), - init_ref(), - init_foreign_places(), - DG = digraph:new([cyclic, private]), - State = #astate{app=AppId, name=AppName, client=Client, digraph=DG}, - refresh(State), - setup_base_win(NodeName, AppName), - {ok, State}. - -terminate(_Reason, _State) -> - ok. - -code_change(_OldVsn, State, _Extra) -> - {ok, State}. - -handle_call(norequest, _From, State) -> - {reply, null, State}. - -%%------------------------------------------------------------ -%% handle casts - -handle_cast({ping, _Node, _From}, State) -> - {noreply, State}; -handle_cast(_Other, State) -> - {noreply, State}. - - - -%%------------------------------------------------------------ -%% handle info - -handle_info({gs, _, click, _, [?CLOSETXT|_]}, State) -> - {stop, normal, State}; -handle_info({gs, _, destroy, _, _}, State) -> - {stop, normal, State}; -handle_info({gs, _, click, _, [?REFRESHTXT|_]}, State) -> - refresh(State), - {noreply, State}; -handle_info({gs, _, click, _, [?HELPTXT|_]}, State) -> - HelpFile = filename:join([code:lib_dir(appmon), - "doc", "html", "part_frame.html"]), - tool_utils:open_help(win(), HelpFile), - {noreply, State}; -handle_info({gs, Id, click, {mode, Mode}, _}, State) -> - %%io:format("handle_info: Setting mode: ~p~n", [Mode]), - set_mode(Id, Mode), - {noreply, State}; -handle_info({gs, _, click, _, [?SUPVIEWTXT|_]}, State) -> - refresh(State, [{info_type, sup}]), - {noreply, State}; -handle_info({gs, _, click, _, [?PROCVIEWTXT|_]}, State) -> - refresh(State, [{info_type, link}]), - {noreply, State}; -handle_info({gs, Id, buttonpress, _,[1, X, Y|_]}, State) -> - %%io:format("Id clicked: ~p~n", [gs:read(Id, {find, {X, Y}})]), - catch find_pid(State, Id, X, Y), - set_default_mode(), - {noreply, State}; -handle_info({gs, Win, configure, _Data, [W, H|_]}, State) -> - case win() of Win -> user_driven_resize(W, H); - _-> ok - end, - {noreply, State}; - -handle_info({delivery, _S, pinfo, _N, Res}, State) -> - appmon_txt:print(Res), - {noreply, State}; -handle_info({delivery, S, app, N, Res}, State) -> - {delivery, _Serv, app, _Name, {Root, Vs, Ls, SecLs}} = - flush({delivery, S, app, N, Res}), - update2(Vs, Root, Ls, SecLs, State), - {noreply, State}; - -handle_info({kill}, State) -> - {stop, normal, State}; -handle_info({state}, State) -> - {noreply, State}; -handle_info({'EXIT', _Pid, _Reason}, State) -> - {noreply, State}; -handle_info(_Other, State) -> - {noreply, State}. - - -%% Refresh sets new options for the request and forces an update of -%% the screen ant status. -refresh(State) -> - refresh(State, []). -refresh(State, Opts) -> - appmon_info:app(State#astate.client, - State#astate.name, true, Opts). - - - -%% find_pid finds the pid of the clicked object. The scenario is that -%% the user clicks on an item in his window, that ObjId is searched -%% for among all nodes (vertices) and if found action is taken -%% depending on the current mode (see handle_info) -find_pid(State, Id, X, Y) -> - %% Try to manage both versions of GS, remove first case later. - ObjList = case gs:read(Id, {find, {X, Y}}) of - {error, _} -> - gs:read(Id, {hit, {X, Y}}); % Try new format - Num when is_integer(Num) -> [Num]; - _Other -> [] - end, - DG = State#astate.digraph, - All = appmon_dg:get(all, DG), - find_pid2(ObjList, All, DG, State). - -find_pid2([Id | Ids], All, DG, State) -> - case search_for_pid(All, DG, Id) of - {ok, _KeyStr, Pid} -> - handle_proc_press(mode(), Pid, State); - _ -> find_pid2(Ids, All, DG, State) - end; -find_pid2([], _All, _DG, _State) -> ok. - -search_for_pid([V|Vs], DG, ObjId) -> - VD = appmon_dg:get(data, DG, V), - if ObjId==VD#vdata.txt_obj -> - {ok, V, VD#vdata.type}; - true -> search_for_pid(Vs, DG, ObjId) - end; -search_for_pid([], _DG, _ObjId) -> false. - - -%% -%% called when a process has been clicked on. -%% -handle_proc_press(info, Pid, State) -> - appmon_info:pinfo(State#astate.client, Pid, true, - [{timeout, at_most_once}]); -handle_proc_press(send, Pid, _State) -> - {P, RawStr} = two_entries(winroot(), 250, 70, - "Send", "To: ", "Msg: ", - pid_to_list(Pid), "", bg()), - Str = case lists:last(RawStr) of - 46 -> RawStr; - _ -> RawStr++"." - end, - case erl_scan:string(Str) of - {ok, Tokens, _} -> - case erl_parse:parse_term(Tokens) of - {ok, Term} -> - case catch list_to_pid(P) of - To when is_pid(To) -> To ! Term; - _ -> error - end; - _Error -> error - end; - _Error -> error - end; -handle_proc_press(trace, Pid, _State) -> - case trace_state(Pid) of - true -> - io:format("Removing trace on ~p~n", [Pid]), - sys:trace(Pid, false), - set_trace_state(Pid, false); - _Other -> - io:format("Putting trace on ~p~n", [Pid]), - sys:trace(Pid, true, 1000), - set_trace_state(Pid, true) - end; -handle_proc_press(kill, Pid, _State) -> - exit(Pid, kill). - - -trace_state(Pid) -> get({trace_state, Pid}). -set_trace_state(Pid, State) -> put({trace_state, Pid}, State). - -set_default_mode() -> - {Id, Mode} = get(default_mode), - case mode() of - Mode -> true; - _Other -> set_mode(Id, Mode) - end. -set_default_mode(Id, Mode) -> - put(default_mode, {Id, Mode}), - select(Id), %Dirty workaround - set_default_mode(). - -set_mode(Id, Mode) -> - %%io:format("mode=~p~n", [Mode]), - set_mode(Mode), - deselect(), - select(Id). - -set_mode(Mode) -> put(mode, Mode). -mode() -> get(mode). - -flush({delivery, S, A, N, R}) -> - receive - {delivery, S, A, N, R2} -> - flush({delivery, S, A, N, R2}) - after 0 -> - {delivery, S, A, N, R} - end. - - -%%------------------------------------------------------------ -%% Real stuff -%% -update2(Vs, Root, Ls, SecLs, State) -> - DG = State#astate.digraph, - Ref = mk_ref(), - Added = add_procs(Vs, DG, Ref), - AddedLs = add_links(Ls, DG, Ref, primary), - AddedLs2 = add_links(SecLs, DG, Ref, secondary), - DelLs = del_links(appmon_dg:eget(all, DG), DG, Ref), - Dels = del_procs(appmon_dg:get(all, DG), DG, Ref), - - LastX = appmon_place:place(DG, Root), - Width = lists:max(LastX), - Height = length(LastX), - - %% Delete things from screen - del(Dels), del(DelLs), - - %% Add vertices to screen - foreach(fun(V) -> draw_node(DG, V) end, Added), - - %% Add edges to screen - foreach(fun(E) -> draw_edge(DG, E) end, AddedLs), - foreach(fun(E) -> draw_edge(DG, E) end, AddedLs2), - - %% Move vertices on screen - foreach(fun(V) -> move_vertex(DG, V) end, appmon_dg:get(all, DG)), - - tree_driven_resize(Width, Height), - - gs:config(win(), {map, true}), %Make win visible - ok. - -%% Make an integer reference, could have used make_ref BIF but didn't -mk_ref() -> put(reference, get(reference)+1). -init_ref() -> put(reference, 0). - - -%% Add processes (vertices) to digraph, use the string repr of pid as -%% key in digraph. -add_procs([{Pid, Str}|Vs], DG, Ref) -> - case appmon_dg:add(DG, Str, mk_vdata(Str, Pid, Ref), Ref) of - known -> add_procs(Vs, DG, Ref); - updated -> add_procs(Vs, DG, Ref); - _ -> - case lists:member(32, Str) of - true -> - appmon_dg:set(x, DG, Str, foreign), % UNHOLY! - add_procs(Vs, DG, Ref); % Don't add foreign - _ -> [Str | add_procs(Vs, DG, Ref)] - end - end; -add_procs([], _DG, _Ref) -> []. - - -%% Add links to digraph. NOTE that foreign links get a special weight -%% and that no link is added if it goes to a process not in the set of -%% vertices. -%% -%% OTP-1970: Check that linked-to processes really exist. -%% -add_links([{V1, V2}|Ls], DG, Ref, Weight) -> - L = case lists:member(32, V2) of - true -> {V1, V2, foreign}; - _ -> {V1, V2, Weight} - end, - case appmon_dg:get(data, DG, V2) of - false -> add_links(Ls, DG, Ref, Weight); - VD -> - if VD#vdata.ref == Ref -> % OTP-1970 - case appmon_dg:eadd(DG, L, mk_edata(L, Ref), Ref) of - known -> add_links(Ls, DG, Ref, Weight); - updated -> add_links(Ls, DG, Ref, Weight); - _Other -> [L | add_links(Ls, DG, Ref, Weight)] - end; - true -> - add_links(Ls, DG, Ref, Weight) - end - end; -add_links([], _DG, _Ref, _Weight) -> []. - -%% Make an edge data structure -mk_edata(_L, Ref) -> - #edata{ref=Ref}. - -%% Make a vertex data structure, note that pid can be either a pid or -%% a port, we're not picky here. -mk_vdata(P, Pid, Ref) -> - #vdata{ref=Ref, type=Pid, txt=P, width=width(P)}. -width(Txt) -> ?CHARWIDTH*length(Txt)+10. % Should use GS stuff instead - - -%% Delete those processes that have the wrong reference from the -%% digraph. Returns a list of deleted procs and their data (to be able -%% to erase things on screen). -del_procs([V|Vs], DG, Ref) -> - VD = appmon_dg:get(data, DG, V), - if VD#vdata.ref /= Ref -> appmon_dg:del(DG, V), - [{V, VD} | del_procs(Vs, DG, Ref)]; - true -> del_procs(Vs, DG, Ref) - end; -del_procs([], _DG, _Ref) -> []. - - -%% Deletes links that have the wrong reference from the digraph, note -%% that the weight of the edge is not considered here. Returns a list -%% of deleted links and their data (to be able to erase things on -%% screen). -del_links([L | Ls], DG, Ref) -> - ED = appmon_dg:eget(data, DG, L), - if ED#edata.ref /= Ref -> appmon_dg:edel(DG, L), - [{L, ED} | del_links(Ls, DG, Ref)]; - true -> del_links(Ls, DG, Ref) - end; -del_links([], _DG, _Ref) -> []. - -%% Del deletes the GS objects of the list of should-be-deleted -%% items. Returns nothing particular. -del(L) -> - lists:foreach(fun({{V1, V2, Weight}, D}) when is_record(D, edata) -> - if Weight== foreign -> - dealloc_foreign({V1, V2, Weight}); - true -> ok end, - destroy(D#edata.line); - ({_I, D}) when is_record(D, vdata) -> - destroy(D#vdata.sym_obj), - destroy(D#vdata.txt_obj) - end, L). - - -move_vertex(DG, V) -> - VData = appmon_dg:get(data, DG, V), -%% io:format("Vertex ~p data: x:~p, oldx:~p, y:~p, oldy:~p offs:~p~n", -%% [V, VData#vdata.x, VData#vdata.origx, -%% VData#vdata.y, VData#vdata.origy, offsetx()]), - if VData#vdata.x == foreign -> ok; - true -> - X = VData#vdata.x, - Y = scaley(VData#vdata.y), - OldX = VData#vdata.origx, - OldY = scaley(VData#vdata.origy), - if X==OldX, Y==OldY -> true; - true -> - %%io:format("Moving vertex: ~p~n", [V]), - - W = VData#vdata.width, - {BoxC, TxtC} = calc_box_coords(X, Y, W), - - %% move the symbol and text - gs:config(VData#vdata.sym_obj, [{coords, BoxC}]), - gs:config(VData#vdata.txt_obj, [{coords, TxtC}]), - foreach(fun(E) -> move_edge(DG, E) end, - appmon_dg:get(edges, DG, V)) - end - end. - - -move_edge(DG, E) -> - {{V1, V2, Weight}, V1, V2, ED} = appmon_dg:eget(edge, DG, E), - VD1 = appmon_dg:get(data, DG, V1), - VD2 = appmon_dg:get(data, DG, V2), - Line = ED#edata.line, - move_line(DG, VD1, VD2, Line, Weight). -move_line(DG, VD1, VD2, Line, Weight) when is_list(Line) -> - move_line(DG, VD1, VD2, hd(Line), Weight); -move_line(_DG, VD1, VD2, Line, Weight) -> - Coords = calc_coords(VD1, VD2, Weight), - gs:config(Line, [{coords, Coords} | line_opts(Weight)]). - -%% Draw the vertex on the canvas -draw_node(DG, V) -> - %%io:format("Drawing~n",[]), - Data = appmon_dg:get(data, DG, V), - - X = Data#vdata.x, - Y = scaley(Data#vdata.y), - - {Sym, Txt} = draw(rectangle, sup_col(), Data#vdata.txt, X, Y, - Data#vdata.width), - - appmon_dg:av(DG, V, Data#vdata{sym_obj=Sym, txt_obj=Txt}), - true. - -%% Draws a symbol (rectangle for instance) on the canvas. -draw(Symbol, Col, Txt, X, Y, W) -> - {BoxC, TxtC} = calc_box_coords(X, Y, W), - Box = gs:create(Symbol, canvas(), [{coords, BoxC}, {fill, Col}]), - - TxtObj = gs:create(text, canvas(), [{coords, TxtC}, - {anchor, c}, - %%{buttonpress, true}, - {text, Txt}]), - {Box, TxtObj}. - -%% Returns {BoxCoords, TextCoords} -calc_box_coords(X, Y, W) -> - {[{X, Y-radius()}, {X+W, Y+radius()}], [{X+trunc(W/2), Y}]}. - - -%% Draw a line on the canvas -draw_edge(DG, E) -> - {V1, V2, Weight} = E, - Line = draw_line(DG, V1, V2, Weight), -%% io:format("Line: ~p~n", [Line]), - appmon_dg:eset(line, DG, E, Line). - - -%% From is parent, To is child. If To is not a record then we are -%% dealing with a link to a process on another node. Find a suitable -%% place at the left margin and write the process name there and draw -%% a line to it. -%% -draw_line(DG, From, To, foreign) -> - VD1 = appmon_dg:get(data, DG, From), - Y = find_foreign_place(VD1#vdata.y+0.5, foreign_places()), - add_foreign_place({From, To, foreign}, Y), -%% io:format("New Y: ~p~n", [Y]), - appmon_dg:set(x, DG, To, 0), - appmon_dg:set(y, DG, To, Y), - VD2 = appmon_dg:get(data, DG, To), - Coords = calc_coords(VD1, VD2, foreign), -%% io:format("Node coords: ~p~n", [Coords]), - L = gs:create(line, canvas(), [{coords, Coords} | line_opts(foreign)]), - T = gs:create(text, canvas(), [{coords, [{0, 5+scaley(Y)}]}, - {anchor, nw}, {fg, f_line_col()}, -%% {font, {screen, 10}}, - {text, To}]), - [L, T]; - -draw_line(DG, From, To, Weight) -> - VD1 = appmon_dg:get(data, DG, From), - VD2 = appmon_dg:get(data, DG, To), - Coords = calc_coords(VD1, VD2, Weight), - gs:create(line, canvas(), [{coords, Coords} | line_opts(Weight)]). - -%%---------------------------------------------------------------------- -%% -%% Line coordinate calculation -%% -%% Calculate coordinates for edges (links, lines). Primaries have a -%% nice knee and secondaries are oriented differently. If weight is -%% foreign then we will calculate a nice line to the left margin. -%% -calc_coords(From, To, foreign) -> - Y = scaley(To#vdata.y), - X1 = From#vdata.x+trunc(From#vdata.width/2), - Y1 = scaley(From#vdata.y)+radius(), - [{0, Y}, {X1-40, Y}, {X1, Y1}]; -calc_coords(From, To, primary) -> - X1 = From#vdata.x+trunc(From#vdata.width/2), - Y1 = scaley(From#vdata.y)+radius(), - - X2 = To#vdata.x+trunc(To#vdata.width/2), - Y2 = scaley(To#vdata.y)-radius(), - - Y3 = trunc((Y1+Y2)/2), - [{X1, Y1}, {X1, Y3}, {X2, Y3}, {X2, Y2}]; - -calc_coords(V1, V2, _Weight) -> - Y1 = scaley(V1#vdata.y), - X1 = V1#vdata.x, - X1w = X1+V1#vdata.width, - Y2 = scaley(V2#vdata.y), - X2 = V2#vdata.x, - X2w = X2+V2#vdata.width, - - if Y1 == Y2 -> calc_u(X1, X1w, Y1, X2, X2w); - X1w < X2 -> calc_s(X1w, Y1, X2, Y2); - X2w < X1 -> calc_s(X1, Y1, X2w, Y2); - true -> - D1 = abs(X1-X2), D2 = abs(X1w-X2w), - if D1 > D2 -> calc_rbrack(X1w, Y1, X2w, Y2); - true -> calc_lbrack(X1, Y1, X2, Y2) - end - end. - -%% Calculates line coordinates that will go from bottom of one node to -%% bottom of another on the same level. The line will form a nice "U". -calc_u(X1, X1w, Y, X2, X2w) -> - X3 = trunc((X1+X1w)/2), - X4 = trunc((X2+X2w)/2), - Y2 = Y+radius(), - Y3 = Y2+20, - [{X3, Y2}, {X3, Y3}, {X4, Y3}, {X4, Y2}]. - -%% Calculates line coordinates that will go from right (or left) side -%% to right (or left) side, thus forming a "[" or a "]" (bracket). -calc_rbrack(X1, Y1, X2, Y2) -> - X3 = 20 + if X1 > X2 -> X1; - true -> X2 - end, - [{X1, Y1}, {X3, Y1}, {X3, Y2}, {X2, Y2}]. -calc_lbrack(X1, Y1, X2, Y2) -> - X3 = -20 + if X1 < X2 -> X1; - true -> X2 - end, - [{X1, Y1}, {X3, Y1}, {X3, Y2}, {X2, Y2}]. - -%% Calculates line coordinates that will form a nice "S" -calc_s(X1, Y1, X2, Y2) -> - X3 = trunc((X1+X2)/2), - [{X1, Y1}, {X3, Y1}, {X3, Y2}, {X2, Y2}]. - - -%% Options for lines (edges, links) -line_opts(foreign) -> [{width, 2}, {smooth, true}, {fg, f_line_col()}]; -line_opts(primary) -> [{width, 2}, {smooth, false}, {fg, line_col()}]; -line_opts(_) -> [{width, 2}, {smooth, true}, {fg, sec_line_col()}]. - - - -%%---------------------------------------------------------------------- -%% -%% Handling of links to foreign processes -%% -%%---------------------------------------------------------------------- -dealloc_foreign(L) -> -%% io:format("deallocing foreign: ~p~n", [L]), - put(foreign_places, lists:keydelete(L, 1, foreign_places())). -add_foreign_place(V, Y) -> -%% io:format("Adding foreign: ~p~n", [V]), - put(foreign_places, [{V, Y} | foreign_places()]). -foreign_places() -> - get(foreign_places). -init_foreign_places() -> - put(foreign_places, []). - -%% Find a good place for the foreign node -find_foreign_place(StartY, L) -> - case lists:keysearch(StartY, 2, L) of - {value, _} -> find_foreign_place(StartY + 1, L); - _ -> StartY - end. - - -%%------------------------------------------------------------ -%% -%% Graphical stuff -%% - -setup_base_win(NodeName, AppName) -> - set_winroot(gs:start([{kernel,true}])), - - W = ?MINWIDTH, H = ?MINHEIGHT, - - Name = "APPMON: " ++ atom_to_list(AppName) ++ " on " ++ - atom_to_list(NodeName), - - set_win(gs:create(window, winroot(), [{title, Name}, %%{bg, red}, - {x, 250}, {y, 100}, - {width, W}, {bg, win_col()}, - {height, H+?BUTTAREA_H}])), - %% standard buttons - mk_std_butts(win(), W), - set_canvas(gs:create(canvas, win(),[{x,0}, {y,?BUTTAREA_H}, - {width, W}, {height, H}, - {bg, bg()}, - {buttonpress, true}])), - - set_old_win_size(width, gs:read(win(), width)), - set_old_win_size(height, gs:read(win(), height)), - -%% gs:config(win(), {map, true}), %Make win visible - ok. - - -nice_line_coords(W, H) -> - [{0,H-10}, {W,H-10}]. - -%%------------------------------ -%% Button stuff - -mk_butt_area(Win, W) -> - H = ?BUTTAREA_H, - F = gs:create(frame, Win,[{x,0}, {y,0}, %%{bg, frame_col()}, - {width,W}, {height,H}]), - C = gs:create(canvas,F,[{x,0}, {y,0}, {width, W}, {height, H-9}, - {bg, bg()}]), - L = gs:create(line,C,[{coords,nice_line_coords(W, H)}]), - - MB = gs:create(menubar, Win, []), - - FMB = gs:create(menubutton, MB, [{label, {text, "File"}}]), - FM = gs:create(menu, FMB, []), - gs:create(menuitem, FM, [{label, {text, ?CLOSETXT}}]), - - OMB = gs:create(menubutton, MB, [{label, {text, "Options"}}]), - OM = gs:create(menu, OMB, []), - gs:create(menuitem, OM, [{label, {text, ?REFRESHTXT}}]), - Group = now(), - gs:create(menuitem, OM, [{itemtype, separator}]), - gs:create(menuitem, OM, [{label, {text, ?SUPVIEWTXT}}, {itemtype, radio}, - {group, Group}]), - gs:create(menuitem, OM, [{label, {text, ?PROCVIEWTXT}}, {select, true}, - {group, Group}, {itemtype, radio}]), - - HMB = gs:create(menubutton, MB, [{label, {text, "Help"}}, {side, right}]), - HM = gs:create(menu, HMB, []), - gs:create(menuitem, HM, [{label, {text, ?HELPTXT}}]), - - {F, C, L}. - -mk_std_butts(Win, W) -> - {F, C, L} = mk_butt_area(Win, W), - set_bframe(F), set_bcanvas(C), set_bline(L), - - IButt = mk_mode_butt({text, "Info"}, {mode, info}, 10), - mk_mode_butt({text, "Send"}, {mode, send}, 90), - mk_mode_butt({text, "Trace"}, {mode, trace}, 170), - mk_mode_butt({text, "Kill"}, {mode, kill}, 250), - - set_default_mode(IButt, info), - - true. - -select(Id) -> - gs:config(Id, {bg, sel_col()}), - set_selected(Id). - -deselect() -> - gs:config(selected(), {bg, de_sel_col()}). - -mk_mode_butt(Label, Data, X) -> - gs:create(button, bframe(), [{label, Label}, {x, X}, {y, 35}, - {data, Data}, {width, 70}, {height, 25}]). - -%%------------------------------------------------------------ -%% Graphical utilities - -mk_frame(P, X, Y, W, H, BG) -> - gs:create(frame, P, [{x, X}, {y, Y}, {width, W}, {height, H}, {bg, BG}]). - -mk_butt(P, X, Y, W, H, Txt) -> - gs:create(button, P, [{x, X}, {y, Y}, {height, H}, {width, W}, - {label, {text, Txt}}]). - -mk_butt(P, X, Y, Txt) -> - mk_butt(P, X, Y, 70, 20, Txt). - -mk_label(P, X, Y, W, H, Txt, BG) -> - gs:create(label, P, [{x, X}, {y, Y}, {height, H}, {width, W}, - {label, {text, Txt}}, {bg, BG}]). - -mk_entry(P, X, Y, W, H, Txt, BG) -> - gs:create(entry, P, [{x, X}, {y, Y}, {height, H}, {width, W}, {text, Txt}, - {bg, BG}, {keypress, true}]). - - -two_entries(Root, W, H, Name, LTxt1, LTxt2, StartTxt1, StartTxt2, BG) -> - Win = gs:create(window, Root, [{title, Name}, %%{bg, red}, - %%{x, X}, {y, Y}, - {width, W}, {bg, BG}, - {height, H}]), - F = mk_frame(Win, 0, 0, W, H, BG), - - mk_label(F, 10, 10, 30, 20, LTxt1, BG), - mk_label(F, 10, 40, 30, 20, LTxt2, BG), - - E1 = mk_entry(F, 40, 10, 120, 20, StartTxt1, BG), - E2 = mk_entry(F, 40, 40, 120, 20, StartTxt2, BG), - - Ok = mk_butt(F, 170, 10, "Ok"), - Cn = mk_butt(F, 170, 40, "Cancel"), - gs:config(Win, {map, true}), - - Ret = case catch two_entries_loop(E1, E2, Ok, Cn) of - {P2, Msg} -> {P2, Msg}; - _Other -> - false - end, - gs:destroy(Win), - Ret. - - -two_entries_loop(E1, E2, Ok, Cn) -> - receive - {gs, Ok, click, _, _} -> - {gs:read(E1, text), - gs:read(E2, text)}; - {gs, E1, keypress, _, ['Return'|_]} -> - {gs:read(E1, text), - gs:read(E2, text)}; - {gs, E2, keypress, _, ['Return'|_]} -> - {gs:read(E1, text), - gs:read(E2, text)}; - {gs, _, keypress, _, _} -> - two_entries_loop(E1, E2, Ok, Cn); - {gs, Cn, click, _, _} -> - true - end. - -%%-------------------------------------------------------------------- -%% -%% Resizing routines. -%% -%% Resizing deals with a number of different interdependent -%% sizes. Top size is the window size. From window size all other -%% sizes are calculated, we call this the "leader" size. The -%% canvas is usually the same size as the window, except for the -%% row of buttons at the top of the windoww. The canvas is also -%% displaced when the tree is smaller than the minimum window -%% size. -%% -%% -%% Window size - the size of the outer window. Note that -%% provisions must be made for the button area at the top of the -%% window, this is called WinAdj. this is the only item taht -%% changes when the user manually resizes the window. -%% -%% Canvas size - The size of the canvas, should be equal to -%% window size less the button area. Must be adjusted when the -%% window has been manually resized. The canvas also has a -%% scrollregion which must be maintained. Note that we could have -%% used the canvas size as "leading" size, but this did not work -%% since the canvas doesn't fill the complete window when the -%% tree is smaller than the window. -%% -%% Tree size - The size of the tree. This may change whenever a -%% new tree is delivered from the info routine. -%% -%% Dim - All these size adjustments are done in some dimension -%% (width or height). -%% -%% Max, Min - The outmost window may not become larger than Max -%% size or smaller than Min size when resized by the tree -%% size. The user resizing is not restricted to these sizes. -%% -%% Scrollbars: -%% -%% Scrollbars are used whenever necessary, whenever the tree size -%% is bigger than canvas size (in any dimension). -%% -%% Invariants: -%% -%% The three sizes are not varied at the same time. When the -%% window is resized because of a new tree, then window and -%% canvas must be updated. When the user has resized, then only -%% the canvas must be changed (to fit in the window) -%% -%% Tree driven resize -%% -%% This occurs when the tree has been updated. The window may -%% grow and shrink to fit the tree, but may not be smaller than -%% Min and not bigger than Max (scrollbars will be used instead) -%% - -tree_driven_resize(TWidth, THeight) -> - gs:config(win(), {configure, false}), - Width = TWidth+20, - Height = scaley(THeight+1), - put({width, tree}, Width), - put({height, tree}, Height), - adjust_win(width, Width), - adjust_win(height, Height), - fit_tree_to_win(width, Width), - fit_tree_to_win(height, Height), - check_scroll_region(Width, Height, gs:read(canvas(), scrollregion)), - gs:config(win(), {configure, true}), - ok. - - -%% Will adjust the window size to the tree size (given the max and min -%% restrictions. -adjust_win(Dim, TreeSize) -> - case get({Dim, user_resize}) of - true -> ok; - _ -> - WinSize = gs:read(win(), Dim),%%get_dim(Dim, win()), - case get_wanted_winsize(Dim, TreeSize) + winadj(Dim) of - WinSize -> ok; - NewSize -> - %%set(Dim, win(), NewSize+winadj(Dim)) - set_old_win_size(Dim, NewSize), - gs:config(win(), {Dim, NewSize}) - end - end. - -get_wanted_winsize(Dim, Size) -> - Max = maxsize(Dim), Min = minsize(Dim), - if Size > Max -> Max; - Size < Min -> Min; - true -> Size - end. - -set_old_win_size(Dim, Size) -> put({Dim, winsize}, Size). -old_win_size(Dim) -> get({Dim, winsize}). - - -%%-------------------------------------------------------------------- -%% -%% user_driven_resize -%% -%% This is when the user drags the window to some size. This is -%% basically the same as a tree resize, only this time the window -%% itself must not be fiddled with. When the window has been -%% resized this way then normal tree driven resize is not allow -%% to alter the size in that dimension. User overrides. -%% -user_driven_resize(W, H) -> - gs:config(win(), {configure, false}), - check_user_resize(width, W), - check_user_resize(height, H), - check_scroll_region(get({width, tree}), get({height, tree}), - gs:read(canvas(), scrollregion)), - gs:config(win(), {configure, true}). - -check_user_resize(Dim, Size) -> - case old_win_size(Dim) of - Size -> false; - _ -> - put({Dim, user_resize}, true), - set_old_win_size(Dim, Size), - fit_tree_to_win(Dim, get({Dim, tree})) - end. - - - -%%-------------------------------------------------------------------- -%% -%% General resizing routines -%% -%% fit_tree_to_win - Will fit the canvas into a pre-sized window in -%% one dimension. -%% -fit_tree_to_win(Dim, TreeSize) -> - Size = gs:read(win(), Dim) - winadj(Dim), - set_canvas_offset(Dim, Size, TreeSize), - set_button_width(Dim, Size), - if TreeSize > Size -> - gs:config(canvas(), {trans_dim2vh(Dim), trans_dim2enable(Dim)}); - TreeSize < Size -> - gs:config(canvas(), {trans_dim2vh(Dim), false}); - true -> - gs:config(canvas(), {trans_dim2vh(Dim), false}) - end. - - -%%------------------------------ -%% Set the canvas width and displacement in x. -set_canvas_offset(height, Size, _) -> - gs:config(canvas(), {height, Size}); -set_canvas_offset(width, Size, Size) -> - gs:config(canvas(), [{x, 0}, {width, Size}]); -set_canvas_offset(width, Size, TreeSize) when Size<TreeSize -> - gs:config(canvas(), [{x, 0}, {width, Size}]); -set_canvas_offset(width, Size, TreeSize) when Size>TreeSize-> - Val = trunc((Size-TreeSize)/2), - gs:config(canvas(), [{x, Val}, {width, Size-Val}]). - -%%------------------------------ -%% Set the button area width -set_button_width(height,_) -> ok; -set_button_width(width, W) -> - gs:config(bcanvas(), [{width, W}]), - gs:config(bframe(), [{width, W}]), - gs:config(bline(), [{coords, nice_line_coords(W, ?BUTTAREA_H)}]). - - -%%------------------------------ -%% Update the scrollregion size if needed. -check_scroll_region(W, H, {_, _, W, H}) -> ok; -check_scroll_region(W, H, {_, _, _, _}) -> - gs:config(canvas(), {scrollregion, {0, 0, W, H}}). - - -%% Window sizing primitives -winadj(width) -> 0; -winadj(height) -> ?BUTTAREA_H. -maxsize(width) -> ?MAXWIDTH; -maxsize(height) -> ?MAXHEIGHT. -minsize(width) -> ?MINWIDTH; -minsize(height) -> ?MINHEIGHT. - - - -trans_dim2vh(width) -> hscroll; -trans_dim2vh(height) -> vscroll. -trans_dim2enable(width) -> bottom; -trans_dim2enable(height) -> right. - - - - - -%%------------------------------------------------------------ -%% Global Window info - -winroot() -> get(winroot). -win() -> get(win). -canvas() -> get(canvas). -bframe() -> get(bframe). -bcanvas() -> get(bcanvas). -bline() -> get(bline). -set_winroot(X) -> put(winroot, X). -set_win(X) -> put(win, X). -set_canvas(X) -> put(canvas, X). -set_bframe(X) -> put(bframe, X). -set_bcanvas(X) -> put(bcanvas, X). -set_bline(X) -> put(bline, X). - -sup_col() -> ?darkkhaki. -%%work_col() -> ?orange. -bg() -> ?palegoldenrod. -line_col() -> ?peachpuff4. %% saddlebrown.darkgoldenrod -f_line_col() -> ?royalblue. %% saddlebrown.darkgoldenrod -sec_line_col() -> ?red. -win_col() -> bg(). %%darkolivegreen. - -sel_col() -> ?darkgrey. -de_sel_col() -> ?lightgrey. -set_selected(Id)-> put(selected, Id). -selected() -> get(selected). - -scaley(Y) -> 55*Y. -radius() -> 10. - -destroy(undefined) -> true; -destroy(L) when is_list(L) -> lists:foreach(fun(X) -> destroy(X) end , L); -destroy(Win) -> gs:destroy(Win). - diff --git a/lib/appmon/src/appmon_dg.erl b/lib/appmon/src/appmon_dg.erl deleted file mode 100644 index f53defa946..0000000000 --- a/lib/appmon/src/appmon_dg.erl +++ /dev/null @@ -1,205 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%------------------------------------------------------------ -%% -%% Digraph handling for process view GUI. Feeble attempt at data -%% separation. Provides functional interface to the data structures -%% vdata and edata, v for vertex and e for edge. -%% -%%------------------------------------------------------------ --module(appmon_dg). - --include("appmon_dg.hrl"). - -%% Exports for vertices --export([get/3, get/2, set/4, av/3, add/4, del/2, visited/3]). - -%% Exports for edges --export([eget/2, eget/3, eset/4, eadd/4, edel/2, ae/3]). - -%% Exports for convenience --export([print_dg/1]). - - -%%------------------------------------------------------------ - - -eget(all, DG) -> - digraph:edges(DG). - -eget(data, DG, E) -> - case digraph:edge(DG, E) of - {_, _V1, _V2, Data} -> Data; - _Other -> false - end; -eget(edge, DG, {V1, V2}) -> - case digraph:edge(DG, {V1, V2}) of - {E, W1, W2, ED} -> {E, W1, W2, ED}; - Other -> - case digraph:edge(DG, {V2, V1}) of - {E, W1, W2, ED} -> {E, W1, W2, ED}; - Other -> false - end - end; - -%% Weight in edge name -eget(edge, DG, {V1, V2, Weight}) -> - case digraph:edge(DG, {V1, V2, Weight}) of - {E, W1, W2, ED} -> {E, W1, W2, ED}; - _Other -> false - end; -eget(in, DG, V) -> - efilter(digraph:in_edges(DG, V)). - -efilter(Es) -> - lists:filter(fun({_V1, _V2, primary}) -> true; - (_E) -> false end, - Es). - -eset(ref, DG, E, Ref) -> - {E2, _V1, _V2, D} = eget(edge, DG, E), - update_e(DG, E2, D#edata{ref=Ref}); -eset(line, DG, E, Line) -> - {E2, _V1, _V2, D} = eget(edge, DG, E), - update_e(DG, E2, D#edata{line=Line}). - -edel(DG, E) -> - digraph:del_edge(DG, E). - -eadd(DG, E, D, Ref) -> - case eget(edge, DG, E) of - {_, _, _, ED} when is_record(ED, edata), ED#edata.ref == Ref -> - known; - {_, _, _, ED} when is_record(ED, edata), ED#edata.ref /= Ref -> - update_e(DG, E, ED#edata{ref=Ref}), - updated; - _Other -> - ae(DG, E, D) - end. - -ae(DG, {V1, V2, Weight}, D) -> - digraph:add_edge(DG, {V1, V2, Weight}, V1, V2, D). - -update_e(DG, {V1, V2, Weight}, D) -> - digraph:del_edge(DG, {V1, V2, Weight}), - digraph:add_edge(DG, {V1, V2, Weight}, V1, V2, D). - -%% Filter destination vertex from a list of edges -vfilter(Vs) -> - lists:map(fun({_V1, V2, _Weight}) -> V2; - ({_V1, V2}) -> V2 - end, Vs). - -get(all, DG) -> - digraph:vertices(DG). - -get(data, DG, {V1, V2}) -> - case digraph:edge(DG, {V1, V2}) of - {_,_,_,Data} -> Data; - _Other -> false - end; -get(data, DG, V) -> - case digraph:vertex(DG, V) of - {_,Data} -> Data; - _Other -> false - end; - -%% Return all children of vertex V (those which V has edges to) -get(out, DG, V) -> - vfilter(efilter(digraph:out_edges(DG, V))); -get(in, DG, V) -> - digraph:in_neighbours(DG, V); -get(edges, DG, V) -> - digraph:edges(DG, V); -get(w, DG, V) -> - Data = get(data, DG, V), - Data#vdata.width; -get(x, DG, V) -> - Data = get(data, DG, V), - Data#vdata.x. - -set(type, DG, V, Type) -> - D = get(data, DG, V), - av(DG, V, D#vdata{type=Type}); - -set(ref, DG, V, Ref) -> - D = get(data, DG, V), - av(DG, V, D#vdata{ref=Ref}); - -set(y, DG, V, Y) -> - D = get(data, DG, V), - av(DG, V, D#vdata{y=Y}); - -set(data, DG, V, D) when is_record(D, vdata)-> - av(DG, V, D); - -set(x, DG, V, X) -> - D = get(data, DG, V), - if D#vdata.x /= X -> - av(DG, V, D#vdata{x=X}); - true -> true - end. - -visited(DG, {V1, V2}, Ref) -> % for edge - D = eget(data, DG, {V1, V2}), - if is_record(D, edata), D#edata.ref == Ref -> true; - true -> false - end; -visited(DG, V, Ref) -> - D = get(data, DG, V), - if is_record(D, vdata), D#vdata.ref == Ref -> true; - true -> false - end. - -add(DG, V, D, Ref) -> - case get(data, DG, V) of - D2 when is_record(D2, vdata), D2#vdata.ref==Ref -> - io:format("Ooops in ~p:add vertex~n", [?MODULE]), - known; - D2 when is_record(D2, vdata) -> - %%io:format("~p touch vertex ~p~n", [self(), V]), - set(ref, DG, V, Ref), - set(type, DG, V, D#vdata.type), - save_coords(DG, V), - updated; - _Other -> - av(DG, V, D), added - end. - -save_coords(DG, V) -> - D = get(data, DG, V), - D2 = D#vdata{origx=D#vdata.x, origy=D#vdata.y}, - av(DG, V, D2). - -del(DG, V) -> - digraph:del_vertex(DG, V). - - -av(DG, V, D) -> - digraph:add_vertex(DG, V, D). - -print_dg(DG) -> - io:format("Vertices:~n", []), - lists:foreach(fun(V) -> io:format(" ~p ~p~n", - [V, get(data, DG, V)]) end, - get(all, DG)), - io:format("Edges:~n", []), - lists:foreach(fun(V) -> io:format(" ~p ~p~n", - [V, eget(edge, DG, V)]) end, - eget(all, DG)), - true. diff --git a/lib/appmon/src/appmon_dg.hrl b/lib/appmon/src/appmon_dg.hrl deleted file mode 100644 index c3485cf1fd..0000000000 --- a/lib/appmon/src/appmon_dg.hrl +++ /dev/null @@ -1,45 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% - - - -%% -%% The dg package record definitions -%% -%% This is the declarations of the datastructures used for the -%% application monitoring software. All fields are reserved for the -%% implementation except those stated otherwise -%% - --record(vdata, {ref, % - type, % - x, % - origx=-1, % - y, % - origy=-1, % - txt="", % Set by user - width=0, % Set by user - sym_obj=undefined, % - txt_obj}). % - - - --record(edata, {ref, % - line, % - weight}). % - diff --git a/lib/appmon/src/appmon_lb.erl b/lib/appmon/src/appmon_lb.erl deleted file mode 100644 index 3ab6ce58e6..0000000000 --- a/lib/appmon/src/appmon_lb.erl +++ /dev/null @@ -1,696 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% - -%%% Due to the fact that the application buttons in the appmon window -%%% gets too small to read when the number of applications increases, -%%% this listbox window has been created. -%%% Because of the limitations of GS a listbox was chosen to keep -%%% the nodes and applications. When it's possible to scroll a frame I -%%% think one should put in scrollbars in the appmon main window. -%%% The listbox solution is too slow with lots of applications. -%%% -%%% In the listbox the nodes are shown with their applications beneith. -%%% By double clicking on an application name, or a single click and -%%% then pressing the load button, its application window is started. - --module(appmon_lb). --compile([{nowarn_deprecated_function,{gs,button,3}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,listbox,3}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - --export ([ - start/1, - stop/1, - add_node/2, - remove_node/2, - add_apps/3, - remove_app/3, - open_win/2, - update_status/3 - ]). - --export ([init/1]). - --define (LB_W, 200). % List box width --define (LB_H, 400). % List box height --define (BUTT_W, 100). --define (WIN_W, ?LB_W + ?BUTT_W + 25). % Window width --define (WIN_H, ?LB_H + 20). % Window height - - -%%% #node{} -%%% -%%% The record 'node' contains the name of the node, its status and -%%% the applications running on that node. -%%% -%%% node == atom () -%%% status == alive || dead -%%% apps == [#app{}] -%%% - --record (node, {node, %% Name of the node - status = alive, - apps = []}). - -%%% #app{} -%%% -%%% The record 'app' contains the name of the application and its pid -%%% -%%% app == atom () -%%% pid == pid () -%%% - --record (app, {app, - pid}). - - -%%% #win{} -%%% -%%% The record 'win' contains the pid of the listbox window, -%%% its x and y position, its width and height. -%%% -%%% pid == win_closed || pid () -%%% x == integer () -%%% y == integer () -%%% width == integer () -%%% height == integer () -%%% - --record (win, {pid = win_closed, - x = 50, - y = 50, - width = ?WIN_W, - height = ?WIN_H}). - - - -%%% Every function in the interface is called with the pid -%%% of this recieve loop, called 'LbPid'. -%%% - - -%%% start /1 -%%% -%%% start returns the pid of the spawned receive loop or -%%% it will call exit/2 after a timeout. -%%% -%%% Pre: -%%% CallingPid == pid () -%%% -%%% Def: -%%% pid () || exit/2 -%%% - -start (CallingPid) -> - PidInit = spawn (?MODULE, init, [CallingPid]), - - %% Wait for a initialization completion message from - %% the spawned process before returning its Pid. - - receive - {initialization_complete, PidInit} -> - PidInit - - %% (Conditional) Failure to start within the time limit - %% will result in termination (Timeout may be infinite). - - after - 60000 -> - exit (PidInit, kill), - exit ({startup_timeout, ?MODULE}) - end. - - - -%%% stop /1 -%%% -%%% stop exits the receive loop -%%% -%%% Post: -%%% exiting the receive loop -%%% - -stop (LbPid) -> - call (LbPid, stop). - - - -%%% add_node /2 -%%% -%%% add_node adds the given node to the DB list. -%%% -%%% Pre: -%%% Node == atom () -%%% -%%% Post: -%%% Node is added to the DB list -%%% - -add_node (LbPid, Node) -> - call (LbPid, {add_node, Node}). - - - -%%% remove_node /2 -%%% -%%% remove_node removes the given node from the DB list. -%%% -%%% Pre: -%%% Node == atom () -%%% -%%% Post: -%%% Node is removed from the DB list -%%% - -remove_node (LbPid, Node) -> - call (LbPid, {remove_node, Node}). - - - -%%% add_apps /3 -%%% -%%% add_apps add the given applications to the given -%%% node in the DB list. -%%% -%%% Pre: -%%% Apps == [App] -%%% App == {Name, Pid} -%%% Name == atom () -%%% Pid == pid () -%%% Node == atom () -%%% -%%% Post: -%%% Node#node{apps = Apps} -%%% - -add_apps (LbPid, Apps, Node) -> - call (LbPid, {add_apps, Apps, Node}). - - - -%%% remove_app /3 -%%% -%%% remove_app remove the given application from the -%%% given node in the DB list. -%%% -%%% Pre: -%%% App == atom () -%%% Node == atom () -%%% -%%% Def: -%%% Node#node{apps = OldApps - App} -%%% - -remove_app (LbPid, App, Node) -> - call (LbPid, {remove_app, App, Node}). - - - -%%% open_win /3 -%%% -%%% open_win opens the listbox window with the given nodes -%%% and their applications. -%%% -%%% Pre: -%%% Nodes_apps == [{Node, Status, Apps}] -%%% Node == atom () -%%% Status == alive || dead -%%% Apps == [App] -%%% App == {AppName, AppPid} -%%% AppName == atom () -%%% AppPid == pid () -%%% -%%% Post: -%%% Window with listbox -%%% - -open_win (LbPid, Nodes_apps) -> - call (LbPid, {open_win, Nodes_apps}). - - - -%%% update_status /3 -%%% -%%% update_status changes the status for the given node. -%%% -%%% Pre: -%%% Node == atom () -%%% Status == alive || dead -%%% -%%% Def: -%%% Node#node{status = Status} -%%% - -update_status (LbPid, Node, Status) -> - call (LbPid, {update_status, Node, Status}). - - - -%%% call /2 -%%% -%%% call sends the given action to the listbox receive loop. -%%% -%%% Pre: -%%% Action == atom () || tuple () -%%% - -call (LbPid, Action) -> - LbPid ! Action. - - - -%%% init /1 -%%% - -init (CallingPid) -> - CallingPid ! {initialization_complete, self ()}, - loop (#win{}, []). - - - -%%% loop /2 -%%% -%%% loop is the recive loop for the listbox window process. -%%% -%%% Pre: -%%% Win == #win{} -%%% Data == [#node{}] -%%% - -loop (Win, Data) -> - receive - {add_node, Node} -> - NewData = add_node_1 (Node, Data), - update (NewData, Win#win.pid), - loop (Win, NewData); - - {remove_node, Node} -> - NewData = dead_node (Node, Data), - update (NewData, Win#win.pid), - loop (Win, NewData); - - {add_apps, Apps, Node} -> - NewData = add_apps_1 (Apps, Node, Data), - update (NewData, Win#win.pid), - loop (Win, NewData); - - {remove_app, App, Node} -> - NewData = remove_app_1 (App, Node, Data), - update (NewData, Win#win.pid), - loop (Win, NewData); - - {open_win, Nodes_apps} -> - NewData = parse_data ([], Nodes_apps), - NewWin = Win#win{pid = init_win ({Win#win.x, Win#win.y})}, - update (NewData, NewWin#win.pid), - loop (NewWin, NewData); - - {update_status, Node, Status} -> - NewData = update_status_1 (Node, Status, Data), - update (NewData, Win#win.pid), - loop (Win, NewData); - - stop -> - true; - - - {gs, _Id, destroy, _D, _Arg} -> - bye; - - {gs, _Id, configure, _D, [W, H | _]} -> - NewWin = configure (Win#win.pid, W, H), - loop (NewWin, Data); - - {gs, lb, doubleclick, _, _Txt} -> - load_app (gs:read (lb, selection), Data), - loop (Win, Data); - - {gs, lb, click, _, _Txt} -> - loop (Win, Data); - - {gs, close, click, _D, _Arg} -> - case Win#win.pid of - win_closed -> - true; - - _opened -> - gs:destroy (Win#win.pid) - end, - loop (#win{}, Data); - - {gs, load, click, _D, _Txt} -> - load_app (gs:read (lb, selection), Data), - loop (Win, Data); - - {gs, clear, click, _D, _Txt} -> - gs:config (lb, {selection, clear}), - loop (Win, Data); - - - _ -> - loop (Win, Data) - end. - - - -%%% init_win /1 -%%% - -init_win ({X, Y}) -> - GS = gs:start (), - - Win = gs:window (win, GS, [{x, X}, - {y, Y}, - {width, ?WIN_W}, - {height, ?WIN_H}, - {title,"Appmon: nodes and applications"}, - {configure, true}]), - - gs:listbox (lb, Win, [{x, 5}, - {y, 10}, - {width, ?LB_W}, - {height, ?LB_H}, - {vscroll, right}, - {hscroll, bottom}, - {selectmode, single}, - {click, true}, - {doubleclick, true}]), - - gs:button (load, Win, [{x, ?WIN_W - ?BUTT_W - 10}, - {y, ?WIN_H - 120}, - {width, ?BUTT_W}, - {label, {text, "Load"}}]), - - gs:button (clear, Win, [{x, ?WIN_W - ?BUTT_W - 10}, - {y, ?WIN_H - 80}, - {width, ?BUTT_W}, - {label, {text, "Clear"}}]), - - gs:button (close, Win, [{x, ?WIN_W - ?BUTT_W - 10}, - {y, ?WIN_H - 40}, - {width, ?BUTT_W}, - {label, {text, "Close"}}]), - - gs:config (Win, {map, true}), - Win. - - - -%%% add_node_1 /2 -%%% -%%% add_node adds the given node in the given window -%%% with its appications in a listbox. -%%% - -add_node_1 (Node, []) -> - [new_node (Node)]; - -add_node_1 (Node, [H | T]) -> - T1 = lists:keysort (#node.node, [new_node (Node) | T]), - [H | T1]. - - - -%%% dead_node /2 -%%% -%%% dead_node returns a list with the given node's -%%% status changed to dead. -%%% - -dead_node (Node, Data) -> - case lists:keysearch (Node, #node.node, Data) of - {value, Node_rec} -> - L = Node_rec#node.apps, - lists:keyreplace (Node, #node.node, - Data, new_node (Node, dead, L)); - - _false -> - Data - end. - - - - - -%%% add_apps_1 /3 -%%% -%%% add_apps_1 returns a list with the given application -%%% into the old list inserted. -%%% - -add_apps_1 (Apps, Node, Data) -> - case lists:keysearch (Node, #node.node, Data) of - {value, _Node_rec} -> - NewApps = parse_apps (Apps, []), - lists:keyreplace (Node, #node.node, - Data, new_node (Node, NewApps)); - - _false -> - Data - end. - - - -%%% remove_app_1 /3 -%%% -%%% remove_app_1 returns a list with the given application -%%% removed from the old list. -%%% - -remove_app_1 (App, Node, Data) -> - - case lists:keysearch (Node, #node.node, Data) of - {value, Node_rec} -> - L = Node_rec#node.apps, - L2 = lists:keydelete (App, #app.app, L), - lists:keyreplace(Node, #node.node, Data, new_node(Node,L2)); - - _false -> - Data - end. - - - -%%% configure /3 -%%% -%%% configure returns a win record after the window has been -%%% configured. -%%% - -configure (WPid, W, H) -> - X = gs:read (WPid, x), - Y = gs:read (WPid, y), - - gs:config (lb, [{width, W - ?BUTT_W - 25}, {height, H - 20}]), - gs:config (load, [{x, W - ?BUTT_W - 10}, {y, H - 120}]), - gs:config (clear, [{x, W - ?BUTT_W - 10}, {y, H - 80}]), - gs:config (close, [{x, W - ?BUTT_W - 10}, {y, H - 40}]), - - #win{pid = WPid, x = X, y = Y, width = W, height = H}. - - - - - -%%% load_app /2 -%%% -%%% load_app opens the application window by calling -%%% the appmon_a module. -%%% - -load_app ([], _Data) -> %% no application chosen - ok; - -load_app ([Index], Data) -> - App = gs:read (lb, {get, Index}), - - case string:substr (App, 1, 3) of - " " -> - AppName = list_to_atom (string:substr (App, 4)), - - case get_node (AppName, Index, Data) of - no_node -> - ok; - - NodeName -> - appmon_a:start (NodeName, AppName) - end; - - _ -> - ok - end. - - - -%%% update_status_1 /3 -%%% -%%% update_status_1 returns a list with the given -%%% node's status updated. -%%% - -update_status_1 (Node, Status, Data) -> - case lists:keysearch (Node, #node.node, Data) of - {value, Node_rec} -> - lists:keyreplace (Node, - #node.node, - Data, - new_node(Node,Status,Node_rec#node.apps)); - - _not_found -> - Data - end. - - - -%%% update /2 -%%% -%%% update updates the listbox with new data. -%%% - -update (_Data, win_closed) -> - true; - -update (Data, _Win) -> - gs:config (lb, clear), - lb_print (Data). - - - -%%% lb_print /1 -%%% -%%% lb_print prints the list into the listbox. -%%% - -lb_print ([]) -> - ok; - -lb_print ([#node{node = Node, status = Status, apps = Apps} | T]) -> - Str = io_lib:format ("~p (~p)", [Node, Status]), - gs:config (lb, {add, Str}), - - case Status of - alive -> - lb_print_apps (Apps); - - _dead -> - gs:config (lb, {add, ""}), - ok - end, - - lb_print (T). - - - -%%% lb_print_apps /1 -%%% -%%% lb_print_apps prints the applications into the listbox. -%%% - -lb_print_apps ([]) -> - ok; - -lb_print_apps ([#app{app = App} | T]) -> - Str = io_lib:format (" ~p", [App]), - gs:config (lb, {add, Str}), - lb_print_apps (T). - - - -%%% new_node /1, 2, 3 -%%% -%%% new_node returna a new node record constructed -%%% with the given data -%%% - -new_node (Node) -> - #node{node = Node}. - -new_node (Node, Apps) -> - #node{node = Node, apps = Apps}. - -new_node (Node, Status, Apps) -> - #node{node = Node, status = Status, apps = Apps}. - - - -%%% new_app /2 -%%% -%%% new_app returns a new application record -%%% constructed with the given data. -%%% - -new_app (App, Pid) -> - #app{app = App, pid = Pid}. - - - -%%% parse_apps /2 -%%% -%%% parse_apps returns a list of application records. -%%% - -parse_apps ([], [H | T]) -> - [H | lists:keysort (#app.app, T)]; - -parse_apps ([App | T], L) -> - Pid = element (1, App), - Name = element (2, App), - parse_apps (T, [new_app (Name, Pid) | L]). - - - -%%% get_node /3 -%%% -%%% get_node returns the node from the given list -%%% or else no_node if it doesn't exists. -%%% - -get_node (_App, _Index, []) -> - no_node; - -get_node (App, Index, [Node | T]) -> - Length = length (Node#node.apps) + 1, - - case Length < Index of - true -> - get_node (App, Index - Length, T); - - false -> - Node#node.node - end. - - - -%%% parse_data /2 -%%% -%%% parse_data returns a list with node records. -%%% - -parse_data (Data, []) -> - Data; - -parse_data (Data, [{Node, Status, Apps} | T]) -> - Apps_1 = parse_apps (Apps, []), - parse_data ([new_node (Node, Status, Apps_1) | Data], T). - - - diff --git a/lib/appmon/src/appmon_place.erl b/lib/appmon/src/appmon_place.erl deleted file mode 100644 index fe1e909d7c..0000000000 --- a/lib/appmon/src/appmon_place.erl +++ /dev/null @@ -1,192 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2010. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%------------------------------------------------------------ -%% -%% Places a Digraph in a tree-like manner. The vertices in the digraph -%% is updated with x and y positions. The operation is not atomic. The -%% digraph may be cyclic but edges must then have been labeled primary -%% or secondary and the set of primary links must make up a non-cyclic -%% graph (a tree). -%% -%% -%% IMPLEMENTATION DETAIL -%% --------------------- -%% -%% The placement algorithm is straightforward, place the -%% nodes in the vertical plane (y-plane) and then place -%% nodes in the horisontal plane (x-plane). -%% -%% First all nodes are placed in the y (vertical) plane -%% by a standard traversing of the tree. We then place -%% the tree in the x (horisontal) plane. Each node is -%% placed in the middle of its children as far to the -%% left as possible, preferably at the left margin. Two -%% things can make a node not be placed at the left -%% margin and that is the case when a previous node has -%% been placed at the same vertical level as the node we -%% are trying to place (thus forcing a placement further -%% to the right), and the second case is when the middle -%% of the subtree of the node is not at the left margin -%% (which it only is when the subtree is empty). The -%% algorithm obviously depends on keeping track of the -%% rightmost positions at all depths, and this -%% information is also usefull when calculating the width -%% of the tree. -%% -%% -%% -%%------------------------------------------------------------ - - - --module(appmon_place). - --export([place/2]). - --include("appmon_dg.hrl"). - - --import(lists, [foreach/2, foldl/3]). - - -place(DG, Root) -> - case appmon_dg:get(data, DG, Root) of - false -> [0]; - _Other -> - placey(DG, Root, 1), - placex(DG, Root, []) - end. - - -%%------------------------------------------------------------ -%% -%% -%% Placing a graph in y plane -%% -------------------------- -%% -%% Place nodes in the graph in the y plane rather stupidly -%% - -placey(DG, V, Y) -> - appmon_dg:set(y, DG, V, Y), - Y1 = Y+1, - foreach(fun(C) -> placey(DG, C, Y1) end, appmon_dg:get(out, DG, V)). - - - - -%%------------------------------------------------------------ -%% -%% -%% Place a tree in the x plane -%% --------------------------- -%% -%% Place nodes in the tree in the x plane. The goal of the x -%% placement is to place all nodes as far to the left as possible -%% while maintaining a nice tree shape. -%% -%% To place a node we must first place its children, the -%% intention is to place the current node in the middle and above -%% its children. The calc_mid function will place the node in the -%% middle of its children. If the node should be placed further -%% to the right than the middle of its children, then its -%% children are moved DeltaX positions to be balanced under the -%% node. Thus at the end the node and its children form a nice -%% looking tree. -%% -%% The function also maintains the 'rightmost x on each level' -%% list LastX by putting its own position on top of the list -%% -%% - -placex(DG, V, LastX) -> - Ch = appmon_dg:get(out, DG, V), - ChLX = foldl(fun(C, Accu) -> placex(DG, C, Accu) end, - tll(LastX), - Ch), - - Width = appmon_dg:get(w, DG, V), - MyX = calc_mid(DG, Width, Ch), - DeltaX = calc_delta(MyX, hdd(LastX)+spacex()), - - appmon_dg:set(x, DG, V, MyX), - move(DG, V, [MyX+Width | ChLX], DeltaX). - - -%%------------------------------------------------------------ -%% -%% -%% Move a subtree DeltaX positions to the right -%% -------------------------------------------- -%% -%% Used when moving children to balance under an already placed -%% parent. Note that the correct LastX depends on the ordering of -%% the children which must be the same as when the children were -%% first placed. It must be ensured that hdd(NewLastX) is the -%% same as hdd(NewLastX)+DeltaX. If the order of children is -%% preserved then so is hdd(LastX). Another solution would be to -%% set hdd(LastX) from the parent -%% -%% Note the two base clauses, one for the no-children case and -%% one optimisation clause (unneccessary perhaps) for DeltaX==0 -%% - -move(_DG, _L, LastX, 0) -> LastX; -move(DG, V, LastX, DeltaX) -> move2(DG, V, LastX, DeltaX). - -move2(DG, V, LastX, DeltaX) -> - NewX = appmon_dg:get(x, DG, V)+DeltaX, - appmon_dg:set(x, DG, V, NewX), - ChLX = foldl(fun(C, LX) -> move2(DG, C, LX, DeltaX) end, - tll(LastX), - appmon_dg:get(out, DG, V)), - [erlang:max(NewX+appmon_dg:get(w, DG, V), hdd(LastX)) | ChLX]. - - -%%------------------------------------------------------------ -%% -%% -%% Calculate the middle position of the children -%% --------------------------------------------- -%% -%% Calculates the mid x position for a list of children. This -%% position is later compared to the position dictated by LastX -%% in calc_delta. - -calc_mid(_DG, _Width, []) -> 0; -calc_mid(DG, Width, ChList) -> - LeftMostX = appmon_dg:get(x, DG, hd(ChList)), - Z2 = lists:last(ChList), - RightMostX = appmon_dg:get(x, DG, Z2)+appmon_dg:get(w, DG, Z2), - trunc((LeftMostX+RightMostX)/2)-trunc(Width/2). - -calc_delta(Mid, Right) -> - if Right>Mid -> Right-Mid; - true -> 0 - end. - - - -%% Special head and tail -%% Handles empty list in a non-standard way -tll([]) -> []; -tll([_|T]) -> T. -hdd([]) -> 0; -hdd([H|_]) -> H. - -spacex() -> 20. % Should be macro?? diff --git a/lib/appmon/src/appmon_txt.erl b/lib/appmon/src/appmon_txt.erl deleted file mode 100644 index 056265af90..0000000000 --- a/lib/appmon/src/appmon_txt.erl +++ /dev/null @@ -1,307 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%------------------------------------------------------------ -%% -%% Simple text viewer -%% -%%------------------------------------------------------------ - --module(appmon_txt). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,1}}]). --export([start/0, start/1, print/1, fprint/1]). - -%% gen_server stuff --export([init/1, handle_call/3, handle_cast/2, handle_info/2, - terminate/2]). - --define(LOADTXT, "Load file"). --define(SAVETXT, "Save file"). --define(SAVEASTXT, "Save as"). --define(CLOSETXT, "Close"). --define(HELPTXT, "Help"). - -%%------------------------------------------------------------ -%% -%% start/0 starts an open text viewer that can be filled with -%% whatever. -%% -%%------------------------------------------------------------ -start() -> - start([]). - -%%------------------------------------------------------------ -%% -%% start(ListOfOptions) starts an open text viewer with options -%% -%% Options can be -%% {file, FileName} - insert contents of file -%% locked - the text cannot be edited -%% {text, Text} - insert text at startup -%% -%%------------------------------------------------------------ -start(Opts) -> - gen_server:start_link({local, ?MODULE}, ?MODULE, Opts, []). - -%% Start a text viewer if necessary -print(Txt) -> - catch start(), - gen_server:call(?MODULE, {add_txt, Txt}), - ok. - -fprint(File) -> - catch start(), - gen_server:call(?MODULE, {add_file, File}), - ok. - - -%%------------------------------------------------------------ -%% gen server admin - -init(Opts) -> - process_flag(trap_exit, true), - setup_base_win(), - default_status(), - setup_opts(Opts), - {ok, []}. - -terminate(_Reason, _State) -> - ok. - -%%------------------------------------------------------------ -%% gen server stuff -handle_call({add_txt, Txt}, _From, State) -> - do_insert_text(Txt), - scroll_to_last_line(), - {reply, ok, State}; -handle_call({add_file, FileName}, _From, State) -> - do_load_file(FileName), - {reply, ok, State}; -handle_call(_Request, _From, State) -> - {reply, ok, State}. -handle_cast(_Request, State) -> - {noreply, State}. -handle_info({gs, _, click, _, [?CLOSETXT|_]}, State) -> - {stop, normal, State}; -handle_info({gs, _, click, _, [?LOADTXT|_]}, State) -> - ui_load(), - {noreply, State}; -handle_info({gs, _, configure, _, [W, H | _]}, State) -> - resize(W, H), - {noreply, State}; - -handle_info({gs, _, destroy, _, _}, State) -> - {stop, normal, State}; -handle_info(Request, State) -> - io:format("~p got info: ~p~n", [self(), Request]), - print_status("Not implemented"), - {noreply, State}. - - -%%------------------------------------------------------------ -%% Handle options - -setup_opts([Opt|Opts]) -> - setup_opt(Opt), - setup_opts(Opts); -setup_opts([]) -> ok. - -setup_opt(Opt) -> - case Opt of - {file, FileName} -> - do_load_file(FileName); - locked -> - do_lock(); - {text, Text} -> - do_insert_text(Text); - _Other -> - ok - end. - -do_load_file(FileName) -> - case catch i_load_file(FileName) of - ok -> - default_status(); - _Other -> - print_status(lists:append(["File not found: ", FileName])) - end. - -i_load_file(FileName) -> - {ok, Bin} = file:read_file(FileName), - L = binary_to_list(Bin), - i_do_clear(), - do_insert_text(L), - ok. - -ui_load() -> - Title = "Load file", - Files = get_file_list(), - case catch ui_list_dialog(Title, "File: ", Files) of - {ok, FileName} -> - do_load_file(FileName); - _Other -> - print_status("Load cancelled") - end. - -get_file_list() -> - case file:list_dir(".") of - {ok, FileList} -> lists:sort(FileList); - _Other -> [] - end. - -do_insert_text(Text) -> - gs:config(editor(), {insert, {'end', Text}}), - ok. - -%% Scrolls editor to show the last rows -scroll_to_last_line() -> - H = gs:read(editor(), size), - R = gs:read(editor(), height), - TopRow = H-R/15, - if TopRow > 0 -> gs:config(editor(), {vscrollpos, TopRow}); - true -> gs:config(editor(), {vscrollpos, 0}) - end, - ok. - -do_lock() -> - gs:config(editor(), {enable, false}). - -i_do_clear() -> - gs:config(editor(), clear). - -%%------------------------------------------------------------ -%% Graphical stuff - -label_h() -> 20. -menu_h() -> 29. - -setup_base_win() -> - H = 400, W=580, - LabelHeight=label_h(), MenuHeight=menu_h(), - - F = gs:start([{kernel,true}]), - set_winroot(F), - - Win = gs:create(window, F, [{width, W}, {height, H}, - {title,"APPMON: Process Information"}]), - - E = gs:create(editor, Win, [{x, 0}, {y, MenuHeight}, - {width, W}, - {height, H-MenuHeight-LabelHeight-1}, - {vscroll, right}]), - set_editor(E), - - L = gs:create(label, Win, [{x, 0}, {y, H-LabelHeight}, - {height,LabelHeight }, {width, W}, - {align, w}]), - set_status(L), - print_status("Loading"), - - gs:config(Win, {map, true}), - - MB = gs:create(menubar, Win, []), - - FMB = gs:create(menubutton, MB, [{label, {text, "File"}}]), - FM = gs:create(menu, FMB, []), - gs:create(menuitem, FM, [{label, {text, ?CLOSETXT}}]), - - gs:config(Win, {configure, true}), - ok. - -resize(W, H) -> - gs:config(editor(), [{width, W}, {height, H-label_h()-menu_h()}]), - gs:config(status(), [{y, H-label_h()}, {width, W}]), - ok. - -%%------------------------------------------------------------ -%% ui_list_dialog( -%% -%% Traditional dialog with a list box and a selection field that -%% is updated from the list box. -%% -%% Returns {ok, String} if successful and something else if not -%% -%% Title - the name of the window -%% LeadText - the lead text on the selection field -%% List - a list of items that will be displayed in the list box -%% -%%------------------------------------------------------------ - -ui_list_dialog(Title, LeadText, TxtList) -> - W = 200, H = 300, - - Win = gs:create(window, winroot(), [{title, Title}, - {width, W},{height, H}]), - Ok = gs:create(button, Win, [{x, 10}, {y,10}, - {width, 50}, {height, 20}, - {label, {text, "Ok"}}]), - Cn = gs:create(button, Win, [{x, 70}, {y,10}, - {width, 50}, {height, 20}, - {label, {text, "Cancel"}}]), - - gs:create(label, Win, [{x, 10}, {y, 50}, - {width, 60}, {height, 20}, - {label, {text, LeadText}}]), - Box = gs:create(entry, Win, [{x, 10}, {y, 70}, - {width, 160}, {height, 20}, - {keypress, true}]), - List = gs:create(listbox, Win, [{x, 10}, {y, 100}, {width, 180}, - {height, 190}, - {items, TxtList}, {vscroll, right}, - {hscroll, false}, {click, true}, - {doubleclick, true}, - {keypress, true}]), - gs:config(Win, {map, true}), - - RetVal = ui_load_loop(Box, List, Ok, Cn), - - gs:destroy(Win), - - RetVal. - -ui_load_loop(Box, List, Ok, Cn) -> - receive - {gs, Box, keypress, _, ['Return'|_]} -> - {ok, gs:read(Box, text)}; - {gs, Box, keypress, _, _} -> - ui_load_loop(Box, List, Ok, Cn); - {gs, Ok, click, _, _} -> - {ok, gs:read(Box, text)}; - {gs, List, doubleclick, _, [_Idx, Txt|_]} -> - {ok, Txt}; - {gs, List, click, _, [_Idx, Txt|_]} -> - gs:config(Box, {text, Txt}), - ui_load_loop(Box, List, Ok, Cn); - _Other -> - something_else - end. - -%% The status row at the bottom of the window -set_status(Id) -> put(status_row, Id). -status() -> get(status_row). -print_status(Msg) -> gs:config(get(status_row), {label, {text, Msg}}). -default_status() -> print_status("Done"). - -set_editor(X) -> put(editor, X). -editor() -> get(editor). - -winroot() -> get(winroot). -set_winroot(X) -> put(winroot, X). diff --git a/lib/appmon/src/appmon_web.erl b/lib/appmon/src/appmon_web.erl deleted file mode 100644 index 048f7fa165..0000000000 --- a/lib/appmon/src/appmon_web.erl +++ /dev/null @@ -1,1031 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2001-2011. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% - -%%%--------------------------------------------------------------------- -%%% File : webappmon.erl -%%% Author : Martin G. <[email protected]> -%%% Purpose : Frontend to the webbased version of appmon. -%%% Created : 24 Apr 2001 by Martin G. <[email protected]> -%%%--------------------------------------------------------------------- - --module(appmon_web). - -%% The functions that the user can call to interact with the genserver --export([init/1,handle_call/3,handle_cast/2,handle_info/2]). --export([terminate/2,code_change/3]). - --export([node_info/2,application_info/2,application_env/2]). --export([proc_info/2,trace/2]). --export([start/0,stop/0,start_link/0]). - -%% Export the function that returns the configuration data needed by -%% webtool --export([configData/0]). - --behaviour(gen_server). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Start the genserver % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -start_link()-> - gen_server:start_link({local,webappmon_server},appmon_web,[],[]). -start()-> - gen_server:start({local,webappmon_server},appmon_web,[],[]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Stop the genserver % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -stop()-> - gen_server:call(webappmon_server,stop,1000). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Get the page that shows the nodes and the apps on the sel node % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -node_info(Env,Input)-> - gen_server:call(webappmon_server,{node_data,Env,Input}). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Get the application process tree % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -application_info(Env,Input)-> - gen_server:call(webappmon_server,{app_data,Env,Input}). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Get the page that shows the data about the process % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -proc_info(Env,Input)-> - gen_server:call(webappmon_server,{proc_data,Env,Input}). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Get the spec on the app % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -application_env(Env,Input)-> - gen_server:call(webappmon_server,{app_env,Env,Input}). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Toggle the trace flag for the selected process % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -trace(Env,Input)-> - gen_server:call(webappmon_server,{trace,Env,Input}). - -configData()-> - {appmon,[{web_data,{"WebAppmon","/appmon/main_frame.html"}}, - {alias,{"/appmon",code:priv_dir(appmon)}}, - {alias,{erl_alias,"/erl",[appmon_web]}}, - {start,{child,{backend,{process_info,start_link,[]}, - permanent,100,worker,[process_info]}}}, - {start,{child,{{local,webappmon_server}, - {appmon_web,start_link,[]}, - permanent,100,worker,[appmon_web]}}} - ]}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% Callback functions for the genserver % -% % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -init(_Arg)-> - {ok,[]}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Create the different pages % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -handle_call({node_data,_Env,Input},_From,State)-> - {reply,app_and_node_sel_page(Input),State}; - -handle_call({app_data,_Env,Input},_From,State)-> - {reply,process_tree_page(Input),State}; - -handle_call({proc_data,_Env,Input},_From,State)-> - {reply,process_specifickation_page(Input),State}; - -handle_call({app_env,_Env,Input},_From,State)-> - {reply,application_specifickation_page(Input),State}; - -handle_call({trace,_Env,Input},_From,State)-> - {reply,toggle_trace(Input),State}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Shutdown the genserver % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -terminate(_,_State)-> - ok. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Callback function currently not used ... % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -handle_cast(_,State)-> - {noreply,State}. - -handle_info(_,State)-> - {noreply,State}. - -code_change(_OldVsn,State,_Extra)-> - {ok,State}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% %% -%% Private functions to create the part of the sides that is common %% -%% to all sides %% -%% %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Create the Header for the page If we now the mimetype use that type%% -%% otherwise use text %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -header() -> - header("text/html"). -header(MimeType) -> - "Content-type: " ++ MimeType ++ "\r\n\r\n". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Create the Htmlheader sett the title of the side to nothing if %% -%% we dont know the name of the side %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -html_header()-> - html_header(""). - -html_header(Part) -> - "<HTML BGCOLOR=\"#FFFFFF\">\n" ++ - "<HEAD>\n" ++ - "<TITLE>Appmon " ++ Part ++ "</TITLE>\n" ++ - "</HEAD>\n". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Close the Html tag and if neccessay add some clean upp %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -html_end()-> - "</HTML>". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% %% -%% The functions that creates the whole pages by collecting %% -%% the necessary data %% -%% %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Returns the page where the user see's which nodes and apps that %% -%% are availible for monitoring %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -app_and_node_sel_page(Input)-> - [header(), - html_header(), - node_body(httpd:parse_query(Input)), - html_end()]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Returns the process tree for the application whose name is %% -%% the first value in the Inputs key/value list %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -process_tree_page(Input)-> - [header(), - html_header(), - application_javascript(httpd:parse_query(Input)), - application_body(httpd:parse_query(Input)), - html_end()]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Send trace on or off to the process thats pid is the third arg of %% -%% the inputs key/val list. Then it returns the process tree for the %% -%% the application that is the first key/val pair of input %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -toggle_trace(Input)-> - send_trace(httpd:parse_query(Input)), - [header(), - html_header(), - application_javascript(httpd:parse_query(Input)), - application_body(httpd:parse_query(Input)), - html_end()]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Creates the page that shows all information about the process that %% -%% that is the first arg of th input key/val pairs %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -process_specifickation_page(Input)-> - [header(), - html_header(), - process_body(httpd:parse_query(Input)), - html_end()]. - -application_specifickation_page(Input)-> - [header(), - html_header(), - application_env_body(httpd:parse_query(Input)), - html_end()]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% The Private functions that do the job %% -%% To build the the page that shows the applications %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Build the body of the side that shows the node name and %% -%% the application list %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -node_body([{"node",Node}|_Rest])-> - case process_info:is_node(Node) of - {true,Controlled_node,Name} -> - "<BODY BGCOLOR=\"#FFFFFF\">" ++ - node_selections_javascripts() ++ - node_selection(Controlled_node) ++ - node_title() ++ - application_tree(Controlled_node,Name) ++ - "</BODY>"; - - {false,Server_node,Name} -> - "<BODY BGCOLOR=\"#FFFFFF\">" ++ - node_selections_javascripts() ++ - node_selection(Server_node) ++ - node_title() ++ - application_tree(Server_node,Name) ++ - "</BODY>" - end; - -node_body(_Whatever)-> - node_body([{atom_to_list(node),atom_to_list(node())}]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Returns the javascript that sets a new node to monitor %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -node_selections_javascripts()-> - "<SCRIPT> - function node_selected() - { - parent.frames.base_frames.location=\"../../appmon/start_info.html\" - window.location =\"./node_info?node=\" + " ++ - "document.node_selection.nodes[document.node_selection.nodes.selectedIndex].value; - } - </SCRIPT>". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Insert the html code that shows the combobox where the user can %% -%% select another node to monitor %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -node_selection(Node)-> - " <FORM ACTION=\"./node_info\" NAME=node_selection>\n - <TABLE WIDTH=\"100%\" BORDER=\"0\">\n - <TR><TD ALIGN=\"center\">\n - <SELECT NAME=nodes onChange=\"node_selected()\">\n" ++ - print_nodes(order_nodes(Node,process_info:get_nodes())) ++ - "</SELECT>\n - </TD></TR>\n - </TABLE>\n - </FORM>". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Add the node we are working with in the beginning of the list and %% -%% remove it from other places so its always the first in the listbox %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -order_nodes(Node,Node_list)-> - [Node|lists:delete(Node,Node_list)]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Take the list of nodes and make it to a list of options to the %% -%% the combobox %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -print_nodes([])-> - []; -print_nodes([Node|Rest])-> - "<OPTION value=\"" ++ - atom_to_list(Node) ++ - "\">" ++ - atom_to_list(Node) ++ - "\n" ++ - print_nodes(Rest). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Create the header of the node info page i.e. the name of the node %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -node_title()-> - " <TABLE WIDTH=\"100%\" BORDER=\"0\"> - <TR><TD ALIGN=\"center\"><FONT SIZE=5>Applications</FONT></TD></TR> - </TABLE>\n". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Build the body of the side that shows the node i.e the application %% -%% list %% -%% Node and Node_name are the same just different types %% -%% Node are the atom Node_name the string of the node name %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -application_tree(Node,Node_name)-> - Fun=fun(Name)-> - Name_str =atom_to_list(Name), - "<LI><A HREF=\"./application_info?name=" ++ Name_str ++ - "&mode=all&node=" ++ Node_name ++ - "\" TARGET=main><B>" ++ Name_str ++ - "</B></A>" ++ print_space(15-length(Name_str),[]) ++ - "<A HREF=\"./application_env?name=" ++ Name_str ++ - "&node=" ++ Node_name ++ - "\" TARGET=\"main\"><FONT SIZE=2>spec</FONT></A></LI>\n" - end, - "<UL>" ++ - lists:map(Fun, (process_info:get_applications(Node))) ++ - "</UL>" ++ - "<FORM Name=reload>" ++ - "<INPUT TYPE=\"button\" onClick=\"node_selected()\" - VALUE=\"Reload\">\n" ++ - "</FORM>" ++ - "<!--<A HREF=\"../../appmon/application_help.html\" TARGET=main>Help</A>-->". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Print spaces between the application name and the spec link %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -print_space(N,Space)when N >0 -> - print_space(N-1," " ++ Space); -print_space(_N,Space)-> - Space. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% The Private functions that do the job %% -%% To build the the page that shows process in an application %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%Generates the javascript that govern the look of the page that %% -%%the processes of an application %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%Args is the list whit input args should be App Mode, Node -application_javascript(Args)when length(Args)>=3 -> - Vars= - "<SCRIPT> - var proc; - var app=\"" ++ element(2,lists:nth(1,Args)) ++ "\"; - var node=\"" ++ element(2,lists:nth(3,Args)) ++ "\";", - CommonFuncs= - " function reload_bottom_frame() - {parent.proc_data.location.href=\"/appmon/blank.html\";} - - function show_process_info() - { - if(proc.indexOf(\"#Port\")== -1) - { - if(proc.charAt(0)==\'<\') - window.location=\"./proc_info?name=\" + proc + \"&node=\" + node - else - { - start=proc.indexOf(\"<\"); - endpoint=proc.lastIndexOf(\">\"); - window.location=\"./proc_info?name=\" + proc.slice(start,endpoint+1) + \"&node=\" + node ; - } - } - } - - function trace() - { - if(proc.charAt(0)==\'<\') - window.location=\"./trace?name=\" + app + \"&mode=\" + get_mode() + \"&node=\" + node + \"&proc=\" + proc; - else - { - start=proc.indexOf(\"<\"); - endpoint=proc.lastIndexOf(\">\"); - window.location=\"./trace?name=\" + app + \"&mode=\" + get_mode() + \"&node=\" + node + \"&proc=\" + - proc.slice(start,endpoint+1) ; - } - - } - - function reload_page()\n - { - window.location=\"./application_info?name=\" + app + \"&mode=\" + get_mode() + \"&node=\" + node ; - } - function get_mode() - { - for (i= 0; i < document.reload_form.mode.length; i++) - { - if (document.reload_form.mode[i].checked) - return(document.reload_form.mode[i].value); - } - return(\"all\"); - }", - Vars++CommonFuncs++"</SCRIPT>"; -application_javascript(_)-> - "<SCRIPT></SCRIPT>". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Create the body i.e the process tree for the applications whose %% -%% name is the second arg in the first tuple %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%args is the list [{_,Appname},{_,Mode},{_Node}] -application_body(Args) when is_list(Args),length(Args) >= 3 -> - App=element(2,lists:nth(1,Args)), - Mode=element(2,lists:nth(2,Args)), - Node=element(2,lists:nth(3,Args)), - "<BODY BGCOLOR=\"FFFFFF\" onLoad=reload_bottom_frame() >" - ++ mode_selection(Mode) ++ - selected_app_header(App,Node) ++ process_tree(App,Mode,Node)++ - "</BODY>"; - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% If the pattern above ain't match then something is wrong %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -application_body(_Whatever)-> - "Please use the links to the left". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Create the part of the process tree page side where the user can %% -%% select the mode the view the tree in. %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -mode_selection(Mode)-> - "<FORM NAME=\"reload_form\">\n" ++ - "<TABLE>" ++ - "<TR>\n" ++ - "<!--<TD><INPUT TYPE=\"button\" NAME=\"refresh_but\" VALUE=\"Reload\" onClick=\"reload_page()\"> - </TD>\n-->" ++ - print_radio_buttons([{"all","All processes"},{"sup_child","Supervised processes"}, - {"sup","Only supervisors"}],Mode) ++ - "</TR>\n </TABLE>\n" ++ - "</FORM>". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Print the radiobuttons. if the mode is the one the current %% -%% radiobutton represent set the one checked %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -print_radio_buttons([],_)-> - []; -print_radio_buttons([{Mode,Name}|Rest],Mode)-> - "<TD><INPUT TYPE=\"radio\" NAME=\"mode\" CHECKED=\"true\" VALUE=\""++ - Mode ++"\" onClick=\"reload_page()\"> " ++Name ++ - "</TD>\n" ++ print_radio_buttons(Rest,Mode); -print_radio_buttons([{Mode1,Name}|Rest],Mode)-> - "<TD><INPUT TYPE=\"radio\" NAME=\"mode\" VALUE=\""++ Mode1 ++ - "\" onClick=\"reload_page()\"> " ++ Name ++ - "</TD>\n" ++ - print_radio_buttons(Rest,Mode). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% The part that shows the name of the application that the process %% -%% tree represent %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -selected_app_header(App,Node)-> - {Year,Mon,Day}=date(), - "<TABLE> - <TR> - <TD>Node:</TD> - <TD>" ++Node ++"</TD> - </TR> - <TR> - <TD>Application:</TD> - <TD>" ++App ++"</TD> - </TR> - <TR> - <TD>Date:</TD> - <TD>" ++ integer_to_list(Day) ++ "/" ++ - integer_to_list(Mon) ++" - "++ - integer_to_list(Year) ++ - "</TD> - </TR> - </TABLE> - <TABLE WIDTH=100%> - <TR> - <TD> - <HR WIDTH=\"80%\"> - <!--<FONT SIZE=4>Process tree</FONT> - <HR ALIGN=\"center\" WIDTH=\"80%\">--> - </TD> - </TR> - </TABLE>". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%get the process tree from process_info and build the nested %% -%% unordered list that represent the applications process tree %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -process_tree(App,Mode,Node)-> - case process_info:get_processes(list_to_atom(App), - list_to_atom(Mode), - list_to_atom(Node)) of - unknown-> - "Unknown application please update application tree"; - {Tree,Traced_dict} -> - "<UL>" ++ - htmlify_tree(Tree,Traced_dict,1,Node,Mode,App) ++ - "</UL>" - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Build each node in the tree and then build its children %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -htmlify_tree({Pid,Childs,Childs2},Proc_tab,N,Node,Mode,App)-> - case ets:lookup(Proc_tab,Pid) of - [] when N<3-> - print_pid(Pid,Node,Mode,App,notrace)++ - htmlify_prim_child(Childs,Proc_tab,N+1,Node,Mode,App) ++ - htmlify_sec_child(Childs2); - [_Traced]-> - print_pid(Pid,Node,Mode,App,"<FONT SIZE=2 COLOR=\"firebrick\">Stop Trace</FONT>")++ - htmlify_prim_child(Childs,Proc_tab,N+1,Node,Mode,App) ++ - htmlify_sec_child(Childs2); - []-> - print_pid(Pid,Node,Mode,App,"<FONT SIZE=2>Start Trace</FONT>")++ - htmlify_prim_child(Childs,Proc_tab,N+1,Node,Mode,App) ++ - htmlify_sec_child(Childs2) - end. - -print_pid(Pid,Node,_Mode,_App,notrace)-> - "<LI><A TARGET=\"proc_data\" STYLE=\"text-decoration:none; color:blue\" HREF=\"./proc_info?name=" ++ urlify_pid(Pid) ++ - "&node="++ Node ++" \" >"++ htmlify_pid(Pid,[]) ++ - "</A>"; - -print_pid([$P,$o,$r,$t|Rest],_Node,_Mode,_App,_TrMode)-> - "<LI>" ++ htmlify_pid([$P,$o,$r,$t|Rest],[]); - -print_pid(Pid,Node,Mode,App,TrMode)-> - "<LI><A TARGET=\"proc_data\" STYLE=\"text-decoration:none; color:blue\" HREF=\"./proc_info?name=" ++ - urlify_pid(Pid) ++ "&node="++ Node ++" \" >"++ - htmlify_pid(Pid,[]) ++ "</A>"++ - "   - <A HREF=\"./trace?app="++App++"&mode="++Mode++ - "&node="++Node++"&proc="++urlify_pid(Pid)++"\"> - "++TrMode++"</A>". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Change the '<' sign and the '>' sign to the html representation %% -%% of the sign %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -htmlify_pid([60|Pid],New)-> - htmlify_pid(Pid,";tl&"++New); -htmlify_pid([139|Pid],New)-> - htmlify_pid(Pid,";tl&"++New); - -htmlify_pid([62|Pid],New)-> - htmlify_pid(Pid,";tg&"++New); -htmlify_pid([155|Pid],New)-> - htmlify_pid(Pid,";tg&"++New); -htmlify_pid([Chr|Pid],New)-> - htmlify_pid(Pid,[Chr|New]); -htmlify_pid([],New)-> - lists:reverse(New). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Change the < and > sign to the representation of the signs in %% -%% the HTTP protocol %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -urlify_pid(Pid) -> - case re:run(Pid,"[<](.*)[>]",[{capture,all_but_first,list}]) of - {match,[PidStr]}-> - "%3C"++PidStr++"%3E"; - _-> - Pid - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Change the < and > sign from the representation of the signs in %% -%% the HTTP protocol %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -unurlify_pid(Pid)-> - unurlify_pid(Pid,[]). - -unurlify_pid([$%,$3,$C|Rest],New)-> - unurlify_pid(Rest,[60|New]); - -unurlify_pid([$%,$3,$E|Rest],New)-> - unurlify_pid(Rest,[62|New]); -unurlify_pid([Chr|Rest],New)-> - unurlify_pid(Rest,[Chr|New]); - -unurlify_pid([],New)-> - lists:reverse(New). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Make html of the list of primary childs %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -htmlify_prim_child([],_Proc_tab,_N,_Node,_Mode,_App)-> - []; - -htmlify_prim_child(Childs,Proc_tab,N,Node,Mode,App)-> - Fun=fun(Child)-> - htmlify_tree(Child,Proc_tab,N,Node,Mode,App) - end, - "<UL>\n" ++ lists:map(Fun,Childs) ++ "</UL>\n". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Make html of hte list whit sedondary childs, they has no childs %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -htmlify_sec_child([])-> - []; - -htmlify_sec_child(Sec_child_list)-> - Htmlify_child=fun(Pid1)-> - "<LI><FONT COLOR=\"#FF2222\">" ++ Pid1 ++ - "</FONT></LI>\n" - end, - "<UL>" ++ lists:map(Htmlify_child,Sec_child_list) ++ "</UL>\n". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% The Private functions that do the job %% -%% To build the the page that shows process data %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% The function that creates the collects the various part of %% -%% the side that shows information about a specific process, %% -%% Pid_name should be the list representation of a pid %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -process_body(Args) when length(Args)==2-> - Pid=element(2,lists:nth(1,Args)), - Node=element(2,lists:nth(2,Args)), - "<BODY BGCOLOR=\"#FFFFFF\">" ++ - process_information_table(Pid,Node) ++ "</BODY>"; - -process_body(_)-> - "<BODY BGCOLOR=\"#FFFFFF\">Please dont call this side manually</BODY>". - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Create the table that shows the name of the pid to show extended %% -%% info about %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Get the table that shows the extended info about a process %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -process_information_table(Pid_name,Node)-> - PidID=unurlify_pid(Pid_name), - case catch list_to_pid(PidID) of - Pid when is_pid(Pid) -> - get_process_table(Pid,Node); - _Other -> - io_lib:format("Not a process id ~s",[PidID]) - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Create the table that shoows the extended info about processes %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -get_process_table(Pid,Node_name) when is_list(Node_name)-> - Node=list_to_atom(Node_name), - get_process_table(Pid,Node); - -get_process_table(Pid,Node) when is_atom(Node)-> - case lists:member(Node,[node()|nodes()]) of - true-> - Proc_data=process_info:get_process_data(Pid,Node), - "<TABLE BORDER=1 > - <TR BGCOLOR=\"#8899AA\"><TD COLSPAN=6 ALIGN=\"center\" > - <FONT size=4> Process" ++ - htmlify_pid(pid_to_list(Pid),[]) ++ "</FONT> - </TD></TR>" ++ - start_process_proc_data(Proc_data) ++ - "</TABLE><BR><BR>"; - _ -> - "Please try again the Node dont exists" - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% The process information is quite messy tidi it up by creating a %% -%% table that looks like key val %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -start_process_proc_data(Proc_data)-> - %%Pic out the special cases the links and the process dict - {Special,Usual}=split_proc_data(Proc_data), - Usual2=append_empty(Usual), - UsualProcData=process_proc_data(Usual2,0), - SpecProcData=process_proc_data(Special), - UsualProcData++SpecProcData. - -append_empty(List) when length(List) rem 2 == 0 -> - List; -append_empty(List)-> - append_empty(lists:append(List,[empty])). - -split_proc_data(Proc_data)-> - Spec=lists:map(fun(Key)-> - case lists:keysearch(Key,1,Proc_data) of - {value,Data}-> - Data; - _ -> - not_included - end - end,[links,dictionary,messages]), - Spec2=clear(Spec,[]), - Usual=lists:filter(fun({Key,_Val})-> - case Key of - messages -> - false; - links -> - false; - dictionary -> - false; - _ -> - true - end - end,Proc_data), - {Spec2,Usual}. - -clear([],New)-> - New; -clear([not_included|Spec],New)-> - clear(Spec,New); -clear([Other|Spec],New)-> - clear(Spec,[Other|New]). - -process_proc_data(Data,3)-> - "</TR>"++process_proc_data(Data,0); -process_proc_data([],_N)-> - []; -process_proc_data(Data,0)-> - "<TR>"++process_proc_data(Data,1); - -process_proc_data([empty|Data],N)-> - "<TD> </TD><TD> </TD> "++process_proc_data(Data,N+1); - -process_proc_data([{current_function,MFA}|Rest],N)-> - "<TD NOWRAP=true><FONT SIZE=3><B>Current function:</B></TD><TD><FONT SIZE=3>"++ - io_lib:format("~p",[MFA]) ++"</TD>\n " ++ - process_proc_data(Rest,N+1); - -process_proc_data([{error_handler,Mod}|Rest],N)-> - "<TD NOWRAP=\"true\"><B><FONT SIZE=3>Error handler:</B></TD><TD><FONT SIZE=3>" - ++ atom_to_list(Mod) ++ "</TD>\n" ++ - process_proc_data(Rest,N+1); - -process_proc_data([{group_leader,Grp}|Rest],N)-> - "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Group leader:</B></TD><TD><FONT SIZE=3>" ++ - htmlify_pid(pid_to_list(Grp),[]) ++ "</TD>\n " ++ - process_proc_data(Rest,N+1); - -process_proc_data([{heap_size,Size}|Rest],N)-> - "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Heap size:</B></TD><TD><FONT SIZE=3>" - ++ integer_to_list(Size) ++ "</TD>\n " ++ - process_proc_data(Rest,N+1); - -process_proc_data([{initial_call,MFA}|Rest],N)-> - "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Initial call:</B></TD><TD><FONT SIZE=3>"++ - io_lib:format("~p",[MFA]) ++"</TD>\n " ++ - process_proc_data(Rest,N+1); - -process_proc_data([{message_queue_len,Size}|Rest],N)-> - "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Message queue length:</B></TD><TD><FONT SIZE=3>" ++ - integer_to_list(Size) ++ "</TD>\n " ++ - process_proc_data(Rest,N+1); - -process_proc_data([{priority,Level}|Rest],N)-> - "<TD><FONT SIZE=3><B>Process priority:</B></TD><TD><FONT SIZE=3>" ++ - atom_to_list(Level) ++ "</TD>\n " ++ - process_proc_data(Rest,N+1); - -process_proc_data([{reductions,Number}|Rest],N)-> - "<TD ><FONT SIZE=3><B>Number of executed reductions:</B></TD> - <TD><FONT SIZE=3>" ++ integer_to_list(Number) ++ "</TD>\n " ++ - process_proc_data(Rest,N+1); - -process_proc_data([{registered_name,Name}|Rest],N)-> - "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Process Name:</B></TD><TD><FONT SIZE=3>" - ++ atom_to_list(Name) ++ "</TD>\n" ++ - process_proc_data(Rest,N+1); - -process_proc_data([{stack_size,Size}|Rest],N)-> - "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Stack size:</B></TD><TD><FONT SIZE=3>" - ++ integer_to_list(Size) ++ "</TD>\n " ++ - process_proc_data(Rest,N+1); - -process_proc_data([{status,Status}|Rest],N)-> - "<TD NOWRAP=\"true\"><FONT SIZE=3><B>Process status:</B></TD><TD><FONT SIZE=3>" - ++ atom_to_list(Status) ++ "</TD>\n " ++ - process_proc_data(Rest,N+1); - -process_proc_data([{trap_exit,Boolean}|Rest],N)-> - "<TD NOWRAP=\"true\" ><FONT SIZE=3><B>Trap Exit:</B></TD><TD><FONT SIZE=3>" - ++ atom_to_list(Boolean) ++ "</TD>\n " ++ - process_proc_data(Rest,N+1); - -process_proc_data([{Key,Val}|Rest],N)-> - "<TD NOWRAP=\"true\" ><FONT SIZE=3><B>" ++ io_lib:write(Key) ++ - "</B></TD><TD><FONT SIZE=3>" ++ io_lib:write(Val) ++ - "</TD>\n " ++ - process_proc_data(Rest,N). - -process_proc_data([])-> - []; -process_proc_data([{links,List_of_pids}|Rest])-> - "<TR><TD NOWRAP=\"true\"><FONT SIZE=3><B>Links:</B></TD><TD COLSPAN=5><FONT SIZE=3>"++ print_links(List_of_pids) ++"</TD></TR>\n " ++ - process_proc_data(Rest); - -process_proc_data([{messages,Queue}|Rest])-> - "<TR><TD NOWRAP=\"true\"><FONT SIZE=3><B>Message Queue:</B></TD><TD COLSPAN=5><FONT SIZE=3>" ++ io_lib:write(Queue) ++ "</TD></TR>\n " ++ - process_proc_data(Rest); - -process_proc_data([{dictionary,Dict}|Rest])-> - "<TR><TD NOWRAP=\"true\"><FONT SIZE=3><B>Process dictionary:</B></TD><TD COLSPAN=5><FONT SIZE=3> </TD></TR>\n " ++ - get_dictionary_data(Dict) ++ - process_proc_data(Rest). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% In the process info there are the links to other processes print %% -%% this pid %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -print_links(Pids)-> - print_links(Pids,[]). - -print_links([],Links)-> - htmlify_pid(Links,[]); - -print_links([Pid],Links) when is_pid(Pid) -> - print_links([],Links ++ pid_to_list(Pid)); - -print_links([Pid],Links) when is_port(Pid) -> - print_links([],Links ++ erlang:port_to_list(Pid)); - -print_links([Pid|Rest],Links) when is_pid(Pid) -> - print_links(Rest,Links ++ pid_to_list(Pid) ++ ", "); - -print_links([Pid|Rest],Links) when is_port(Pid) -> - print_links(Rest,Links ++ erlang:port_to_list(Pid) ++ ", "). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Fix the data in the process dictionary %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -get_dictionary_data([])-> - []; - -get_dictionary_data([{Key,Val}|Dict])-> - FormatedVal=add_space(htmlify_pid(lists:flatten(fix_type(Val)),[])), - "<TR><TD><FONT SIZE=3>" ++ - htmlify_pid(lists:flatten(fix_type(Key)),[]) ++ - "</TD><TD COLSPAN=5><FONT SIZE=3>" ++ - FormatedVal++ "</TD></TR>\n" ++ - get_dictionary_data(Dict). - -add_space(List)-> - add_space(List,0,[]). -add_space([],_Len,New) -> - lists:reverse(New); -add_space([Char|Rest],Len,New)when Len<50 -> - add_space(Rest,Len+1,[Char|New]); - -add_space([$\,|Rest],_Len,New) -> - add_space(Rest,0,[$\ ,$,|New]); - -add_space([Char|Rest],Len,New) -> - add_space(Rest,Len+1,[Char|New]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Interpret the type of the data and make it to a list %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -fix_type(Val) when is_atom(Val) -> - atom_to_list(Val); -fix_type(Val) when is_float(Val) -> - float_to_list(Val); -fix_type(Val) when is_integer(Val) -> - integer_to_list(Val); -fix_type(Val) when is_list(Val) -> - case io_lib:printable_list(Val) of - true-> - case Val of - []-> - io_lib:write(Val); - _-> - Val - end; - _-> - io_lib:write(Val) - end; -fix_type(Val) when is_pid(Val) -> - pid_to_list(Val); -fix_type(Val) when is_port(Val) -> - erlang:port_to_list(Val); -fix_type(Val) when is_tuple(Val) -> - io_lib:write(Val); -fix_type(_Val) -> - []. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% The Private functions that send the trace signal to the process %% -%% thats the 4 member of the Arg list %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -send_trace(Args)when length(Args)>=4-> - {_,Proc}=lists:nth(4,Args), - Pid2=unurlify_pid(Proc), - process_info:send_trace(Pid2); - -send_trace(_Args)-> - arg_error. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Private functions that prints the application environment %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -application_env_body(Args)when length(Args)>=2 -> - App=element(2,lists:nth(1,Args)), - Node=element(2,lists:nth(2,Args)), - "<SCRIPT> - function reload_bottom_frame() - {parent.proc_data.location.href=\"/appmon/blank.html\";} - </SCRIPT> - <BODY BGCOLOR=\"#FFFFFF\" onLoad=reload_bottom_frame()>" - ++ application_env_table(App,Node) ++ "</BODY>"; - -application_env_body(_)-> - "<BODY BGCOLOR=\"#FFFFFF\">Please dont call this side manually</BODY>". - -application_env_table(App,Node)-> - case process_info:get_application_keys(list_to_atom(App), - list_to_atom(Node)) of - {ok,List}-> - "<TABLE BORDER=1>" ++ application_env_head(App,Node) ++ - print_key_list(List,[]) ++ "</TABLE>"; - _ -> - "Please try again,something went wrong" - end. - -application_env_head(App,Node)-> - "<TR BGCOLOR=\"#8899AA\"><TD ALIGN=\"center\" COLSPAN=3> - <FONT SIZE=6>" ++ App ++ "@" ++ Node ++ "</FONT>\n - </TD></TR> - <TR><TD COLSPAN=3> </TD></TR> - <TR BGCOLOR=\"#8899AA\"> - <TD><B>Key</B></TD><TD><B>Val/Sec. key</B></TD><TD><B>Sec. Val</B></TD> - </TR>". - -print_key_list([],Result)-> - Result; - -print_key_list([{application,Name}|Rest],Result)-> - print_key_list(Rest,Result ++ print_key("Application name :",Name)); - -print_key_list([{description,Desc}|Rest],Result)-> - print_key_list(Rest,Result ++ print_key("Description :",Desc)); - -print_key_list([{vsn,Ver}|Rest],Result)-> - print_key_list(Rest,Result ++ print_key("Version :",Ver)); - -print_key_list([{id,Id}|Rest],Result)-> - print_key_list(Rest,Result ++ print_key("ID:",fix_type(Id))); - -print_key_list([{modules,Mods}|Rest],Result)-> - print_key_list(Rest,Result ++ print_key("Modules:"," ") ++ - print_secondary_list(Mods,[])); - -print_key_list([{maxP,Max}|Rest],Result)-> - print_key_list(Rest,Result ++ - print_key("Max nr of processes",fix_type(Max))); - -print_key_list([{maxT,Max}|Rest],Result)-> - print_key_list(Rest,Result ++ - print_key("Max running sec:",fix_type(Max))); - -print_key_list([{registered,Names}|Rest],Result)-> - print_key_list(Rest,Result ++ - print_key("Registered names:"," ") ++ - print_secondary_list(Names,[])); - -print_key_list([{applications,Apps}|Rest],Result)-> - print_key_list(Rest,Result ++ print_key("Depends on:"," ") ++ - print_secondary_list(Apps,[])); - -print_key_list([{included_applications,Inc_apps}|Rest],Result)-> - print_key_list(Rest,Result ++ - print_key("Included applications:", - fix_type(Inc_apps))); - -print_key_list([{env,Env}|Rest],Result)-> - print_key_list(Rest,Result ++ - print_key("Environment:",fix_type(Env))); - -print_key_list([{mod,Mod}|Rest],Result)-> - print_key_list(Rest,Result ++ - print_key("Application callback mod:", - fix_type(Mod))); - -print_key_list([{start_phases,Phase_arg}|Rest],Result)-> - print_key_list(Rest,Result ++ - print_key("Application callback mod:", - fix_type(Phase_arg))); - -print_key_list([_|Rest],Result)-> - print_key_list(Rest,Result). - -print_key(Label,Val)-> - "<TR> - <TD><B>" ++ Label ++ "</B></TD><TD>" ++ Val ++ - "</TD><TD> </TD> - </TR>". - -print_key2(Label,Val)-> - "<TR> - <TD> </TD><TD>" ++ Label ++ "</TD><TD>" ++ Val ++ "</TD> - </TR>". - -print_secondary_list([],Result)-> - Result; -print_secondary_list([{Mod,Ver}|Rest],Result) -> - print_secondary_list(Rest,Result ++ - print_key2(fix_type(Mod),fix_type(Ver))); - -print_secondary_list([Mod|Rest],Result) -> - print_secondary_list(Rest,Result ++ - print_key2(fix_type(Mod)," ")). diff --git a/lib/appmon/src/process_info.erl b/lib/appmon/src/process_info.erl deleted file mode 100644 index e5d44ae50e..0000000000 --- a/lib/appmon/src/process_info.erl +++ /dev/null @@ -1,662 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2001-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(process_info). --behavior(gen_server). - --export([start/0, start_link/0, stop/0]). --export([is_node/1, get_nodes/0, - get_applications/1, get_application_keys/2, - get_processes/3, get_process_data/2, - send_trace/1]). - -%% gen_server callbacks --export([init/1, handle_call/3, handle_cast/2, handle_info/2, - terminate/2, code_change/3]). - --record(data, {que=undef, - procs=undef, - links=undef, - links2=undef}). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% %% -%% Functions to retrieve information about which application %% -%% at the node %% -%% %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -start() -> - gen_server:start({local, proc_info}, process_info, [], []). - -start_link() -> - gen_server:start_link({local, proc_info}, process_info, [], []). - -stop() -> - gen_server:call(proc_info, stop, 1000). - -%% is_node(NodeS) -> {bool(), Node, NodeS2} -%% NodeS = NodeS2 = string() -%% Node = node() -is_node(NodeS) -> - Node = list_to_atom(NodeS), - case lists:member(Node, [node()|nodes()]) of - true-> - {true, Node, NodeS}; - false -> - {false, node(), atom_to_list(node())} - end. - -%% get_nodes() -> [node()] -get_nodes() -> - [node()|nodes()]. - -%% get_applications(Node) -> [App] -%% Node = node() -%% App = atom() -%% Returns the list of all applications with a supervision tree (that -%% is, not library applications such as stdlib) at Node. -get_applications(Node) -> - Info = rpc:call(Node, application, info, []), - {value, {running, Apps}} = lists:keysearch(running, 1, Info), - [App || {App, Pid} <- Apps, is_pid(Pid)]. - -%% get_application_keys(App, Node) -> {ok, Keys} | {error, Reason} -%% Node = node() -%% App = atom() -%% Keys = [{Key, Val}] -%% Key = atom() -%% Val = term() -%% Reason = badapp | badrpc -get_application_keys(App, Node) -> - case rpc:call(Node, application, get_all_key, [App]) of - {ok, Keys} -> - {ok, Keys}; - undefined -> - {error, badapp}; - {badrpc, _} -> - {error, badrpc} - end. - -%% get_processes(App, Mode, Node) -> {Tree, Dict} | unknown -%% App = atom() -%% Mode = sup | sup_child | all -%% Node = node() -get_processes(App, Mode, Node) -> - gen_server:call(proc_info, {get_processes, App, Mode, Node}). - -%% get_process_data(Pid, Node) -> ProcData -%% Pid = pid() -%% Node = node() -%% ProcData -- see erlang:process_info/1 -get_process_data(Pid, Node) -> - case rpc:call(Node, erlang, process_info, [Pid]) of - {badrpc, _} -> - [{error,"Please try again"}]; - Res -> - Res - end. - -%% send_trace(PidL) -> void() -send_trace(PidL) -> - gen_server:call(proc_info, {send_trace, PidL}). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% %% -%% gen_server callbacks %% -%% %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -init([]) -> - {ok, ets:new(procs, [])}. - -handle_call({get_processes, App, Mode, Node}, _From, State) -> - case do_get_processes(App, Mode, Node) of - unknown -> - {reply, unknown, State}; - Tree -> - {reply, {Tree, State}, State} - end; -handle_call({send_trace, PidL}, _From, State) -> - do_send_trace(PidL, State), - {reply, ok, State}; -handle_call(stop, _From, State) -> - {stop, normal, ok, State}. - -handle_cast(_, State) -> - {noreply, State}. - -handle_info(_, State) -> - {noreply, State}. - -terminate(_Reason, _State) -> - ok. - -code_change(_, State, _) -> - {ok, State}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% %% -%% Internal functions %% -%% %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% do_get_processes(App, Mode, Node) -> Tree | unknown -%% App = atom() -%% Mode = all | sup | sup_childs -%% Node = node() -%% Tree = term() -do_get_processes(App, Mode, Node) -> - case rpc:call(Node, application_controller, get_master, [App]) of - Pid when is_pid(Pid) -> - start_collecting_data(Pid, Mode, Node); - undefined -> - unknown - end. - -%% Initiate the database, get the processes and the links. -%% Then build lists and return them. -start_collecting_data(Pid, Mode, Node) -> - Db = get_database(), - {Db2, Tree} = build_graph({master,Pid}, Db, Pid, Mode, Node), - delete_database(Db2), - Tree. - -get_database() -> - P = ets:new(procs,[]), - L = ets:new(link,[bag]), - L2 = ets:new(link2,[bag]), - Q = queue:new(), - ets:insert(P, {whereis(application_controller), crap}), - ets:insert(P, {whereis(gs), crap}), - #data{que=Q, procs=P, links=L, links2=L2}. - -delete_database(Db) -> - ets:delete(Db#data.procs), - ets:delete(Db#data.links), - ets:delete(Db#data.links2). - -%% The thought is -%% 1. Get the processes that links to Pid. -%% Pid is the application master the first time. -%% 2. Add the processes to the database and clear the list of children -%% from processes which for some resason not should be there. -%% 3. Queue the children, so we later can se if they have any links. -%% 4. Add links to the childrens. -%% 5. When the whole tree is retreived remove the unnecessary processes -%% depending on the mode. -%% 6. Take all links that point to the same pid and sort out -%% the primary and secondary relations. -%% If more than one process links to the same process, the relation -%% between a supervisor and a process is primary. The rest is -%% secondary, there is no different in real world just in logic -%% between a secondary and a primary relation. -%% When all processes in the application is collected, -%% fix secondary links and return the tree. -build_graph(finish, Db, Grp, Mode, Node) -> - Db = fix_links(Db, Grp, Node), - delete_unwanted(Db, Mode, Grp), - Tree = start_tree(Db, Node), - {Db, Tree}; -build_graph(Pid, Db, Grp, Mode, Node) -> - Children = get_children(Pid, Mode, Node), - Children2 = add_and_remove(Children, Pid, Db, Grp, Node), - Q2 = queue_children(Db#data.que, Children2), - add_children(Pid, Db, Children2, 1), - case queue:out(Q2) of - {empty, _}-> - build_graph(finish, Db, Grp, Mode, Node); - {{value,NPid}, Q3}-> - Db2 = Db#data{que=Q3}, - build_graph(NPid,Db2,Grp,Mode,Node) - end. - -%% Collect the processes which the current process has a link to -%% Pid is now the application_master and the application master's -%% child is the application supervisor but in reality there are two -%% application master processes. -%% Fix this by reordering the processes a little. -get_children({master,Pid}, _Mode, Node) when is_pid(Pid) -> - %% Get the master pid - MPid = case application_master:get_child(Pid) of - {Pid1, _App} -> Pid1; - Pid1 -> Pid1 - end, - %% Get the second appplication master process and order them - %% correctly - case rpc:call(Node, erlang, process_info, [MPid,links]) of - {links, [H|T]} -> [H,MPid|T]; - {links, []} -> MPid - end; -get_children({Pid, _Name}, _Mode, Node) when is_pid(Pid), - Node==node(Pid) -> - {links,Links} = rpc:call(Node, erlang, process_info, [Pid,links]), - Links; -get_children(Pid, _Mode, Node) when is_pid(Pid), Node==node(Pid) -> - {links,Links} = rpc:call(Node, erlang, process_info, [Pid,links]), - Links; -get_children(Pid, _Mode, Node) when is_pid(Pid), Node/=node(Pid) -> - []; -get_children(Port, _Mode, _Node) when is_port(Port) -> - []. - -%% Add the links to the database. -%% The first case -- when it is the application master process -- there -%% is only one real child even though there are more links. -add_children({master,Pid}, Db, [Child|_Rest], N) -> - add_child(Pid, Db, Child, N); -add_children(_Pid, _Db, [], _N) -> - ok; -add_children(Pid, Db, [Child|Rest], N) -> - add_child(Pid, Db, Child, N), - add_children(Pid, Db, Rest, N+1). - -add_child(Pid, Db, Child, N) -> - case ets:match_object(Db#data.links, {Pid,Child,'_'}) of - [] -> - ets:insert(Db#data.links, {Pid,Child,N}); - _ -> - ok - end. - -%% Add the list of processes to the queue. -queue_children(Queue, []) -> - Queue; -queue_children(Queue, [H|T]) -> - Q = queue:in(H, Queue), - queue_children(Q, T). - -%% The processess that we already has added to the database are -%% not children to the current process, so we don't need to add them a -%% second time. -remove_used_children([], _Db, New_list) -> - lists:reverse(New_list); -remove_used_children([Child|Rest], Db, New) -> - case ets:lookup(Db#data.procs, Child) of - [] -> - remove_used_children(Rest, Db, [Child|New]); - _ -> - remove_used_children(Rest, Db, New) - end. - -%% Take the list of links and separate it into a list with ports and a -%% list with pids. -separate_ports([], Pids, Ports) -> - {Pids, Ports}; -separate_ports([Child|Rest], Pids, Ports) -> - if - is_port(Child) -> - separate_ports(Rest, Pids, [Child|Ports]); - is_pid(Child) -> - separate_ports(Rest, [Child|Pids], Ports) - end. - -%% Add the current pid to the ets table with processes and clear -%% the list of children from processes that should not be there. -%% In the first case, no children are used so it's not necessary. -add_and_remove(Children, {master,Pid}, Db, _Grp, Node) - when is_pid(Pid), Node==node(Pid) -> - ets:insert(Db#data.procs, {Pid, {master,master}, controller}), - {_Pids,Ports} = separate_ports(Children, [], []), - Ports++Children; -%% This clause is removable when using only link as retrieving mode . -add_and_remove(Children, {Pid,_Name}, Db, Grp, Node) - when is_pid(Pid), Node==node(Pid) -> - ets:insert(Db#data.procs, {Pid, - rpc:call(Node,erlang,process_info, - [Pid,registered_name])}), - {Pids, Ports} = separate_ports(Children, [], []), - Children1 = remove_used_children(Pids, Db, []), - Children2 = remove_others_children(Children1, Grp, Node), - Ports++Children2; -add_and_remove(Children, Pid, Db, Grp, Node) when is_pid(Pid), - Node==node(Pid) -> - ets:insert(Db#data.procs, {Pid, - rpc:call(Node,erlang,process_info, - [Pid,registered_name])}), - {Pids, Ports} = separate_ports(Children, [], []), - Children1 = remove_used_children(Pids, Db, []), - Children2 =remove_others_children(Children1, Grp, Node), - Ports++Children2; -add_and_remove(_Children, Pid, _Db, _Grp, Node) when is_pid(Pid), - Node/=node(Pid) -> - []; -%% Take care of the ports, don't add them to the table with processes. -add_and_remove(_Children, Pid, _Db, _Grp, _Node) when is_port(Pid) -> - []. - -%% Control that the application's group leader is the group leader of -%% Pid -group_leader_check({Pid,_Name}, Grp, Node) -> - group_leader_check(Pid, Grp, Node); -group_leader_check(Pid, Grp, Node) -> - case rpc:call(Node, erlang, process_info, [Pid,group_leader]) of - {_Item, Grp} -> yes; - _ -> no - end. - -%% Take the list of children and remove the ones with anoother group -%% leader. -remove_others_children(Children, Grp, Node) -> - lists:filter(fun(Child) -> - case group_leader_check(Child, Grp, Node) of - yes -> true; - no -> false - end - end, - Children). - -%% Mark the processes in the procs table as either supervisor or worker. -fix_links(Db, Leader, Node) -> - {Sup,_Work} = mark_supervisors_workers(Db, Leader, Node), - ets:match_delete(Db#data.procs, {'_',crap}), - [_Pid|Procs] = ets:tab2list(Db#data.procs), - N_links = get_n_links(Procs, Db#data.links, []), - N_links2 = take_sup_links(Sup, Db#data.links, N_links), - add_shared_links(N_links2, Db#data.links2), - Db. - -%% Add the links that point to the same child to the shared links table -add_shared_links(N_links, Links2) -> - Insert_fun = fun(Link) -> ets:insert(Links2, Link) end, - lists:map(fun(List) -> lists:map(Insert_fun, List) end, N_links). - -%% Take the list of links that point to the same children and remove -%% the ones that are children to supervisors. -%% The first argument is a list of the supervisors. -%% N_links contains a list of list of links that points to the same -%% child. -take_sup_links([], _Db, N_links) -> - N_links; -take_sup_links([H|Supervised], Links_table, N_links) -> - N_list_fun = fun(Link) -> - insert_sup_links(Link, H, Links_table) - end, - N_links2 = lists:map(fun(Link_list) -> - lists:filter(N_list_fun,Link_list) - end, - N_links), - take_sup_links(Supervised, Links_table, N_links2). - -%% Insert the supervised links in the primary links list. -%% This function should be used as a fun to the filter function in -%% take_sup_links/3. -insert_sup_links({From,To,N}, Sup, Links_table) -> - case From of - Sup -> - ets:insert(Links_table, {From,To,N}), - false; - _ -> - true - end. - -%% Get the links which points to the same children. -get_n_links([], _Links, N_link) -> - N_link; -get_n_links([{Pid,_,_}|Procs], Links, N_link) -> - case ets:match_object(Links, {'_',Pid,'_'}) of - L when length(L)>1 -> - ets:match_delete(Links, {'_',Pid,'_'}), - get_n_links(Procs, Links, [L|N_link]); - _L -> - get_n_links(Procs, Links, N_link) - end; -get_n_links([{Pid,_}|Procs], Links, N_link) -> - case ets:match_object(Links, {'_',Pid,'_'}) of - L when length(L)>1 -> - ets:match_delete(Links, {'_',Pid,'_'}), - get_n_links(Procs, Links, [L|N_link]); - _L -> - get_n_links(Procs, Links, N_link) - end. - -%% Mark the processes that are in the supervisor tree as either worker -%% or supervisor. -mark_supervisors_workers(Db, Leader, Node) -> - %% Get the supervisors and workers. - {Sup_list, Worker_list} = get_by_supervisors1(Leader), - %% Update the supervisor pids. - lists:map(fun(Pid) -> - ets:insert(Db#data.procs, - {Pid, - rpc:call(Node, erlang,process_info, - [Pid,registered_name]), - supervisor}) - end, - Sup_list), - %% Update the worker pids. - lists:map(fun(Pid) -> - ets:insert(Db#data.procs, - {Pid, - rpc:call(Node, erlang,process_info, - [Pid,registered_name]), - worker}) - end, - Worker_list), - {lists:reverse(Sup_list), Worker_list}. - -%% The second way to retrieve the applications processes is to go by -%% the supervision tree. -get_by_supervisors1(Leader) -> - case application_master:get_child(Leader) of - {Pid, _Name}-> - get_by_supervisors([{namn,Pid,supervisor,list_of_mods}], - [], []); - Pid -> - get_by_supervisors([{namn,Pid,supervisor,list_of_mods}], - [], []) - end. - -get_by_supervisors([], Sup, Work) -> - {Sup, Work}; -get_by_supervisors([{_,Pid,supervisor,_}|Rest], Sup, Work) - when is_pid(Pid) -> - Children = supervisor:which_children(Pid), - Children2 = lists:append(Children, Rest), - get_by_supervisors(Children2, [Pid|Sup], Work); -get_by_supervisors([{_,Pid,_,_}|Rest], Sup, Work) when is_pid(Pid) -> - get_by_supervisors(Rest, Sup, [Pid|Work]); -get_by_supervisors([_Whatever|Rest], Sup, Work) -> - get_by_supervisors(Rest, Sup, Work). - -%% Use pattern matching to select mode and delete the unneccesary pids -delete_unwanted(Db, sup_child, App_pid) -> - delete_not_in_supervisor_tree(Db), - add_main_link(Db, App_pid), - Db; -delete_unwanted(Db, all, _App_pid) -> - Db; -delete_unwanted(Db, sup, App_pid) -> - delete_workers(Db), - delete_not_in_supervisor_tree(Db), - add_main_link(Db, App_pid), - Db. - -add_main_link(Db, App_pid) -> - case application_master:get_child(App_pid) of - {Pid, _Name} when is_pid(Pid) -> - ets:insert(Db#data.links, {App_pid,Pid,1}); - Pid when is_pid(Pid) -> - ets:insert(Db#data.links, {App_pid,Pid,1}); - _ -> - false - end. - -%% Delete the processes that are in the supervision tree but are -%% workers, and their links. -delete_workers(Db) -> - Pids = ets:match_object(Db#data.procs, {'_','_',worker}), - Pids2 = - lists:map( - fun({Pid,_,_}) -> - %% Remove the unwanted pids from the process table. - ets:match_delete(Db#data.procs, {Pid,'_','_'}), - %% Remove the links to and from the pid. - ets:match_delete(Db#data.links, {Pid,'_','_'}), - ets:match_delete(Db#data.links, {'_',Pid,'_'}), - ets:match_delete(Db#data.links2, {Pid,'_','_'}), - ets:match_delete(Db#data.links2, {'_',Pid,'_'}) - end, - Pids), - Pids2. - -%% Delete the processes that are not in the supervision tree. -delete_not_in_supervisor_tree(Db) -> - Pids = ets:match_object(Db#data.procs,{'_','_'}), - Pids2 = - lists:map( - fun({Pid,_}) -> - %% Remove the unwanted from the process table. - ets:match_delete(Db#data.procs, {Pid,'_'}), - %% Remove the links to and from the pid. - ets:match_delete(Db#data.links, {Pid,'_','_'}), - ets:match_delete(Db#data.links, {'_',Pid,'_'}), - ets:match_delete(Db#data.links2, {Pid,'_','_'}), - ets:match_delete(Db#data.links2, {'_',Pid,'_'}) - end, - Pids), - Pids2. - -%% Start generating the tree. -start_tree(Db, Node) -> - case get_master(Db) of - no -> false; - Pid -> - build_node(Pid, Db, Node) - end. - -%% Build a node and then it runs itself on every child to the current -%% pid. -build_node(Pid, Db, Node) when is_pid(Pid), Node==node(Pid) -> - Sort_fun = fun sort_order/2, - Fix_sec_name_fun = fun(Pid2) -> get_link_name(Pid2, Db) end, - Build_tree_fun = fun({_,Pid1,_}) -> build_node(Pid1,Db,Node) end, - Children = ets:match_object(Db#data.links, {Pid,'_','_'}), - Children1 = lists:sort(Sort_fun, Children), - Sec_children = ets:match_object(Db#data.links2, {Pid,'_','_'}), - {get_name(Pid,Db), - lists:map(Build_tree_fun,Children1), - lists:map(Fix_sec_name_fun,Sec_children)}; -build_node(Pid, _Db, Node) when is_pid(Pid), Node/=node(Pid) -> - {"Runs on another node:"++erlang:pid_to_list(Pid), [], []}; -build_node(Pid, _Db, _Node) when is_port(Pid) -> - {"Port :"++erlang:port_to_list(Pid), [], []}. - -%% Select the name of the pid from the database where we previosly -%% added it. -get_name(Pid, Db) -> - case ets:lookup(Db#data.procs, Pid) of - [{_,{_,master},_}] -> pid_to_list(Pid); - [{_,{_,Name}}] -> atom_to_list(Name)++" : "++pid_to_list(Pid); - [{_,{_,Name},_}] -> atom_to_list(Name)++" : "++pid_to_list(Pid); - _ -> pid_to_list(Pid) - end. - -%% Select the name of the process which we have a link to. -get_link_name({_,Pid,_}, Db) when is_pid(Pid) -> - case ets:lookup(Db#data.procs, Pid) of - [{_,{_,Name}}] -> atom_to_list(Name)++" : "++pid_to_list(Pid); - [{_,{_,Name},_}] -> atom_to_list(Name)++" : "++pid_to_list(Pid); - _ -> pid_to_list(Pid) - end; -get_link_name({_,Port,_}, _Db) when is_port(Port) -> - "Port :"++" : "; -get_link_name(_, _) -> - "". - -%% Sort the links in the order they where added, in ascending order. -sort_order({_,_,N1}, {_,_,N2}) when N1>N2 -> true; -sort_order(_N1, _N2) -> false. - -%% Select the pid of the application master. -get_master(Db) -> - case ets:match_object(Db#data.procs, - {'_',{master,master},controller}) of - [{Pid,_,_}|_Rest] -> Pid; - _ -> no - end. - -%% The main function to handle tracing. -%% Checks if the process is in the table with traced processes. If so, -%% it stops the trace, otherwise it starts the trace. -do_send_trace(PidL, Traced_tab) -> - Pid = list_to_pid(PidL), - Key = get_key(Pid), - case catch ets:lookup(Traced_tab, Key) of - [] -> - trace_process(Pid, Key, true, Traced_tab); - [_Object]-> - trace_process(Pid, Key, false, Traced_tab) - end, - filter_procs(Traced_tab, ets:tab2list(Traced_tab)). - -get_key(Pid) -> - Node = node(Pid), - case rpc:call(Node, erlang, process_info, [Pid,registered_name]) of - [] -> pid_to_list(Pid); - {registered_name, Name} -> - atom_to_list(Name)++" : "++pid_to_list(Pid) - end. - -%% Tries to toggle the trace flag for the process. -trace_process(Pid, Key, On_or_off, Procs_tab) -> - case rpc:call(node(Pid), sys, trace, [Pid,On_or_off,1000]) of - timeout -> - Node = node(Pid), - io:fwrite("timeout node= ~w, Pid= ~w mode= ~w ~n", - [Node, Pid, On_or_off]); - {badrpc, _} -> - Node = node(Pid), - io:fwrite("badrpc node= ~w, Pid= ~w mode= ~w ~n", - [Node, Pid, On_or_off]); - Res -> - Node = node(Pid), - io:fwrite("anymode ~w node= ~w, Pid= ~w mode= ~w ~n", - [Res, Node, Pid,On_or_off]), - case On_or_off of - true -> ets:insert(Procs_tab, {Key,On_or_off}); - false -> ets:delete(Procs_tab, Key) - end - end. - -%% Check if the processes in the ets table with traced processes -%% are alive. If not, remove them. -filter_procs(Tab, Tab_list) -> - lists:foreach(fun({Key,_Val}) -> is_alive(Key, Tab) end, Tab_list). - -is_alive(Key, Tab) -> - case get_pid(Key) of - nopid -> false; - Pid -> is_alive2(Pid, Key, Tab) - end. - -%% Key is either a pid in list form or Pidname:Pid in list form. -get_pid(Key) -> - case catch list_to_pid(string:substr(Key,string:rchr(Key,$<))) of - Pid when is_pid(Pid) -> - Pid; - _ -> - nopid - end. - -is_alive2(Pid, Key, Tab) -> - case catch rpc:call(node(Pid), erlang, is_process_alive, [Pid]) of - true -> true; - false -> - catch ets:delete(Tab, Key), - ok - end. diff --git a/lib/appmon/vsn.mk b/lib/appmon/vsn.mk deleted file mode 100644 index 5585c5e1c2..0000000000 --- a/lib/appmon/vsn.mk +++ /dev/null @@ -1 +0,0 @@ -APPMON_VSN = 2.1.14.2 diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml index 73d75851cf..1459f696a0 100644 --- a/lib/compiler/doc/src/compile.xml +++ b/lib/compiler/doc/src/compile.xml @@ -350,12 +350,18 @@ module.beam: module.erl \ parsed code before the code is checked for errors.</p> </item> - <tag><c>asm</c></tag> + <tag><c>from_asm</c></tag> <item> <p>The input file is expected to be assembler code (default file suffix ".S"). Note that the format of assembler files - is not documented, and may change between releases - this - option is primarily for internal debugging use.</p> + is not documented, and may change between releases.</p> + </item> + + <tag><c>from_core</c></tag> + <item> + <p>The input file is expected to be core code (default + file suffix ".core"). Note that the format of core files + is not documented, and may change between releases.</p> </item> <tag><c>no_strict_record_tests</c></tag> diff --git a/lib/compiler/src/beam_block.erl b/lib/compiler/src/beam_block.erl index cf5244e1ce..402fbe2e2e 100644 --- a/lib/compiler/src/beam_block.erl +++ b/lib/compiler/src/beam_block.erl @@ -123,15 +123,24 @@ is_last_bool([], _) -> false. collect_block(Is) -> collect_block(Is, []). +collect_block([{allocate,N,R}|Is0], Acc) -> + {Inits,Is} = lists:splitwith(fun ({init,{y,_}}) -> true; + (_) -> false + end, Is0), + collect_block(Is, [{set,[],[],{alloc,R,{nozero,N,0,Inits}}}|Acc]); collect_block([{allocate_zero,Ns,R},{test_heap,Nh,R}|Is], Acc) -> - collect_block(Is, [{set,[],[],{alloc,R,{no_opt,Ns,Nh,[]}}}|Acc]); + collect_block(Is, [{set,[],[],{alloc,R,{zero,Ns,Nh,[]}}}|Acc]); collect_block([I|Is]=Is0, Acc) -> case collect(I) of error -> {reverse(Acc),Is0}; Instr -> collect_block(Is, [Instr|Acc]) end. +collect({allocate,N,R}) -> {set,[],[],{alloc,R,{nozero,N,0,[]}}}; collect({allocate_zero,N,R}) -> {set,[],[],{alloc,R,{zero,N,0,[]}}}; +collect({allocate_heap,Ns,Nh,R}) -> {set,[],[],{alloc,R,{nozero,Ns,Nh,[]}}}; +collect({allocate_heap_zero,Ns,Nh,R}) -> {set,[],[],{alloc,R,{zero,Ns,Nh,[]}}}; +collect({init,D}) -> {set,[D],[],init}; collect({test_heap,N,R}) -> {set,[],[],{alloc,R,{nozero,nostack,N,[]}}}; collect({bif,N,F,As,D}) -> {set,[D],As,{bif,N,F}}; collect({gc_bif,N,F,R,As,D}) -> {set,[D],As,{alloc,R,{gc_bif,N,F}}}; @@ -144,6 +153,10 @@ collect({set_tuple_element,S,D,I}) -> {set,[],[S,D],{set_tuple_element,I}}; collect({get_list,S,D1,D2}) -> {set,[D1,D2],[S],get_list}; collect(remove_message) -> {set,[],[],remove_message}; collect({'catch',R,L}) -> {set,[R],[],{'catch',L}}; +collect(fclearerror) -> {set,[],[],fclearerror}; +collect({fcheckerror,{f,0}}) -> {set,[],[],fcheckerror}; +collect({fmove,S,D}) -> {set,[D],[S],fmove}; +collect({fconv,S,D}) -> {set,[D],[S],fconv}; collect(_) -> error. %% embed_lines([Instruction]) -> [Instruction] diff --git a/lib/compiler/src/beam_flatten.erl b/lib/compiler/src/beam_flatten.erl index 25428c0c10..5603a677e8 100644 --- a/lib/compiler/src/beam_flatten.erl +++ b/lib/compiler/src/beam_flatten.erl @@ -51,6 +51,7 @@ norm_block([], Acc) -> Acc. norm({set,[D],As,{bif,N,F}}) -> {bif,N,F,As,D}; norm({set,[D],As,{alloc,R,{gc_bif,N,F}}}) -> {gc_bif,N,F,R,As,D}; +norm({set,[D],[],init}) -> {init,D}; norm({set,[D],[S],move}) -> {move,S,D}; norm({set,[D],[S],fmove}) -> {fmove,S,D}; norm({set,[D],[S],fconv}) -> {fconv,S,D}; diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl index b29a3565e4..d57fb80ac2 100644 --- a/lib/compiler/src/beam_jump.erl +++ b/lib/compiler/src/beam_jump.erl @@ -202,19 +202,19 @@ is_label(_) -> false. move(Is) -> move_1(Is, [], []). -move_1([I|Is], End0, Acc0) -> +move_1([I|Is], Ends, Acc0) -> case is_exit_instruction(I) of false -> - move_1(Is, End0, [I|Acc0]); + move_1(Is, Ends, [I|Acc0]); true -> - case extract_seq(Acc0, [I|End0]) of + case extract_seq(Acc0, [I]) of no -> - move_1(Is, End0, [I|Acc0]); + move_1(Is, Ends, [I|Acc0]); {yes,End,Acc} -> - move_1(Is, End, Acc) + move_1(Is, [End|Ends], Acc) end end; -move_1([], End, Acc) -> reverse(Acc, End). +move_1([], Ends, Acc) -> reverse(Acc, lists:append(reverse(Ends))). extract_seq([{line,_}=Line|Is], Acc) -> extract_seq(Is, [Line|Acc]); diff --git a/lib/compiler/src/beam_type.erl b/lib/compiler/src/beam_type.erl index 3ec57a67da..58c0f765ae 100644 --- a/lib/compiler/src/beam_type.erl +++ b/lib/compiler/src/beam_type.erl @@ -142,6 +142,12 @@ simplify_float(Is0, Ts0) -> throw:not_possible -> not_possible end. +simplify_float_1([{set,[],[],fclearerror}|Is], Ts, Rs, Acc) -> + simplify_float_1(Is, Ts, Rs, clearerror(Acc)); +simplify_float_1([{set,[],[],fcheckerror}|Is], Ts, Rs, Acc) -> + simplify_float_1(Is, Ts, Rs, checkerror(Acc)); +simplify_float_1([{set,[{fr,_}],_,_}=I|Is], Ts, Rs, Acc) -> + simplify_float_1(Is, Ts, Rs, [I|Acc]); simplify_float_1([{set,[D0],[A0],{alloc,_,{gc_bif,'-',{f,0}}}}=I|Is]=Is0, Ts0, Rs0, Acc0) -> case tdb_find(A0, Ts0) of diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl index e9911fefd9..36f3200d11 100644 --- a/lib/compiler/src/beam_utils.erl +++ b/lib/compiler/src/beam_utils.erl @@ -759,6 +759,12 @@ live_opt([{allocate,_,Live}=I|Is], _, D, Acc) -> live_opt(Is, live_call(Live), D, [I|Acc]); live_opt([{allocate_heap,_,_,Live}=I|Is], _, D, Acc) -> live_opt(Is, live_call(Live), D, [I|Acc]); +live_opt([{'%',_}=I|Is], Regs, D, Acc) -> + live_opt(Is, Regs, D, [I|Acc]); +live_opt([{recv_set,_}=I|Is], Regs, D, Acc) -> + live_opt(Is, Regs, D, [I|Acc]); +live_opt([{recv_mark,_}=I|Is], Regs, D, Acc) -> + live_opt(Is, Regs, D, [I|Acc]); live_opt([], _, _, Acc) -> Acc. diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl index 47d446273b..38a733751a 100644 --- a/lib/compiler/src/compile.erl +++ b/lib/compiler/src/compile.erl @@ -417,6 +417,10 @@ pass(from_core) -> pass(from_asm) -> {".S",[?pass(beam_consult_asm)|asm_passes()]}; pass(asm) -> + %% TODO: remove 'asm' in R18 + io:format("compile:file/2 option 'asm' has been deprecated and will be " + "removed in R18.~n" + "Use 'from_asm' instead.~n"), pass(from_asm); pass(from_beam) -> {".beam",[?pass(read_beam_file)|binary_passes()]}; @@ -1613,7 +1617,7 @@ compile_beam(File0, _OutFile, Opts) -> compile_asm(File0, _OutFile, Opts) -> File = shorten_filename(File0), - case file(File, [asm|make_erl_options(Opts)]) of + case file(File, [from_asm|make_erl_options(Opts)]) of {ok,_Mod} -> ok; Other -> Other end. diff --git a/lib/compiler/test/compilation_SUITE.erl b/lib/compiler/test/compilation_SUITE.erl index d517029b1b..93b2fb4ea5 100644 --- a/lib/compiler/test/compilation_SUITE.erl +++ b/lib/compiler/test/compilation_SUITE.erl @@ -278,6 +278,16 @@ try_it(StartNode, Module, Conf) -> ?line ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]), ?line test_server:timetrap_cancel(LastDog), + AsmDog = test_server:timetrap(test_server:minutes(10)), + io:format("Compiling (from assembly): ~s\n", [Src]), + {ok,_} = compile:file(Src, [to_asm,{outdir,Out},report|OtherOpts]), + Asm = filename:join(Out, lists:concat([Module, ".S"])), + CompRc3 = compile:file(Asm, [from_asm,{outdir,Out},report|OtherOpts]), + io:format("Result: ~p\n",[CompRc3]), + {ok,_} = CompRc3, + ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]), + test_server:timetrap_cancel(AsmDog), + case StartNode of false -> ok; true -> ?line test_server:stop_node(Node) diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl index 66ce6c00ab..4ec75d015e 100644 --- a/lib/compiler/test/compile_SUITE.erl +++ b/lib/compiler/test/compile_SUITE.erl @@ -769,8 +769,8 @@ do_core({M,A}, Outdir) -> error end. -%% Compile to Beam assembly language (.S) and the try to -%% run .S throught the compiler again. +%% Compile to Beam assembly language (.S) and then try to +%% run .S through the compiler again. asm(Config) when is_list(Config) -> ?line Dog = test_server:timetrap(test_server:minutes(20)), @@ -794,7 +794,7 @@ do_asm(Beam, Outdir) -> {ok,Fd} = file:open(AsmFile, [write,{encoding,utf8}]), beam_listing:module(Fd, Asm), ok = file:close(Fd), - case compile:file(AsmFile, [from_asm,no_postopt,binary,report]) of + case compile:file(AsmFile, [from_asm,binary,report]) of {ok,M,_} -> ok = file:delete(AsmFile); Other -> diff --git a/lib/debugger/src/Makefile b/lib/debugger/src/Makefile index 85754da219..90189dd297 100644 --- a/lib/debugger/src/Makefile +++ b/lib/debugger/src/Makefile @@ -45,20 +45,6 @@ MODULES= \ dbg_iload \ dbg_iserver \ dbg_istk \ - dbg_ui_break \ - dbg_ui_break_win \ - dbg_ui_edit \ - dbg_ui_edit_win \ - dbg_ui_filedialog_win \ - dbg_ui_interpret \ - dbg_ui_mon \ - dbg_ui_mon_win \ - dbg_ui_settings \ - dbg_ui_trace \ - dbg_ui_trace_win \ - dbg_ui_view \ - dbg_ui_win \ - dbg_ui_winman \ dbg_wx_break \ dbg_wx_break_win \ dbg_wx_code \ diff --git a/lib/debugger/src/dbg_ui_break.erl b/lib/debugger/src/dbg_ui_break.erl deleted file mode 100644 index 8b9a236ce7..0000000000 --- a/lib/debugger/src/dbg_ui_break.erl +++ /dev/null @@ -1,98 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_break). - -%% External exports --export([start/3, start/4, start/5]). - -%% Internal exports --export([init/5]). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% start(GS, Pos, Type) -%% start(GS, Pos, Type, Module, Line) -%% GS = graphics system identifier -%% Pos = {X, Y} -%% X = Y = integer() -%% Type = line | conditional | function -%% Module = atom() -%% Line = integer() -%%-------------------------------------------------------------------- -start(GS, Pos, Type) -> - start(GS, Pos, Type, "", ""). -start(GS, Pos, Type, Mod) -> - start(GS, Pos, Type, Mod, ""). -start(GS, Pos, Type, Mod, Line) -> - spawn_link(?MODULE, init, [GS, Pos, Type, Mod, Line]). - - -%%==================================================================== -%% Internal exports -%%==================================================================== - -init(GS, Pos, Type, Mod, Line) -> - Win = dbg_ui_break_win:create_win(GS, Pos, Type, Mod, Line), - if - Type==function, is_atom(Mod) -> - Win2 = gui_cmd({module, Mod}, Win), - loop(Win2); - true -> - loop(Win) - end. - -loop(Win) -> - receive - - %% From the GUI - GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs -> - Cmd = dbg_ui_break_win:handle_event(GuiEvent, Win), - Win2 = gui_cmd(Cmd, Win), - loop(Win2) - end. - -gui_cmd(ignore, Win) -> - Win; -gui_cmd(stopped, _Win) -> - exit(normal); -gui_cmd({win, Win2}, _Win) -> - Win2; -gui_cmd({module, Mod}, Win) -> - Funcs = int:functions(Mod), - dbg_ui_break_win:update_functions(Win, Funcs); -gui_cmd({break, DataL, Action}, _Win) -> - Fun = - fun(Data) -> - case Data of - [Mod, Line] -> - int:break(Mod, Line), - int:action_at_break(Mod, Line, Action); - [Mod, Line, CMod, CFunc] -> - int:break(Mod, Line), - int:test_at_break(Mod, Line, {CMod, CFunc}), - int:action_at_break(Mod, Line, Action); - [Mod, Func, Arity] -> - int:break_in(Mod, Func, Arity) - end - end, - lists:foreach(Fun, DataL), - exit(normal). diff --git a/lib/debugger/src/dbg_ui_break_win.erl b/lib/debugger/src/dbg_ui_break_win.erl deleted file mode 100644 index 11d810ccab..0000000000 --- a/lib/debugger/src/dbg_ui_break_win.erl +++ /dev/null @@ -1,314 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2002-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_break_win). --compile([{nowarn_deprecated_function,{gs,button,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,entry,2}}, - {nowarn_deprecated_function,{gs,frame,2}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,listbox,2}}, - {nowarn_deprecated_function,{gs,menu,2}}, - {nowarn_deprecated_function,{gs,menuitem,2}}, - {nowarn_deprecated_function,{gs,radiobutton,2}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,window,2}}]). - -%% External exports --export([create_win/5, - update_functions/2, - handle_event/2]). - --record(winInfo, {type, % line | conditional | function - win, % gsobj() - packer, % gsobj() | undefined - entries, % [{atom|integer, GSobj()}] - trigger, % enable | disable | delete - ok, % gsobj() - cancel, % gsobj() - listbox, % gsobj() - funcs=[] % [[Name, Arity]] - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% create_win(GS, Pos, Type, Mod, Line) -> #winInfo{} -%% GS = graphics system identifier -%% Pos = {X, Y} -%% X = Y = integer() -%% Type = line | conditional | function -%% Mod = atom() | "" -%% Line = integer() | "" -%%-------------------------------------------------------------------- -create_win(GS, {X, Y}, function, Mod, _Line) -> - Pad = 8, - W = 230, - - Font = dbg_ui_win:font(normal), - - %% Window - Win = gs:window(GS, [{title, "Function Break"}, {x, X}, {y, Y}, - {destroy, true}, {configure, true}, - {keypress, true}, {data, window}]), - - %% Frame - Frm = gs:frame(Win, [{x, 0}, {y, 0}, {width, W}, {height, 190}, - {packer_x, [{fixed, 70}, {stretch, 1, W-80}, - {fixed, 10}]}, - {packer_y, [{fixed, 10}, {fixed, 30}, - {stretch, 1, 100}, {fixed, 40}]}]), - - %% Create input field (label+entry) - gs:label(Frm, [{label, {text,"Module:"}}, {font, Font}, {align, e}, - {pack_x, 1}, {pack_y, 2}]), - Ent = gs:entry(Frm, [{text, Mod}, - {pack_x, 2}, {pack_y, 2}, - {keypress, true}, {setfocus, true}, - {buttonpress, true}]), - Entries = [{Ent, atom}], - - %% Create a listbox containing the functions of the module - gs:label(Frm, [{label, {text,"Function:"}}, {font, Font}, {align, ne}, - {pack_x, 1}, {pack_y, 3}]), - Lb = gs:listbox(Frm, [{bw, 2}, {relief, ridge}, {vscroll, right}, - {pack_x, 2}, {pack_y, 3}, - {selectmode, multiple}]), - - %% Add OK and Cancel buttons - {Wbtn, Hbtn} = dbg_ui_win:min_size(["OK","Cancel"], 70, 30), - Bot = gs:frame(Frm, [{pack_x, {1, 3}}, {pack_y, 4}]), - OK = gs:button(Bot, [{x, Pad}, {y, Pad}, - {width, Wbtn}, {height, Hbtn}, - {label, {text,"OK"}}, {font, Font}]), - Cancel = gs:button(Bot, [{x, W-Pad-Wbtn}, {y, Pad}, - {width, Wbtn}, {height, Hbtn}, - {label, {text,"Cancel"}}, {font, Font}]), - - Wfrm = gs:read(Frm, width), Hfrm = gs:read(Frm, height), - gs:config(Win, [{width, Wfrm}, {height, Hfrm}, {map, true}]), - #winInfo{type=function, win=Win, - packer=Frm, entries=Entries, trigger=enable, - ok=OK, cancel=Cancel, listbox=Lb, funcs=[]}; -create_win(GS, {X, Y}, Type, Mod, Line) -> - Pad = 8, - W = 230, - - Font = dbg_ui_win:font(normal), - - %% Window - Title = case Type of - line -> "Line Break"; - conditional -> "Conditional Break" - end, - Win = gs:window(GS, [{title, Title}, {x, X}, {y, Y}, - {destroy, true}]), - - %% Create input fields (label+entry) - {Wlbl, Hlbl} = dbg_ui_win:min_size(["C-Function:"], 10, 30), - Went = W-Wlbl-2*Pad, - Labels = case Type of - line -> - [{atom,"Module:",Mod}, {integer,"Line:",Line}]; - conditional -> - [{atom,"Module:",Mod}, {integer,"Line:",Line}, - {atom,"C-Module:",""}, {atom,"C-Function:",""}] - end, - Fun = fun({DataType, Label, Default}, Yin) -> - gs:create(label, Win, [{x, Pad}, {y, Yin}, - {width,Wlbl}, {height,Hlbl}, - {label, {text,Label}}, - {font, Font}, {align, e}]), - Ent = gs:create(entry, Win, [{x, Pad+Wlbl}, {y, Yin}, - {width, Went}, - {height, Hlbl}, - {text, Default}, - {keypress, true}]), - {{Ent, DataType}, Yin+Hlbl} - end, - {Entries, Yacc} = lists:mapfoldl(Fun, Pad, Labels), - {First, _DataType} = hd(Entries), - gs:config(First, [{buttonpress, true}, {setfocus, true}]), - - %% Add 'trigger action' buttons - {Wlbl2, Hlbl2} = dbg_ui_win:min_size(["Trigger Action"], 100, 20), - Wfrm = Wlbl2+8, Hfrm = Hlbl2*4+4, - Grp = erlang:now(), - Frm = gs:frame(Win, [{x, W/2-Wfrm/2-2}, {y, Yacc+Pad-2}, - {width, Wfrm}, {height, Hfrm}, {bw, 2}]), - gs:label(Frm, [{label, {text, "Trigger Action"}}, {font, Font}, - {x, 2}, {y, 0}, {width, Wlbl2}, {height, Hlbl2}]), - gs:radiobutton(Frm, [{label, {text, "Enable"}}, {font, Font}, - {x, 10}, {y, Hlbl2}, - {width, Wlbl2-10}, {height, Hlbl2}, - {align, w}, {group, Grp}, - {data, {trigger, enable}}, - {select, true}]), - gs:radiobutton(Frm, [{label, {text, "Disable"}}, {font, Font}, - {x, 10}, {y, Hlbl2*2}, - {width, Wlbl2-10}, {height, Hlbl2}, - {align, w}, {group, Grp}, - {data, {trigger, disable}}]), - gs:radiobutton(Frm, [{label, {text, "Delete"}}, {font, Font}, - {x, 10}, {y, Hlbl2*3}, - {width, Wlbl2-10}, {height, Hlbl2}, - {align, w}, {group, Grp}, - {data, {trigger, delete}}]), - - %% Add OK and Cancel buttons - {Wbtn, Hbtn} = dbg_ui_win:min_size(["OK","Cancel"], 70, 30), - Ybtn = Yacc + Pad + Hfrm + Pad, - OK = gs:button(Win, [{x, Pad}, {y, Ybtn}, - {width, Wbtn}, {height, Hbtn}, - {label, {text,"OK"}}, {font, Font}]), - gs:button(Win, [{x, W-Pad-Wbtn}, {y, Ybtn}, - {width, Wbtn}, {height, Hbtn}, - {label, {text,"Cancel"}}, {font, Font}]), - - Hwin = Ybtn + Hbtn + Pad, - gs:config(Win, [{width, W}, {height, Hwin}, {map, true}]), - - #winInfo{type=Type, win=Win, - entries=Entries, trigger=enable, ok=OK}. - -%%-------------------------------------------------------------------- -%% update_functions(WinInfo, Funcs) -> WinInfo -%% WinInfo = #winInfo{} -%% Funcs = [{Name, Arity}] -%% Name = atom() -%% Arity = integer() -%%-------------------------------------------------------------------- -update_functions(WinInfo, Funcs) -> - Items = lists:map(fun([N, A]) -> io_lib:format("~p/~p", [N, A]) end, - Funcs), - gs:config(WinInfo#winInfo.listbox, [{items, Items}, - {setfocus, true}]), - WinInfo#winInfo{funcs=Funcs}. - -%%-------------------------------------------------------------------- -%% handle_event(GSEvent, WinInfo) -> Command -%% GSEvent = {gs, Id, Event, Data, Arg} -%% WinInfo = #winInfo{} -%% Command = ignore -%% | stopped -%% | {win, WinInfo} -%% | {module, Mod} -%% | {break, [[Mod, Line]], Action} -%% | {break, [[Mod, Line, CMod, CFunc]], Action} -%% | {break, [[Mod, Func, Arity]], Action} -%%-------------------------------------------------------------------- -handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) -> - stopped; -handle_event({gs, _Id, configure, _Data, [W, H|_]}, WinInfo) -> - gs:config(WinInfo#winInfo.packer, [{width, W-10}, {height, H-10}]), - gs:config(WinInfo#winInfo.cancel, [{x, W-80}]), - ignore; -handle_event({gs, Ent, buttonpress, _,[N,X0,Y0|_]}, WinInfo) when N>1 -> - %% Right (middle) mouse button click in module entry, display a - %% menu containing all interpreted modules - Mods = int:interpreted(), - X = gs:read(Ent, x) + X0, - Y = gs:read(Ent, y) + Y0, - Menu = gs:menu(WinInfo#winInfo.win, [{post_at,{X,Y}}]), - lists:foreach(fun(Mod) -> - gs:menuitem(Menu, [{label,{text,Mod}}, - {data,{module,Mod}}]) - end, - Mods), - ignore; -handle_event({gs, LB, keypress, window, [Key|_]}, WinInfo) -> - %% Used for functional break window, since listboxes for some - %% reason doesn't generate keypress events - if - Key/='Tab', Key/='Return' -> - ignore; - true -> - handle_event({gs, LB, click, listbox, ["OK"]}, WinInfo) - end; -handle_event({gs, Ent, keypress, Data, [Key|_]}, WinInfo) -> - case WinInfo#winInfo.type of - function when Key/='Tab', Key/='Return' -> - case gs:read(WinInfo#winInfo.listbox, items) of - [] -> ignore; - _Items -> - gs:config(WinInfo#winInfo.listbox, clear), - {win, WinInfo#winInfo{funcs=[]}} - end; - function -> % 'Return' | 'Tab' pressed in Module entry - case check_input(WinInfo#winInfo.entries) of - error -> ignore; - [Mod] -> {module, Mod} - end; - _Type when Key=='Tab'; Key=='Return' -> - case next_entry(Ent, WinInfo#winInfo.entries) of - last -> - gs:config(WinInfo#winInfo.ok, flash), - handle_event({gs, Ent, click, Data, ["OK"]}, WinInfo); - Next -> - gs:config(Next, {setfocus, true}), - ignore - end; - _Type -> ignore - end; -handle_event({gs, _Id, click, _Data, ["OK"|_]}, WinInfo) -> - case check_input(WinInfo#winInfo.entries) of - error -> ignore; - Data when WinInfo#winInfo.type/=function -> - {break, [Data], WinInfo#winInfo.trigger}; - [Mod] -> % Function break window - case gs:read(WinInfo#winInfo.listbox, selection) of - [] -> - {module, Mod}; - IndexL -> - Funcs = WinInfo#winInfo.funcs, - Breaks = - [[Mod|lists:nth(Index+1, Funcs)] || Index <- IndexL], - {break, Breaks, enable} - end - end; -handle_event({gs, _Id, click, _Data, ["Cancel"|_]}, _WinInfo) -> - stopped; -handle_event({gs, _Id, click, {trigger,Trigger}, _Arg}, WinInfo) -> - {win, WinInfo#winInfo{trigger=Trigger}}; -handle_event({gs, _Id, click, {module, Mod}, _Arg}, WinInfo) -> - {Ent, _DataType} = hd(WinInfo#winInfo.entries), - gs:config(Ent, {insert,{0,Mod}}), - ignore; -handle_event(_GSEvent, _WinInfo) -> - ignore. - -check_input(Entries) -> - check_input(Entries, []). -check_input([{Entry, Type} | Entries], Data) -> - Str = gs:read(Entry, text), - case erl_scan:string(Str) of - {ok, [{Type, _Line, Val}], _EndLine} -> - check_input(Entries, [Val|Data]); - _Error -> error - end; -check_input([], Data) -> lists:reverse(Data). - -next_entry(Entry, [{Entry, _Type}]) -> - last; -next_entry(Entry, [{Entry, _Type1}, {Next, _Type2}|_]) -> - Next; -next_entry(Entry, [_|Entries]) -> - next_entry(Entry, Entries). diff --git a/lib/debugger/src/dbg_ui_edit.erl b/lib/debugger/src/dbg_ui_edit.erl deleted file mode 100644 index 390e6acdb4..0000000000 --- a/lib/debugger/src/dbg_ui_edit.erl +++ /dev/null @@ -1,91 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2002-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_edit). - -%% External exports --export([start/5]). - -%% Internal exports --export([init/6]). - --record(state, {win, % term() Edit dialog window data - pid, % pid() Parent - prompt % atom() - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% start(GS, Pos, Title, Prompt, {Type, Value}) -%% GS = graphics system identifier -%% Pos = {X, Y} -%% X = Y = integer() -%% Title = string() -%% Prompt = atom() -%% Type = term | atom | float | integer | string -%% Value = term() -%%-------------------------------------------------------------------- -start(GS, Pos, Title, Prompt, Edit) -> - case dbg_ui_winman:is_started(Title) of - true -> ignore; - false -> - spawn(?MODULE, init, [self(), GS, Pos, Title, Prompt, Edit]) - end. - - -%%==================================================================== -%% Internal exports -%%==================================================================== - -init(Pid, GS, Pos, Title, Prompt, Edit) -> - - %% Create edit dialog window - Win = dbg_ui_edit_win:create_win(GS, Pos, Title, Prompt, Edit), - Window = dbg_ui_edit_win:get_window(Win), - dbg_ui_winman:insert(Title, Window), - State = #state{win=Win, pid=Pid, prompt=Prompt}, - - loop(State). - -loop(State) -> - receive - - %% From the GUI - GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs -> - Cmd = dbg_ui_edit_win:handle_event(GuiEvent, - State#state.win), - State2 = gui_cmd(Cmd, State), - loop(State2); - - %% From the dbg_ui_winman process (Debugger window manager) - {dbg_ui_winman, update_windows_menu, _Data} -> - loop(State); - {dbg_ui_winman, destroy} -> - exit(normal) - end. - -gui_cmd(ignore, State) -> - State; -gui_cmd(stopped, _State) -> - exit(normal); -gui_cmd({edit, Value}, State) -> - State#state.pid ! {dbg_ui_edit, State#state.prompt, Value}, - exit(normal). diff --git a/lib/debugger/src/dbg_ui_edit_win.erl b/lib/debugger/src/dbg_ui_edit_win.erl deleted file mode 100644 index 2e9a685b57..0000000000 --- a/lib/debugger/src/dbg_ui_edit_win.erl +++ /dev/null @@ -1,128 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2002-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_edit_win). --compile([{nowarn_deprecated_function,{gs,button,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,entry,2}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,window,2}}]). - -%% External exports --export([create_win/5, get_window/1, - handle_event/2]). - --record(winInfo, {window, % gsobj() - entry, % gsobj() - button, % gsobj() - type % atom() - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% create_win(GS, Pos, Title, Prompt, {Type, Value}) -> #winInfo{} -%% GS = graphics system identifier -%% Pos = {X, Y} -%% X = Y = integer() -%% Title = string() -%% Prompt = atom() -%% Type = term | atom | float | integer | string -%% Value = term() -%%-------------------------------------------------------------------- -create_win(GS, {X, Y}, Title, Prompt, {Type, Value}) -> - Pad=8, - - Font = dbg_ui_win:font(normal), - - %% Window - Win = gs:window(GS, [{title, Title}, {x, X}, {y, Y}, - {destroy, true}]), - - %% Label - {Wlbl, Hlbl} = dbg_ui_win:min_size([Prompt], 50, 30), - gs:label(Win, [{x, Pad}, {y, Pad}, {width, Wlbl}, {height, Hlbl}, - {align, e}, {label, {text, Prompt}}, {font, Font}]), - - - %% Entry - {Went, _Hent} = dbg_ui_win:min_size([Value], 100, 20), - Ent = gs:entry(Win, [{x, Pad+Wlbl}, {y, Pad}, - {width, Went}, {height, Hlbl}, - {text, Value}, - {keypress, true}]), - - %% OK and Cancel buttons - W = Pad + Wlbl + Went + Pad, - {Wbtn, Hbtn} = dbg_ui_win:min_size(["Cancel"], 70, 30), - Ybtn = Pad + Hlbl + Pad, - Btn = gs:button(Win, [{x, Pad}, {y, Ybtn}, - {width, Wbtn}, {height, Hbtn}, - {label, {text,"OK"}}, {font, Font}]), - gs:button(Win, [{x, W-Pad-Wbtn}, {y, Ybtn}, - {width, Wbtn}, {height, Hbtn}, - {label, {text,"Cancel"}}, {font, Font}]), - - H = Ybtn + Hbtn + Pad, - gs:config(Win, [{width, W}, {height, H}, {map, true}]), - - #winInfo{window=Win, entry=Ent, button=Btn, type=Type}. - -%%-------------------------------------------------------------------- -%% get_window(WinInfo) -> Window -%% WinInfo = #winInfo{} -%% Window = gsobj() -%%-------------------------------------------------------------------- -get_window(WinInfo) -> - WinInfo#winInfo.window. - -%%-------------------------------------------------------------------- -%% handle_event(GSEvent, WinInfo) -> Command -%% GSEvent = {gs, Id, Event, Data, Arg} -%% WinInfo = #winInfo{} -%% Command = ignore -%% | stopped -%% | {edit, Value} -%%-------------------------------------------------------------------- -handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) -> - stopped; -handle_event({gs, Id, keypress, Data, ['Return'|_]}, WinInfo) -> - gs:config(WinInfo#winInfo.button, flash), - handle_event({gs, Id, click, Data, ["OK"]}, WinInfo); -handle_event({gs, _Id, click, _Data, ["OK"|_]}, WinInfo) -> - Ent = WinInfo#winInfo.entry, - Str = gs:read(Ent, text), - Type = WinInfo#winInfo.type, - case erl_scan:string(Str) of - {ok, Tokens, _EndLine} when Type==term -> - case erl_parse:parse_term(Tokens++[{dot, 1}]) of - {ok, Value} -> {edit, Value}; - _Error -> ignore - end; - {ok, [{Type, _Line, Value}], _EndLine} when Type/=term -> - {edit, Value}; - _ -> - ignore - end; -handle_event({gs, _Id, click, _Data, ["Cancel"|_]}, _WinInfo) -> - stopped; -handle_event(_GSEvent, _WinInfo) -> - ignore. diff --git a/lib/debugger/src/dbg_ui_filedialog_win.erl b/lib/debugger/src/dbg_ui_filedialog_win.erl deleted file mode 100644 index 52dc2012f3..0000000000 --- a/lib/debugger/src/dbg_ui_filedialog_win.erl +++ /dev/null @@ -1,340 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2002-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% - --module(dbg_ui_filedialog_win). --compile([{nowarn_deprecated_function,{gs,button,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,entry,3}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,listbox,3}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,window,2}}]). - -%% External exports --export([create_win/6, create_win/7, get_window/1, - tag/2, - handle_event/2]). - --record(winInfo, {window, % gsobj() - extra, % fun() - cwd, % string() - pattern % string() - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% create_win(GS, Title, Pos, Mode, Filter, Extra) -%% create_win(GS, Title, Pos, Mode, Filter, Extra, FileName) -> #winInfo{} -%% GS = term() -%% Title = string() -%% Pos = {X,Y} -%% Mode = normal | multiselect -%% Filter = string() File name that may include * symbols. -%% Extra = fun(File) -> {true, tag} | true | {error, term()} -%% FileName = string() Suggested file name when saving -%%-------------------------------------------------------------------- -create_win(GS, Title, {X,Y}, Mode, Filter, Extra) -> - create_win(GS, Title, {X,Y}, Mode, Filter, Extra, null). -create_win(GS, Title, {X,Y}, Mode, Filter, Extra, FileName) -> - Pad = 8, - Wlb = 480, Hlb = 130, - - Font = dbg_ui_win:font(normal), - - {Wlbl, Hlbl} = dbg_ui_win:min_size(["Directories"], 80, 20), - {Wbtn, Hbtn} = dbg_ui_win:min_size(["Filter","Cancel"], 70, 30), - - %% Window - Win = gs:window(GS, [{title,Title}, {x, X}, {y,Y}, {destroy,true}]), - - %% 'Filter' label and entry (for selecting directory) - gs:label(Win, [{label, {text,"Filter"}}, {font, Font}, {align, sw}, - {x, Pad+2}, {y, Pad}, {width,Wlbl}, {height,Hlbl}]), - gs:entry('Filter', Win, [{x, Pad}, {y, Pad+Hlbl}, - {width, Wlb}, {height, Hbtn}, - {keypress, true}]), - - %% Listboxes (showing directories and files) - Xmid = Pad + Wlb/2, - Y2 = Pad + Hlbl + Hbtn + Pad, - gs:label(Win, [{label, {text,"Directories"}}, - {font, Font}, {align, sw}, - {x, Pad+2}, {y, Y2}, - {width, Wlbl}, {height, Hlbl}]), - gs:label(Win, [{label, {text,"Files"}}, - {font, Font}, {align, sw}, - {x, Xmid+Pad/2+2}, {y, Y2}, - {width, Wlbl}, {height, Hlbl}]), - gs:listbox('Dirs', Win, [{x, Pad}, {y, Y2+Hlbl}, - {width, Wlb/2-Pad/2}, {height, Hlb}, - {vscroll, right}, - {click, true}, {doubleclick, true}]), - gs:listbox('Files', Win, [{x, Xmid+Pad/2}, {y, Y2+Hlbl}, - {width, Wlb/2-Pad/2}, {height, Hlb}, - {vscroll, right}, - {click, true}, {doubleclick, true}]), - - %% 'Selection' label and entry (for selecting file) - Y3 = Y2 + Hlbl + Hlb, - gs:label(Win, [{label, {text,"Selection"}}, {font,Font}, {align,sw}, - {x, Pad+2}, {y, Y3}, {width, Wlbl}, {height, Hlbl}]), - gs:entry('Selection', Win, [{x, Pad}, {y, Y3+Hlbl}, - {width, Wlb}, {height, Hbtn}, - {keypress, true}]), - - %% Buttons - Y4 = Y3 + Hlbl + Hbtn + Pad, - Wb = Wlb - Wbtn, - Opts = [{y, Y4}, {width, Wbtn}, {height, Hbtn}, {font, Font}], - case Mode of - normal -> - gs:button(Win, [{label, {text,"OK"}}, {x, Pad}, - {data, select} | Opts]), - gs:button(Win, [{label, {text,"Filter"}}, {x, Wlb/2-Wbtn/2}, - {data, filter} | Opts]), - gs:button(Win, [{label, {text,"Cancel"}}, {x, Pad+Wb}, - {data, done} | Opts]); - multiselect -> - gs:button(Win, [{label, {text,"Choose"}}, {x, Pad}, - {data, select} | Opts]), - gs:button(Win, [{label, {text,"All"}}, {x, Pad+Wb/3}, - {data, multiselect} | Opts]), - gs:button(Win, [{label, {text,"Filter"}}, {x, Pad+2*Wb/3}, - {data, filter} | Opts]), - gs:button(Win, [{label, {text,"Done"}}, {x, Pad+Wb}, - {data, done} | Opts]) - end, - - %% Insert contents - {ok, Home} = file:get_cwd(), - {Cwd, Pattern} = update_win(Filter, Extra, Home), - if - is_list(FileName) -> - gs:config('Selection', {text, filename:join(Cwd,FileName)}); - true -> ignore - end, - - Wwin = Pad + Wlb + Pad, - Hwin = Y4 + Hbtn + Pad, - gs:config(Win, [{width, Wwin}, {height, Hwin}, {map, true}]), - - #winInfo{window=Win, extra=Extra, cwd=Cwd, pattern=Pattern}. - -%%-------------------------------------------------------------------- -%% get_window(WinInfo) -> Window -%% WinInfo = #winInfo{} -%% Window = gsobj() -%%-------------------------------------------------------------------- -get_window(WinInfo) -> - WinInfo#winInfo.window. - -%%-------------------------------------------------------------------- -%% tag(WinInfo, File) -%% WinInfo = #winInfo{} -%% File = string() -%%-------------------------------------------------------------------- -tag(WinInfo, File0) -> - File = relfile(WinInfo#winInfo.cwd, File0), - case member(File, gs:read('Files', items)) of - {true, Index} -> gs:config('Files', {change, {Index, tag(File)}}); - false -> ignore - end. - -tag(Str) -> [$*|Str]. -untag([$*|Str]) -> Str; -untag([$(|Str]) -> [$)|Rts] = lists:reverse(Str),lists:reverse(Rts); -untag(Str) -> Str. - -member(E, L) -> member(E, L, 0). -member(E, [E|_], I) -> {true, I}; -member(E, [_|T], I) -> member(E, T, I+1); -member(_E, [], _I) -> false. - -%%-------------------------------------------------------------------- -%% handle_event(GSEvent, WinInfo) -> Command -%% GSEvent = {gs, Id, Event, Data, Arg} -%% WinInfo = #winInfo{} -%% Command = ignore -%% | {stopped, Dir} -%% | {win, WinInfo} -%% | {select, File} | {multiselect, Dir, FileNames} -%%-------------------------------------------------------------------- -handle_event({gs, _Id, destroy, _Data, _Args}, WinInfo) -> - {stopped, WinInfo#winInfo.cwd}; - -handle_event({gs, 'Filter', keypress, _Data, ['Return'|_]}, WinInfo) -> - handle_event({gs, null, click, filter, null}, WinInfo); -handle_event({gs, 'Selection', keypress, _Data, ['Return'|_]}, WinInfo) -> - handle_event({gs, null, click, select, null}, WinInfo); - -handle_event({gs, 'Dirs', click, _Data, [0,"..",true|_]}, WinInfo) -> - Filter = filename:join(filename:dirname(WinInfo#winInfo.cwd), - WinInfo#winInfo.pattern), - gs:config('Filter', {text, Filter}), - ignore; -handle_event({gs, 'Dirs', click, _Data, [_Index,Str,true|_]}, WinInfo) -> - Filter = filename:join([WinInfo#winInfo.cwd, Str, - WinInfo#winInfo.pattern]), - gs:config('Filter', {text, Filter}), - ignore; -handle_event({gs, 'Dirs', doubleclick, _Data, _Arg}, WinInfo) -> - handle_event({gs, null, click, filter, null}, WinInfo); - -handle_event({gs, 'Files', click, _Data, [_Index,Str,true|_]}, WinInfo) -> - Selection = filename:join(WinInfo#winInfo.cwd, untag(Str)), - gs:config('Selection', {text, Selection}), - ignore; -handle_event({gs, 'Files', doubleclick, _Data, _Arg}, WinInfo) -> - handle_event({gs, null, click, select, null}, WinInfo); - -handle_event({gs, _Id, click, select, _Arg}, _WinInfo) -> - {select, gs:read('Selection', text)}; -handle_event({gs, _Id, click, multiselect, _Arg}, WinInfo) -> - Files = [untag(File) || File <- gs:read('Files', items)], - {multiselect, WinInfo#winInfo.cwd, Files}; -handle_event({gs, _Id, click, filter, _Arg}, WinInfo) -> - {Cwd, Pattern} = update_win(gs:read('Filter', text), - WinInfo#winInfo.extra, - WinInfo#winInfo.cwd), - {win, WinInfo#winInfo{cwd=Cwd, pattern=Pattern}}; -handle_event({gs, _Id, click, done, _Arg}, WinInfo) -> - {stopped, WinInfo#winInfo.cwd}; - -handle_event(_GSEvent, _WinInfo) -> - ignore. - -%%==================================================================== -%% Internal functions -%%==================================================================== - -update_win(Filter, ExtraFilter, Prev) -> - {Res, {Filter2, Cwd, FilePattern}} = check_filter(Filter, Prev), - - Dirs = [".." | get_subdirs(Cwd)], - - gs:config('Filter', {text, Filter2}), - gs:config('Dirs', {items, Dirs}), - gs:config('Selection', {text, Cwd}), - - case Res of - ok -> - Matching = lists:sort(filelib:wildcard(Filter2, erl_prim_loader)), - Files = extra_filter(Matching, Cwd, ExtraFilter), - gs:config('Files', {items, Files}); - error -> - gs:config('Files', beep) - end, - - {Cwd, FilePattern}. - -%% check_filter(Filter, Prev) -> {ok, Res} | {error, Res} -%% Res = {Filter, Cwd, FilePattern} -%% Filter = Prev = Cwd = FilePattern = string() -check_filter(Filter0, Prev) -> - Filter = case filename:pathtype(Filter0) of - absolute -> Filter0; - _Relative -> filename:absname(Filter0, Prev) - end, - Comps = filename:split(Filter), - Last = lists:last(Comps), - FilePattern = case is_pattern(Last) of - true -> Last; - false -> "*" - end, - {Cwd, Rest} = max_existing(Comps), - case Rest of - [] -> - %% Filter = existing file or directory - Res = case filelib:is_dir(Filter, erl_prim_loader) of - true -> {filename:join(Filter, "*"), Filter, "*"}; - false -> {Filter, filename:dirname(Filter), - filename:basename(Filter)} - end, - {ok, Res}; - [FilePattern] -> - %% Filter = existing dir and valid pattern - {ok, {Filter, Cwd, FilePattern}}; - Comps -> - %% Filter = garbage - {error, {Prev, Prev, "*"}}; - [Name|_Names] -> - %% Filter = existing dir ++ pattern or non-existing file/dir - case is_pattern(Name) of - true -> {ok, {Filter, Cwd, FilePattern}}; - false -> {error, {Cwd, Cwd, ""}} - end - end. - -max_existing([Name | Names]) -> - case filelib:is_file(Name, erl_prim_loader) of - true -> max_existing(Name, Names); - false -> {[], [Name | Names]} - end. -max_existing(Dir, [Name | Names]) -> - Dir2 = filename:join(Dir, Name), - case filelib:is_file(Dir2, erl_prim_loader) of - true when Names =:= [] -> {Dir2, []}; - true -> max_existing(Dir2, Names); - false -> {Dir, [Name | Names]} - end. - -is_pattern(Str) -> - lists:member($*, Str). - -extra_filter([File|Files], Dir, Fun) -> - case Fun(File) of - true -> - [relfile(Dir, File) | extra_filter(Files, Dir, Fun)]; - {true,tag} -> - [[$*|relfile(Dir,File)] | extra_filter(Files, Dir, Fun)]; - {true,disable} -> - [[$(|relfile(Dir,File)]++[$)] | extra_filter(Files, Dir, Fun)]; - {error, _Reason} -> extra_filter(Files, Dir, Fun) - end; -extra_filter([], _Dir, _Fun) -> []. - -get_subdirs(Dir) -> - case erl_prim_loader:list_dir(Dir) of - {ok, FileNames} -> - X = [FN || FN <- FileNames, - filelib:is_dir(filename:join(Dir, FN), erl_prim_loader)], - lists:sort(X); - _Error -> - [] - end. - -%% Return the "remainder" of a file name relative a dir name, examples: -%% relfile("/home/gunilla", "/home/gunilla/m.erl") -> "m.erl" -%% relfile("/home/gunilla/dir", "/home/gunilla/dir/m.erl") -> "dir/m.erl" -%% relfile("/home/gunilla", "/home/arne/m.erl") -> "/home/arne/m.erl" -relfile(Dir, File) -> - case compare(Dir, File) of - error -> File; - RelFile -> RelFile - end. - -compare([_|Dir], [_|File]) -> - compare(Dir, File); -compare([], [$/|File]) -> - File; -compare(_, _) -> - error. diff --git a/lib/debugger/src/dbg_ui_interpret.erl b/lib/debugger/src/dbg_ui_interpret.erl deleted file mode 100644 index 73392d40cb..0000000000 --- a/lib/debugger/src/dbg_ui_interpret.erl +++ /dev/null @@ -1,161 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2011. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_interpret). - --include_lib("kernel/include/file.hrl"). - -%% External exports --export([start/4]). - -%% Internal exports --export([init/6]). - --record(state, {gs, % term() Graphics system id - win, % term() Interpret dialog window data - monitor, % pid() Monitor pid - mode % local | global - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% start(GS, Pos, Dir, Mode) -%% GS = Graphics system id -%% Dir = string() -%% Pos = {X,Y} -%% Mode = local | global -%%-------------------------------------------------------------------- -start(GS, Pos, Dir, Mode) -> - Title = "Interpret Dialog", - case dbg_ui_winman:is_started(Title) of - true -> ignore; - false -> - spawn(?MODULE, init, [self(), GS, Pos, Title, Dir, Mode]) - end. - -%%==================================================================== -%% Internal exports -%%==================================================================== - -init(Monitor, GS, Pos, Title, Dir, Mode) -> - Filter = filename:join(Dir, "*.erl"), - Extra = fun(File) -> - case int:interpretable(File) of - true -> - ModS = filename:basename(File, ".erl"), - Mod = list_to_atom(ModS), - case int:file(Mod) of - File -> {true, tag}; - _ -> true % {error,not_loaded} | File2 - end; - _Error -> {true,disable} - end - end, - - %% Create interpret dialog window - Win = dbg_ui_filedialog_win:create_win(GS, Title, Pos, multiselect, - Filter, Extra), - Window = dbg_ui_filedialog_win:get_window(Win), - dbg_ui_winman:insert(Title, Window), - - State = #state{gs=GS, win=Win, monitor=Monitor, mode=Mode}, - loop(State). - - -%%==================================================================== -%% Main loop and message handling -%%==================================================================== - -loop(State) -> - receive - - %% From the GUI - GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs -> - Cmd = dbg_ui_filedialog_win:handle_event(GuiEvent, - State#state.win), - State2 = gui_cmd(Cmd, State), - loop(State2); - - %% From the dbg_ui_winman process (Debugger window manager) - {dbg_ui_winman, update_windows_menu, _Data} -> - loop(State); - {dbg_ui_winman, destroy} -> - exit(normal) - end. - -gui_cmd(ignore, State) -> - State; -gui_cmd({stopped, Dir}, State) -> - State#state.monitor ! {dbg_ui_interpret, Dir}, - exit(normal); -gui_cmd({win, Win}, State) -> - State#state{win=Win}; -gui_cmd({select, File}, State) -> - Res = case State#state.mode of - local -> int:i(File); - global -> int:ni(File) - end, - - case Res of - %% Interpretation succeeded, tag the file name - {module, _Mod} -> - dbg_ui_filedialog_win:tag(State#state.win, File); - - %% Interpretation failed - error -> - Error = format_error(int:interpretable(File)), - Msg = ["Error when interpreting:", File, Error], - Window = dbg_ui_filedialog_win:get_window(State#state.win), - tool_utils:notify(Window, Msg) - end, - State; -gui_cmd({multiselect, Dir, FileNames}, State) -> - interpret_all(State, Dir, FileNames), - State. - -interpret_all(State, Dir, [File0|Files]) -> - File = filename:join(Dir, File0), - Res = case State#state.mode of - local -> int:i(File); - global -> int:ni(File) - end, - case Res of - {module, _Mod} -> - dbg_ui_filedialog_win:tag(State#state.win, File), - interpret_all(State, Dir, Files); - error -> - Window = dbg_ui_filedialog_win:get_window(State#state.win), - Error = format_error(int:interpretable(File)), - Msg = ["Error when interpreting:", File, Error, - "OK to continue?"], - case tool_utils:confirm(Window, Msg) of - ok -> interpret_all(State, Dir, Files); - cancel -> true - end - end; -interpret_all(_State, _Dir, []) -> - true. - -format_error({error,no_beam}) -> "No BEAM file"; -format_error({error,no_debug_info}) -> "No debug_info in BEAM file"; -format_error({error,badarg}) -> "File does not exist"; -format_error({error,{app,App}}) -> - "Cannot interpret "++atom_to_list(App)++" modules". diff --git a/lib/debugger/src/dbg_ui_mon.erl b/lib/debugger/src/dbg_ui_mon.erl deleted file mode 100644 index 82fe210968..0000000000 --- a/lib/debugger/src/dbg_ui_mon.erl +++ /dev/null @@ -1,738 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2010. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_mon). - --include_lib("kernel/include/file.hrl"). - -%% External exports --export([start/2, stop/0]). - --define(TRACEWIN, ['Button Area', 'Evaluator Area', 'Bindings Area']). --define(BACKTRACE, 100). - --record(pinfo, {pid, % pid() - status % break | exit | idle | running | waiting - }). - --record(state, {mode, % local | global - starter, % bool() 'true' if int was started by me - - gs, % term() Graphics system id - win, % term() Monitor window data - focus, % undefined | #pinfo{} Process in focus - coords, % {X,Y} Mouse pointer position - - intdir, % string() Default dir - pinfos, % [#pinfo{}] Debugged processes - - tracewin, % [Area] Areas shown in trace window - backtrace, % integer() Number of call frames to fetch - - attach, % false | {Flags, Function} - - sfile, % default | string() Settings file - changed % boolean() Settings have been changed - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% start(Mode, SFile) -> {ok, Pid} | {error, Reason} -%% Mode = local | global -%% SFile = string() | default Settings file -%% Pid = pid() -%% Reason = {already_started,Pid} | term() -%%-------------------------------------------------------------------- -start(Mode, SFile) -> - case whereis(?MODULE) of - undefined -> - CallingPid = self(), - Pid = spawn(fun () -> init(CallingPid, Mode, SFile) end), - receive - {initialization_complete, Pid} -> - {ok, Pid}; - Error -> - Error - end; - - Pid -> - {error, {already_started,Pid}} - end. - -%%-------------------------------------------------------------------- -%% stop() -> ok -%%-------------------------------------------------------------------- -stop() -> - case whereis(?MODULE) of - undefined -> - ok; - Pid -> - Flag = process_flag(trap_exit, true), - link(Pid), - Pid ! stop, - receive - {'EXIT', Pid, stop} -> - process_flag(trap_exit, Flag), - ok - end - end. - - -%%==================================================================== -%% Initialization -%%==================================================================== - -init(CallingPid, Mode, SFile) -> - register(?MODULE, self()), - - %% Graphics system - case catch dbg_ui_mon_win:init() of - {'EXIT', Reason} -> - CallingPid ! {error, Reason}; - GS -> - init2(CallingPid, Mode, SFile, GS) - end. - -init2(CallingPid, Mode, SFile, GS) -> - - %% Start Int if necessary and subscribe to information from it - Bool = case int:start() of - {ok, _Int} -> true; - {error, {already_started, _Int}} -> false - end, - int:subscribe(), - - %% Start other necessary stuff - dbg_ui_winman:start(), % Debugger window manager - - %% Create monitor window - Title = "Monitor", - Win = dbg_ui_mon_win:create_win(GS, Title, menus()), - Window = dbg_ui_mon_win:get_window(Win), - dbg_ui_winman:insert(Title, Window), - - %% Initial process state - State1 = #state{mode = Mode, - starter = Bool, - - gs = GS, - win = Win, - focus = undefined, - coords = {0,0}, - - intdir = element(2, file:get_cwd()), - pinfos = [], - - sfile = SFile, - changed = false - }, - - State2 = init_options(?TRACEWIN, % Trace Window - int:auto_attach(), % Auto Attach - int:stack_trace(), % Stack Trace - ?BACKTRACE, % Back Trace Size - State1), - - State3 = init_contents(int:interpreted(), % Modules - int:all_breaks(), % Breakpoints - int:snapshot(), % Processes - State2), - - %% Disable/enable functionality according to process in focus (none) - gui_enable_functions(State3#state.focus), - - CallingPid ! {initialization_complete, self()}, - - if - SFile =:= default -> - loop(State3); - true -> - loop(load_settings(SFile, State3)) - end. - -init_options(TraceWin, AutoAttach, StackTrace, BackTrace, State) -> - lists:foreach(fun(Area) -> - dbg_ui_mon_win:select(Area, true) - end, - TraceWin), - - case AutoAttach of - false -> ignore; - {Flags, _Function} -> - dbg_ui_mon_win:show_option(State#state.win, - auto_attach, Flags), - lists:foreach(fun(Flag) -> - dbg_ui_mon_win:select(map(Flag), true) - end, - Flags) - end, - - dbg_ui_mon_win:show_option(State#state.win, - stack_trace, StackTrace), - dbg_ui_mon_win:select(map(StackTrace), true), - - dbg_ui_mon_win:show_option(State#state.win, back_trace, BackTrace), - - State#state{tracewin=TraceWin, backtrace=BackTrace}. - -init_contents(Mods, Breaks, Processes, State) -> - Win2 = - lists:foldl(fun(Mod, Win) -> - dbg_ui_mon_win:add_module(Win,'Module',Mod) - end, - State#state.win, - Mods), - - Win3 = - lists:foldl(fun(Break, Win) -> - dbg_ui_mon_win:add_break(Win,'Break',Break) - end, - Win2, - Breaks), - - lists:foldl(fun(PidTuple, State0) -> - int_cmd({new_process, PidTuple}, State0) - end, - State#state{win=Win3}, - Processes). - - -%%==================================================================== -%% Main loop and message handling -%%==================================================================== - -loop(State) -> - receive - - stop -> - gui_cmd(stopped, State); - - %% From the GUI - GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent) =:= gs -> - Cmd = dbg_ui_mon_win:handle_event(GuiEvent,State#state.win), - State2 = gui_cmd(Cmd, State), - loop(State2); - - %% From the interpreter process - {int, Cmd} -> - State2 = int_cmd(Cmd, State), - loop(State2); - - %% From the dbg_ui_interpret process - {dbg_ui_interpret, Dir} -> - loop(State#state{intdir=Dir}); - - %% From the dbg_ui_edit process - {dbg_ui_edit, 'Backtrace:', BackTrace} -> - dbg_ui_mon_win:show_option(State#state.win, - back_trace, BackTrace), - loop(State#state{backtrace=BackTrace}); - - %% From the dbg_ui_settings process - {dbg_ui_settings, SFile, Action} -> - State2 = case Action of - load -> load_settings(SFile, State); - save -> save_settings(SFile, State) - end, - loop(State2); - - %% From the dbg_ui_winman process (Debugger window manager) - {dbg_ui_winman, update_windows_menu, Data} -> - dbg_ui_winman:update_windows_menu(Data), - loop(State) - end. - -%%--Commands from the GUI--------------------------------------------- -%% Act upon a command from the GUI. In most cases, it is only necessary -%% to call a relevant int-function. int will then report when the action -%% has been taken. - -gui_cmd(ignore, State) -> - State; -gui_cmd(stopped, State) -> - if - State#state.starter =:= true -> int:stop(); - true -> int:auto_attach(false) - end, - exit(stop); -gui_cmd({coords, Coords}, State) -> - State#state{coords=Coords}; - -gui_cmd({shortcut, Key}, State) -> - case shortcut(Key) of - {always, Cmd} -> gui_cmd(Cmd, State); - {if_enabled, Cmd} -> - case dbg_ui_mon_win:is_enabled(Cmd) of - true -> gui_cmd(Cmd, State); - false -> State - end; - false -> State - end; - -%% File Menu -gui_cmd('Load Settings...', State) -> - Window = dbg_ui_mon_win:get_window(State#state.win), - dbg_ui_settings:start(Window, State#state.coords, - load, State#state.sfile), - State; -gui_cmd('Save Settings...', State) -> - Window = dbg_ui_mon_win:get_window(State#state.win), - dbg_ui_settings:start(Window, State#state.coords, - save, State#state.sfile), - State; -gui_cmd('Exit', State) -> - gui_cmd(stopped, State); - -%% Edit Menu -gui_cmd('Refresh', State) -> - int:clear(), - Win = dbg_ui_mon_win:clear_processes(State#state.win), - gui_enable_functions(undefined), - State2 = State#state{win=Win, focus=undefined, pinfos=[]}, - lists:foldl(fun(PidTuple, S) -> - int_cmd({new_process,PidTuple}, S) - end, - State2, - int:snapshot()); -gui_cmd('Kill All', State) -> - lists:foreach(fun(PInfo) -> - case PInfo#pinfo.status of - exit -> ignore; - _Status -> exit(PInfo#pinfo.pid, kill) - end - end, - State#state.pinfos), - State; - -%% Module Menu -gui_cmd('Interpret...', State) -> - dbg_ui_interpret:start(State#state.gs, State#state.coords, - State#state.intdir, State#state.mode), - State; -gui_cmd('Delete All Modules', State) -> - lists:foreach(fun(Mod) -> int:nn(Mod) end, int:interpreted()), - State; -gui_cmd({module, Mod, What}, State) -> - case What of - delete -> int:nn(Mod); - view -> dbg_ui_view:start(State#state.gs, Mod) - end, - State; - -%% Process Menu -gui_cmd('Step', State) -> - int:step((State#state.focus)#pinfo.pid), - State; -gui_cmd('Next', State) -> - int:next((State#state.focus)#pinfo.pid), - State; -gui_cmd('Continue', State) -> - int:continue((State#state.focus)#pinfo.pid), - State; -gui_cmd('Finish ', State) -> - int:finish((State#state.focus)#pinfo.pid), - State; -gui_cmd('Attach', State) -> - Pid = (State#state.focus)#pinfo.pid, - case dbg_ui_winman:is_started(dbg_ui_trace:title(Pid)) of - true -> ignore; - false -> int:attach(Pid, trace_function(State)) - end, - State; -gui_cmd('Kill', State) -> - exit((State#state.focus)#pinfo.pid, kill), - State; - -%% Break Menu -gui_cmd('Line Break...', State) -> - dbg_ui_break:start(State#state.gs, State#state.coords, line), - State; -gui_cmd('Conditional Break...', State) -> - dbg_ui_break:start(State#state.gs, State#state.coords, conditional), - State; -gui_cmd('Function Break...', State) -> - dbg_ui_break:start(State#state.gs, State#state.coords, function), - State; -gui_cmd('Enable All', State) -> - Breaks = int:all_breaks(), - lists:foreach(fun ({{Mod, Line}, _Options}) -> - int:enable_break(Mod, Line) - end, - Breaks), - State; -gui_cmd('Disable All', State) -> - Breaks = int:all_breaks(), - lists:foreach(fun ({{Mod, Line}, _Options}) -> - int:disable_break(Mod, Line) - end, - Breaks), - State; -gui_cmd('Delete All', State) -> - int:no_break(), - State; -gui_cmd({break, {Mod, Line}, What}, State) -> - case What of - delete -> int:delete_break(Mod, Line); - {status, inactive} -> int:disable_break(Mod, Line); - {status, active} -> int:enable_break(Mod, Line); - {trigger, Action} -> int:action_at_break(Mod, Line, Action) - end, - State; - -%% Options Commands -gui_cmd({'Trace Window', TraceWin}, State) -> - State2 = State#state{tracewin=TraceWin}, - case State#state.attach of - false -> ignore; - {Flags, {dbg_ui_trace, start, StartFlags}} -> - case trace_function(State2) of - {_, _, StartFlags} -> ignore; - NewFunction -> % {_, _, NewStartFlags} - int:auto_attach(Flags, NewFunction) - end; - _AutoAttach -> ignore - end, - State2; -gui_cmd({'Auto Attach', When}, State) -> - if - When =:= [] -> int:auto_attach(false); - true -> - Flags = [map(Name) || Name <- When], - int:auto_attach(Flags, trace_function(State)) - end, - State; -gui_cmd({'Stack Trace', [Name]}, State) -> - int:stack_trace(map(Name)), - State; -gui_cmd('Back Trace Size...', State) -> - dbg_ui_edit:start(State#state.gs, State#state.coords, "Backtrace", - 'Backtrace:', {integer, State#state.backtrace}), - State; - -%% Help Menu -gui_cmd('Debugger', State) -> - HelpFile = filename:join([code:lib_dir(debugger), "doc", "html", "index.html"]), - Window = dbg_ui_mon_win:get_window(State#state.win), - tool_utils:open_help(Window, HelpFile), - State; - -gui_cmd({focus, Pid, Win}, State) -> - {value, PInfo} = - lists:keysearch(Pid, #pinfo.pid, State#state.pinfos), - gui_enable_functions(PInfo), - State#state{win=Win, focus=PInfo}; -gui_cmd(default, State) -> - case lists:member('Attach', menus(enabled, State#state.focus)) of - true -> gui_cmd('Attach', State); - false -> State - end. - -%%--Commands from the interpreter------------------------------------- - -int_cmd({interpret, Mod}, State) -> - Win = dbg_ui_mon_win:add_module(State#state.win, 'Module', Mod), - State#state{win=Win}; -int_cmd({no_interpret, Mod}, State) -> - Win = dbg_ui_mon_win:delete_module(State#state.win, Mod), - State#state{win=Win}; - -int_cmd({new_process, {Pid, Function, Status, Info}}, State) -> - - %% Create record with information about the process - Name = registered_name(Pid), - PInfo = #pinfo{pid=Pid, status=Status}, - - %% Update window - Win = dbg_ui_mon_win:add_process(State#state.win, - Pid, Name, Function, Status, Info), - - %% Store process information - PInfos = State#state.pinfos ++ [PInfo], - State#state{win=Win, pinfos=PInfos}; -int_cmd({new_status, Pid, Status, Info}, State) -> - - %% Find stored information about the process - PInfos = State#state.pinfos, - {value, PInfo} = lists:keysearch(Pid, #pinfo.pid, PInfos), - - %% Update process information - PInfo2 = PInfo#pinfo{status=Status}, - PInfos2 = lists:keyreplace(Pid, #pinfo.pid, PInfos, PInfo2), - State2 = State#state{pinfos=PInfos2}, - - %% Update window - dbg_ui_mon_win:update_process(State2#state.win, Pid, Status, Info), - case State2#state.focus of - #pinfo{pid=Pid} -> - gui_enable_functions(PInfo2), - State2#state{focus=PInfo2}; - _ -> - State2 - end; - -int_cmd({new_break, Break}, State) -> - Win = dbg_ui_mon_win:add_break(State#state.win, 'Break', Break), - State#state{win=Win}; -int_cmd({delete_break, Point}, State) -> - Win = dbg_ui_mon_win:delete_break(State#state.win, Point), - State#state{win=Win}; -int_cmd({break_options, Break}, State) -> - dbg_ui_mon_win:update_break(State#state.win, Break), - State; -int_cmd(no_break, State) -> - Win = dbg_ui_mon_win:clear_breaks(State#state.win), - State#state{win=Win}; -int_cmd({no_break, Mod}, State) -> - Win = dbg_ui_mon_win:clear_breaks(State#state.win, Mod), - State#state{win=Win}; - -int_cmd({auto_attach, AutoAttach}, State) -> - OnFlags = case AutoAttach of - false -> []; - {Flags, _Function} -> Flags - end, - OffFlags = [init, exit, break] -- OnFlags, - dbg_ui_mon_win:show_option(State#state.win, auto_attach, OnFlags), - lists:foreach(fun(Flag) -> - dbg_ui_mon_win:select(map(Flag), true) - end, - OnFlags), - lists:foreach(fun(Flag) -> - dbg_ui_mon_win:select(map(Flag), false) - end, - OffFlags), - State#state{attach=AutoAttach}; -int_cmd({stack_trace, Flag}, State) -> - dbg_ui_mon_win:show_option(State#state.win, stack_trace, Flag), - dbg_ui_mon_win:select(map(Flag), true), - State. - - -%%==================================================================== -%% GUI auxiliary functions -%%==================================================================== - -menus() -> - [{'File', [{'Load Settings...', 0}, - {'Save Settings...', 2}, - separator, - {'Exit', 0}]}, - {'Edit', [{'Refresh', no}, - {'Kill All', no}]}, - {'Module', [{'Interpret...', 0}, - {'Delete All Modules', no}, - separator]}, - {'Process', [{'Step', 0}, - {'Next', 0}, - {'Continue', 0}, - {'Finish ', 0}, - separator, - {'Attach', 0}, - {'Kill', no}]}, - {'Break', [{'Line Break...', 5}, - {'Conditional Break...', no}, - {'Function Break...', no}, - separator, - {'Enable All', no}, - {'Disable All', no}, - {'Delete All', 0}, - separator]}, - {'Options', [{'Trace Window', no, cascade, - [{'Button Area', no, check}, - {'Evaluator Area', no, check}, - {'Bindings Area', no, check}, - {'Trace Area', no, check}]}, - {'Auto Attach', no, cascade, - [{'First Call', no, check}, - {'On Break', no, check}, - {'On Exit', no, check}]}, - {'Stack Trace', no, cascade, - [{'Stack On, Tail', no, radio}, - {'Stack On, No Tail', no, radio}, - {'Stack Off', no, radio}]}, - {'Back Trace Size...', no}]}, - {'Help', [{'Debugger', no}]}]. - -menus(enabled, undefined) -> - []; -menus(disabled, undefined) -> - ['Step','Next','Continue','Finish ','Attach','Kill']; -menus(enabled, #pinfo{status=exit}) -> - ['Attach']; -menus(disabled, #pinfo{status=exit}) -> - ['Step','Next','Continue','Finish ','Kill']; -menus(enabled, #pinfo{status=break}) -> - ['Step','Next','Continue','Finish ','Attach','Kill']; -menus(disabled, #pinfo{status=break}) -> - []; -menus(enabled, _PInfo) -> - ['Attach','Kill']; -menus(disabled, _PInfo) -> - ['Step','Next','Continue','Finish ']. - -shortcut(l) -> {always, 'Load Settings...'}; -shortcut(v) -> {always, 'Save Settings...'}; -shortcut(e) -> {always, 'Exit'}; - -shortcut(i) -> {always, 'Interpret...'}; - -shortcut(s) -> {if_enabled, 'Step'}; -shortcut(n) -> {if_enabled, 'Next'}; -shortcut(c) -> {if_enabled, 'Continue'}; -shortcut(f) -> {if_enabled, 'Finish '}; -shortcut(a) -> {if_enabled, 'Attach'}; - -shortcut(b) -> {always, 'Line Break...'}; -shortcut(d) -> {always, 'Delete All'}; - -shortcut(_) -> false. - -%% Enable/disable functionality depending on the state of the process -%% currently in Focus -gui_enable_functions(PInfo) -> - Enabled = menus(enabled, PInfo), - Disabled = menus(disabled, PInfo), - dbg_ui_mon_win:enable(Enabled, true), - dbg_ui_mon_win:enable(Disabled, false). - -%% Map values used by int to/from GUI names -map('First Call') -> init; % Auto attach -map('On Exit') -> exit; -map('On Break') -> break; -map(init) -> 'First Call'; -map(exit) -> 'On Exit'; -map(break) -> 'On Break'; - -map('Stack On, Tail') -> all; % Stack trace -map('Stack On, No Tail') -> no_tail; -map('Stack Off') -> false; -map(all) -> 'Stack On, Tail'; -map(true) -> 'Stack On, Tail'; -map(no_tail) -> 'Stack On, No Tail'; -map(false) -> 'Stack Off'. - - -%%==================================================================== -%% Debugger settings -%%==================================================================== - -load_settings(SFile, State) -> - case file:read_file(SFile) of - {ok, Binary} -> - case catch binary_to_term(Binary) of - {debugger_settings, Settings} -> - load_settings2(Settings, - State#state{sfile=SFile, - changed=false}); - _Error -> State - end; - {error, _Reason} -> State - end. - -load_settings2(Settings, State) -> - {TraceWin, AutoAttach, StackTrace, BackTrace, Files, Breaks} = - Settings, - - TraceWinAll = ['Button Area', 'Evaluator Area', 'Bindings Area', - 'Trace Area'], - lists:foreach(fun(Area) -> dbg_ui_mon_win:select(Area, true) end, - TraceWin), - lists:foreach(fun(Area) -> dbg_ui_mon_win:select(Area, false) end, - TraceWinAll--TraceWin), - - case AutoAttach of - false -> int:auto_attach(false); - {Flags, Function} -> int:auto_attach(Flags, Function) - end, - - int:stack_trace(StackTrace), - - dbg_ui_mon_win:show_option(State#state.win, back_trace, BackTrace), - - case State#state.mode of - local -> lists:foreach(fun(File) -> int:i(File) end, Files); - global -> lists:foreach(fun(File) -> int:ni(File) end, Files) - end, - lists:foreach(fun(Break) -> - {{Mod, Line}, [Status, Action, _, Cond]} = - Break, - int:break(Mod, Line), - if - Status =:= inactive -> - int:disable_break(Mod, Line); - true -> ignore - end, - if - Action/=enable -> - int:action_at_break(Mod,Line,Action); - true -> ignore - end, - case Cond of - CFunction when is_tuple(CFunction) -> - int:test_at_break(Mod,Line,CFunction); - null -> ignore - end - end, - Breaks), - - State#state{tracewin=TraceWin, backtrace=BackTrace}. - -save_settings(SFile, State) -> - Settings = {State#state.tracewin, - int:auto_attach(), - int:stack_trace(), - State#state.backtrace, - [int:file(Mod) || Mod <- int:interpreted()], - int:all_breaks()}, - Binary = term_to_binary({debugger_settings, Settings}), - case file:write_file(SFile, Binary) of - ok -> - State#state{sfile=SFile, changed=false}; - {error, _Reason} -> - State - end. - - -%%==================================================================== -%% Other internal functions -%%==================================================================== - -registered_name(Pid) -> - %% Yield in order to give Pid more time to register its name - timer:sleep(200), - - Node = node(Pid), - if - Node =:= node() -> - case erlang:process_info(Pid, registered_name) of - {registered_name, Name} -> Name; - _ -> undefined - end; - true -> - case rpc:call(Node,erlang,process_info, - [Pid,registered_name]) of - {registered_name, Name} -> Name; - _ -> undefined - end - end. - -trace_function(State) -> - {dbg_ui_trace, start, [State#state.tracewin,State#state.backtrace]}. diff --git a/lib/debugger/src/dbg_ui_mon_win.erl b/lib/debugger/src/dbg_ui_mon_win.erl deleted file mode 100644 index 8655c7697a..0000000000 --- a/lib/debugger/src/dbg_ui_mon_win.erl +++ /dev/null @@ -1,573 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_mon_win). --compile([{nowarn_deprecated_function,{gs,checkbutton,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,frame,2}}, - {nowarn_deprecated_function,{gs,grid,2}}, - {nowarn_deprecated_function,{gs,gridline,2}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,listbox,2}}, - {nowarn_deprecated_function,{gs,menu,2}}, - {nowarn_deprecated_function,{gs,menubar,2}}, - {nowarn_deprecated_function,{gs,menuitem,2}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,window,2}}]). - -%% External exports --export([init/0]). --export([create_win/3, get_window/1, - show_option/3, - enable/2, is_enabled/1, select/2, - add_module/3, delete_module/2, - add_process/6, update_process/4, clear_processes/1, - add_break/3, update_break/2, delete_break/2, - clear_breaks/1, clear_breaks/2, - handle_event/2 - ]). - --define(default_rows,50). - --record(moduleInfo, {module, menubtn}). --record(procInfo, {pid, row}). --record(breakInfo, {point, status, break}). --record(winInfo, {window, % gsobj() - grid, % gsobj() - row, % int() Last row in grid - - focus, % int() Selected row in grid - - modules=[], % [#moduleInfo{}] Known modules - processes=[], % [#procInfo{}] Known processes - breaks=[], % [#breakInfo{}] Known breakpoints - - listbox, % gsobj() Listinng known modules - - %% Auto attach buttons - fbutton, % gsobj() - bbutton, % gsobj() - ebutton, % gsobj() - selected=[], % ['First Call'|'On Break'|'On Exit'] - - slabel, % showing Stack Trace option - blabel % showing Back Trace Size - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -init() -> - dbg_ui_win:init(). - -%%-------------------------------------------------------------------- -%% create_win(GS, Title, Menus) -> #winInfo{} -%% GS = gsobj() -%% Title = string() -%% Menus = [menu()] See dbg_ui_win.erl -%%-------------------------------------------------------------------- - --define(PAD, 5). --define(Wf, 150). --define(Wg, 770). --define(W, 800). --define(H, 390). - -create_win(GS, Title, Menus) -> - Win = gs:window(GS, [{title, Title}, - {width, ?W}, {height, ?H}, - {configure,true}, {destroy,true}, - {keypress,true}, {motion,true}]), - - MenuBar = gs:menubar(Win, []), - dbg_ui_win:create_menus(MenuBar, Menus), - dbg_ui_winman:windows_menu(MenuBar), - - Font = dbg_ui_win:font(normal), - - Frame = gs:frame(Win, [{x, ?PAD}, {y, 30}, - {width, ?Wf}, {height, ?H}]), - Hlb = 200, - Listbox = gs:listbox(Frame, [{x, 0}, {y, 0}, - {width, ?Wf}, {height, Hlb}, - {data, listbox}, - {doubleclick, true}, - {items, []}]), - gs:label(Frame, [{x, 0}, {y, Hlb}, {width, ?Wf}, {height, 20}, - {align, w}, - {label, {text, "Auto Attach:"}}, {font, Font}]), - Fbtn = gs:checkbutton(Frame, [{x, 0}, {y, Hlb+20}, - {width, ?Wf}, {height, 20}, - {label, {text, 'First Call'}}, - {align, w}, {font, Font}, - {data, autoattach}]), - Bbtn = gs:checkbutton(Frame, [{x, 0}, {y, Hlb+40}, - {width, ?Wf}, {height, 20}, - {label, {text, 'On Break'}}, - {align, w}, {font, Font}, - {data, autoattach}]), - Ebtn = gs:checkbutton(Frame, [{x, 0}, {y, Hlb+60}, - {width, ?Wf}, {height, 20}, - {label, {text, 'On Exit'}}, - {align, w}, {font, Font}, - {data, autoattach}]), - SLabel = gs:label(Frame, [{x, 0}, {y, Hlb+80}, - {width, ?Wf}, {height, 40}, - {font, Font}, {align, w}]), - BLabel = gs:label(Frame, [{x, 0}, {y, Hlb+120}, - {width, ?Wf}, {height, 40}, - {font, Font}, {align, w}]), - - Grid = gs:grid(Win, [{x, 2*?PAD+?Wf}, {y, 30}, - {width, ?W-(2*?PAD+?Wf)}, {height, ?H-30}, - {bg, grey}, {fg, black}, - {vscroll, right}, {hscroll, bottom}, - calc_columnwidths(?Wg), - {rows, {1,?default_rows}}]), - gs:gridline(Grid, [{row, 1}, {bw, 5}, {fg, blue}, - {font, Font}, - {text, {1,"Pid"}}, {text, {2,"Initial Call"}}, - {text, {3,"Name"}}, {text, {4,"Status"}}, - {text, {5,"Information"}}]), - - gs:config(Win, {map, true}), - #winInfo{window=Win, grid=Grid, row=1, focus=0, - listbox=Listbox, - fbutton=Fbtn, bbutton=Bbtn, ebutton=Ebtn, - slabel=SLabel, blabel=BLabel}. - -%%-------------------------------------------------------------------- -%% get_window(WinInfo) -> Window -%% WinInfo = #winInfo{} -%% Window = gsobj() -%%-------------------------------------------------------------------- -get_window(WinInfo) -> - WinInfo#winInfo.window. - -%%-------------------------------------------------------------------- -%% show_option(WinInfo, Option, Value) -> void() -%% WinInfo = #winInfo{} -%% Option = auto_attach | stack_trace | back_trace -%% Value = [Flag] % Option==auto_attach -%% Flag = init | break | exit -%% | true | all | no_tail | false % Option==stack_trace -%% | int() % Option==back_trace -%%-------------------------------------------------------------------- -show_option(WinInfo, Option, Value) -> - case Option of - - auto_attach -> - lists:foreach(fun (Button) -> - gs:config(Button, {select, false}) - end, - option_buttons(WinInfo, [init, break, exit])), - lists:foreach(fun (Button) -> - gs:config(Button, {select, true}) - end, - option_buttons(WinInfo, Value)); - - stack_trace -> - Text = case Value of - all -> "Stack Trace:\n On (with tail)"; - true -> "Stack Trace:\n On (with tail)"; - no_tail -> "Stack Trace:\n On (no tail)"; - false -> "Stack Trace:\n Off" - end, - gs:config(WinInfo#winInfo.slabel, {label, {text, Text}}); - - back_trace -> - Text = "Back Trace Size:\n " ++ integer_to_list(Value), - gs:config(WinInfo#winInfo.blabel, {label, {text, Text}}) - end. - -option_buttons(WinInfo, [init|Flags]) -> - [WinInfo#winInfo.fbutton|option_buttons(WinInfo, Flags)]; -option_buttons(WinInfo, [break|Flags]) -> - [WinInfo#winInfo.bbutton|option_buttons(WinInfo, Flags)]; -option_buttons(WinInfo, [exit|Flags]) -> - [WinInfo#winInfo.ebutton|option_buttons(WinInfo, Flags)]; -option_buttons(_WinInfo, []) -> - []. - -%%-------------------------------------------------------------------- -%% enable([MenuItem], Bool) -%% is_enabled(MenuItem) -> Bool -%% MenuItem = atom() -%% Bool = boolean() -%%-------------------------------------------------------------------- -enable(MenuItems, Bool) -> - lists:foreach(fun(MenuItem) -> - gs:config(MenuItem, {enable, Bool}) - end, - MenuItems). - -is_enabled(MenuItem) -> - gs:read(MenuItem, enable). - -%%-------------------------------------------------------------------- -%% select(MenuItem, Bool) -%% MenuItem = atom() -%% Bool = boolean() -%%-------------------------------------------------------------------- -select(MenuItem, Bool) -> - dbg_ui_win:select(MenuItem, Bool). - -%%-------------------------------------------------------------------- -%% add_module(WinInfo, Name, Mod) -> WinInfo -%% WinInfo = #winInfo{} -%% Name = atom() -%% Mod = atom() -%%-------------------------------------------------------------------- -add_module(WinInfo, Menu, Mod) -> - Modules = WinInfo#winInfo.modules, - case lists:keymember(Mod, #moduleInfo.module, Modules) of - false -> - %% Create a menu for the module - Font = dbg_ui_win:font(normal), - MenuBtn = gs:menuitem(Menu, [{label, {text,Mod}}, - {font, Font}, - {itemtype, cascade}]), - SubMenu = gs:menu(MenuBtn, []), - gs:menuitem(SubMenu, [{label, {text,"View"}}, - {font, Font}, - {data, {module,Mod,view}}]), - gs:menuitem(SubMenu, [{label, {text,"Delete"}}, - {font, Font}, - {data, {module,Mod,delete}}]), - - %% Add the module to the listbox - gs:config(WinInfo#winInfo.listbox, {add, Mod}), - - ModInfo = #moduleInfo{module=Mod, menubtn=MenuBtn}, - WinInfo#winInfo{modules=[ModInfo | Modules]}; - true -> WinInfo - end. - -%%-------------------------------------------------------------------- -%% delete_module(WinInfo, Mod) -> WinInfo -%% WinInfo = #winInfo{} -%% Mod = atom() -%%-------------------------------------------------------------------- -delete_module(WinInfo, Mod) -> - {value, ModInfo} = lists:keysearch(Mod, #moduleInfo.module, - WinInfo#winInfo.modules), - gs:destroy(ModInfo#moduleInfo.menubtn), - delete_module(WinInfo#winInfo.listbox, atom_to_list(Mod), 0), - WinInfo#winInfo{modules=lists:keydelete(Mod, #moduleInfo.module, - WinInfo#winInfo.modules)}. - -delete_module(Listbox, ModS, Index) -> - case gs:read(Listbox, {get, Index}) of - ModS -> - gs:config(Listbox, {del, Index}); - _OtherModS -> - delete_module(Listbox, ModS, Index+1) - end. - -%%-------------------------------------------------------------------- -%% add_process(WinInfo, Pid, Name, Function, Status, Info) -> WinInfo -%% WinInfo = #winInfo{} -%% Pid = pid() -%% Name = undefined | atom() -%% Function = {Mod, Func, Args} -%% Status = idle | running | break | exit -%% Info = {} | term() -%%-------------------------------------------------------------------- -add_process(WinInfo, Pid, Name, {Mod,Func,Args}, Status, Info) -> - Grid = WinInfo#winInfo.grid, - Row = (WinInfo#winInfo.row)+1, - GridLine = case gs:read(Grid, {obj_at_row, Row}) of - undefined -> - if Row>?default_rows -> - gs:config(Grid,[{rows,{1,Row}}]); - true -> ok - end, - gs:gridline(Grid,[{row,Row}, {bw,5}, {fg,black}, - {font,dbg_ui_win:font(normal)}, - {click, true}, - {doubleclick, true}]); - GSObj -> - GSObj - end, - Name2 = case Name of undefined -> ""; _ -> Name end, - FuncS = io_lib:format("~w:~w/~w", [Mod, Func, length(Args)]), - Info2 = case Info of {} -> ""; _ -> Info end, - Options = [{text, {1,Pid}}, {text, {2,FuncS}}, {text, {3,Name2}}, - {text, {4,Status}}, {text, {5,Info2}}, - {data, {gridline, Pid}}], - gs:config(GridLine, Options), - - ProcInfo = #procInfo{pid=Pid, row=Row}, - WinInfo#winInfo{processes=[ProcInfo|WinInfo#winInfo.processes], - row=Row}. - -%%-------------------------------------------------------------------- -%% update_process(WinInfo, Pid, Status, Info) -%% WinInfo = #winInfo{} -%% Pid = pid() -%% Status = idle | running | break | exit -%% Info = {} | term() -%%-------------------------------------------------------------------- -update_process(WinInfo, Pid, Status, Info) -> - {value, ProcInfo} = lists:keysearch(Pid, #procInfo.pid, - WinInfo#winInfo.processes), - - Grid = WinInfo#winInfo.grid, - GridLine = gs:read(Grid, {obj_at_row, ProcInfo#procInfo.row}), - - Info2 = case Info of {} -> ""; _ -> Info end, - gs:config(GridLine, [{text, {4,Status}}, {text, {5,Info2}}]). - -%%-------------------------------------------------------------------- -%% clear_processes(WinInfo) -> WinInfo -%% WinInfo = #winInfo{} -%%-------------------------------------------------------------------- -clear_processes(WinInfo) -> - Grid = WinInfo#winInfo.grid, - Max = WinInfo#winInfo.row, - clear_processes(Grid, 2, Max), - gs:config(Grid,[{rows,{1,?default_rows}}]), - WinInfo#winInfo{row=1, focus=0, processes=[]}. - -clear_processes(Grid, Row, Max) when Row=<Max -> - GridLine = gs:read(Grid, {obj_at_row, Row}), - case gs:read(GridLine,{text,4}) of - "exit" -> - Pid = list_to_pid(gs:read(GridLine,{text,1})), - dbg_ui_winman:clear_process(dbg_ui_trace:title(Pid)); - _ -> - ok - end, - - Options = [{fg, black}, - {{text,1}, ""}, {{text,2},""}, {{text,3},""}, - {{text,4}, ""}, {{text,5},""}, - {data, []}], - gs:config(GridLine, Options), - clear_processes(Grid, Row+1, Max); -clear_processes(_Grid, Row, Max) when Row>Max -> - done. - -%%-------------------------------------------------------------------- -%% add_break(WinInfo, Name, {Point, Options}) -> WinInfo -%% WinInfo = #winInfo{} -%% Name = atom() -%% Point = {Mod, Line} -%% Options = [Status, Action, Mods, Cond] -%% Status = active | inactive -%% Action = enable | disable | delete -%% Mods = null (not used) -%% Cond = null | {Mod, Func} -%%-------------------------------------------------------------------- -add_break(WinInfo, Menu, {Point, Options}) -> - Break = dbg_ui_win:add_break(Menu, Point), - dbg_ui_win:update_break(Break, Options), - BreakInfo = #breakInfo{point=Point, break=Break}, - WinInfo#winInfo{breaks=[BreakInfo|WinInfo#winInfo.breaks]}. - -%%-------------------------------------------------------------------- -%% update_break(WinInfo, {Point, Options}) -%% WinInfo = #winInfo{} -%% Point = {Mod, Line} -%% Options = [Status, Action, Mods, Cond] -%% Status = active | inactive -%% Action = enable | disable | delete -%% Mods = null (not used) -%% Cond = null | {Mod, Func} -%%-------------------------------------------------------------------- -update_break(WinInfo, {Point, Options}) -> - {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point, - WinInfo#winInfo.breaks), - dbg_ui_win:update_break(BreakInfo#breakInfo.break, Options). - -%%-------------------------------------------------------------------- -%% delete_break(WinInfo, Point) -> WinInfo -%% WinInfo = #winInfo{} -%% Point = {Mod, Line} -%%-------------------------------------------------------------------- -delete_break(WinInfo, Point) -> - {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point, - WinInfo#winInfo.breaks), - dbg_ui_win:delete_break(BreakInfo#breakInfo.break), - WinInfo#winInfo{breaks=lists:keydelete(Point, #breakInfo.point, - WinInfo#winInfo.breaks)}. - -%%-------------------------------------------------------------------- -%% clear_breaks(WinInfo) -> WinInfo -%% clear_breaks(WinInfo, Mod) -> WinInfo -%% WinInfo = #winInfo{} -%%-------------------------------------------------------------------- -clear_breaks(WinInfo) -> - lists:foreach(fun(BreakInfo) -> - dbg_ui_win:delete_break(BreakInfo#breakInfo.break) - end, - WinInfo#winInfo.breaks), - WinInfo#winInfo{breaks=[]}. -clear_breaks(WinInfo, Mod) -> - Fun = - fun(BreakInfo) -> - case BreakInfo#breakInfo.point of - {Mod, _Line} -> - dbg_ui_win:delete_break(BreakInfo#breakInfo.break), - false; - _ -> true - end - end, - Breaks = lists:filter(Fun, WinInfo#winInfo.breaks), - WinInfo#winInfo{breaks=Breaks}. - -%%-------------------------------------------------------------------- -%% handle_event(GSEvent, WinInfo) -> Command -%% GSEvent = {gs, Id, Event, Data, Arg} -%% WinInfo = #winInfo{} -%% Command = ignore -%% | stopped -%% | {coords, {X,Y}} -%% -%% | {shortcut, Key} -%% | MenuItem | {Menu, [MenuItem]} -%% MenuItem = Menu = atom() -%% | {break, Point, What} -%% What = delete | {status, Status} | {trigger, Trigger} -%% | {module, Mod, What} -%% What = view | delete -%% -%% | {focus, Pid, WinInfo} -%% | default -%%-------------------------------------------------------------------- -%% Window events -handle_event({gs, _Id, configure, _Data, [W, H |_]}, WinInfo) -> - configure(WinInfo, {W, H}), - ignore; -handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) -> - stopped; -handle_event({gs, _Id, motion, _Data, [X,Y]}, WinInfo) -> - {LastX, LastY} = dbg_ui_win:motion(X, Y), - Win = WinInfo#winInfo.window, - {coords, {gs:read(Win, x)+LastX-5, gs:read(Win, y)+LastY-5}}; - -%% Menus and keyboard shortcuts -handle_event({gs, _Id, keypress, _Data, [Key,_,_,1]}, _WinInfo) when - Key/='Up', Key/='Down', Key/=p, Key/=n -> - {shortcut, Key}; -handle_event({gs, _Id, click, {dbg_ui_winman, Win}, _Arg}, _WinInfo) -> - dbg_ui_winman:raise(Win), - ignore; -handle_event({gs, _Id, click, {menuitem, Name}, _Arg}, _WinInfo) -> - Name; -handle_event({gs, _Id, click, {menu, Menu}, _Arg}, _WinInfo) -> - Names = dbg_ui_win:selected(Menu), - {Menu, Names}; -handle_event({gs, _Id, click, {break, Point, What}, _Arg}, _WinInfo) -> - {break, Point, What}; -handle_event({gs, _Id, click, {module, Mod, What}, _Arg}, _WinInfo) -> - {module, Mod, What}; - -%% Listbox -handle_event({gs, _Id, doubleclick, listbox, [_Index, ModS|_]}, _WI) -> - {module, list_to_atom(ModS), view}; - -%% Auto attach buttons -handle_event({gs, _Id, click, autoattach, _Arg}, WinInfo) -> - Names = lists:foldl(fun (Button, NamesAcc) -> - case gs:read(Button, select) of - true -> - {text, Name} = - gs:read(Button, label), - [list_to_atom(Name)|NamesAcc]; - false -> - NamesAcc - end - end, - [], - [WinInfo#winInfo.ebutton, - WinInfo#winInfo.bbutton, - WinInfo#winInfo.fbutton]), - {'Auto Attach', Names}; - -%% Process grid -handle_event({gs, _Id, keypress, _Data, [Key|_]}, WinInfo) when - Key =:= 'Up'; Key =:= 'Down' -> - Dir = if Key =:= 'Up' -> up; Key =:= 'Down' -> down end, - Row = move(WinInfo, Dir), - if Row>1 -> - WinInfo2 = highlight(WinInfo, Row), - #procInfo{pid=Pid} = - lists:keyfind(Row, #procInfo.row, WinInfo#winInfo.processes), - {focus, Pid, WinInfo2}; - true -> - ignore - end; -handle_event({gs, _Id, click, {gridline, Pid}, [_Col,Row|_]}, WinInfo) -> - WinInfo2 = highlight(WinInfo, Row), - {focus, Pid, WinInfo2}; -handle_event({gs, _Id, doubleclick, _Data, _Arg}, _WinInfo) -> - default; - -handle_event(_GSEvent, _WinInfo) -> - ignore. - -move(WinInfo, Dir) -> - Row = WinInfo#winInfo.focus, - Last = WinInfo#winInfo.row, - if - Dir =:= up, Row > 1 -> Row-1; - Dir =:= down, Row < Last -> Row+1; - true -> Row - end. - -highlight(WinInfo, Row) -> - Grid = WinInfo#winInfo.grid, - case WinInfo#winInfo.focus of - 0 -> ignore; - Focus -> - GridLine1 = gs:read(Grid, {obj_at_row, Focus}), - gs:config(GridLine1, {fg, black}) - end, - GridLine2 = gs:read(Grid, {obj_at_row, Row}), - gs:config(GridLine2, {fg, white}), - WinInfo#winInfo{focus=Row}. - -%%==================================================================== -%% Internal functions -%%==================================================================== - -configure(WinInfo, {W, H}) -> - Grid = WinInfo#winInfo.grid, - NewW = W - (2*?PAD+?Wf), - Dx = NewW - gs:read(Grid, width), - Dy = H-42 - gs:read(Grid, height), - if - (Dx+Dy) =/= 0 -> - gs:config(Grid, [{width, NewW}, {height, H-30}]), - Cols = calc_columnwidths(NewW), - gs:config(Grid, Cols); - true -> - ok - end. - -calc_columnwidths(Width) -> - W = if - Width =< ?Wg -> ?Wg; - true -> Width - end, - First = [round(X) || X <- [0.13*W, 0.27*W, 0.18*W, 0.18*W]], - Last = W - lists:sum(First) - 30, - {columnwidths, First++[Last]}. diff --git a/lib/debugger/src/dbg_ui_settings.erl b/lib/debugger/src/dbg_ui_settings.erl deleted file mode 100644 index fcfd67966f..0000000000 --- a/lib/debugger/src/dbg_ui_settings.erl +++ /dev/null @@ -1,162 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2002-2011. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_settings). - --include_lib("kernel/include/file.hrl"). - -%% External exports --export([start/4]). - -%% Internal exports --export([init/6]). - -%% OTP-6011 What's denoted gs="Graphics system id" is now in fact -%% the object id of the monitor window. --record(state, {gs, % term() Graphics system id - win, % term() Settings dialog window data - monitor, % pid() Monitor pid - action % load | save - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% start(GS, Pos, Action, SFile) -%% GS = Graphics system id -%% Pos = {X,Y} -%% Action = load | save -%% SFile = default | string() -%%-------------------------------------------------------------------- -start(GS, Pos, Action, SFile) -> - Title = case Action of - load -> "Load Settings Dialog"; - save -> "Save Settings Dialog" - end, - case dbg_ui_winman:is_started(Title) of - true -> ignore; - false -> - spawn(?MODULE, init, [self(), GS, Pos, Title, Action, SFile]) - end. - -%%==================================================================== -%% Internal exports -%%==================================================================== - -init(Monitor, GS, Pos, Title, Action, SFile) -> - {SDir, SFileName} = - if - %% If settings are saved for the first time, and to - %% the default directory HOME/erlang.tools/debugger, - %% make sure the directory exists, or create it if - %% desired and possible - SFile==default -> {default_settings_dir(GS), "NoName.state"}; - true -> {filename:dirname(SFile), filename:basename(SFile)} - end, - - Filter = filename:join(SDir, "*.state"), - Extra = fun(_File) -> true end, - - %% Create window - Win = case Action of - load -> - dbg_ui_filedialog_win:create_win(GS, Title, Pos, normal, - Filter, Extra); - save -> - dbg_ui_filedialog_win:create_win(GS, Title, Pos, normal, - Filter, Extra, SFileName) - end, - Window = dbg_ui_filedialog_win:get_window(Win), - dbg_ui_winman:insert(Title, Window), - - State = #state{gs=GS, win=Win, monitor=Monitor, action=Action}, - loop(State). - - -%%==================================================================== -%% Main loop and message handling -%%==================================================================== - -loop(State) -> - receive - - %% From the GUI - GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs -> - Cmd = dbg_ui_filedialog_win:handle_event(GuiEvent, - State#state.win), - State2 = gui_cmd(Cmd, State), - loop(State2); - - %% From the dbg_ui_winman process (Debugger window manager) - {dbg_ui_winman, update_windows_menu, _Data} -> - loop(State); - {dbg_ui_winman, destroy} -> - exit(normal) - end. - -gui_cmd(ignore, State) -> - State; -gui_cmd({stopped, _Dir}, _State) -> - exit(normal); -gui_cmd({win, Win}, State) -> - State#state{win=Win}; -gui_cmd({select, File}, State) -> - State#state.monitor ! {dbg_ui_settings, File, State#state.action}, - exit(normal). - - -%%==================================================================== -%% Internal functions -%%==================================================================== - -default_settings_dir(GS) -> - {ok, [[Home]]} = init:get_argument(home), - DefDir = filename:join([Home, ".erlang_tools", "debugger"]), - - case filelib:is_dir(DefDir) of - true -> DefDir; - false -> - {ok, CWD} = file:get_cwd(), - - Msg = ["Default directory", DefDir, "does not exist.", - "Click OK to create it or", - "Cancel to use other directory."], - case tool_utils:confirm(GS, Msg) of - ok -> - ToolsDir = filename:dirname(DefDir), - case filelib:is_dir(ToolsDir) of - true -> - case file:make_dir(DefDir) of - ok -> DefDir; - _Error -> CWD - end; - false -> - case file:make_dir(ToolsDir) of - ok -> - case file:make_dir(DefDir) of - ok -> DefDir; - _Error -> CWD - end; - _Error -> CWD - end - end; - cancel -> CWD - end - end. diff --git a/lib/debugger/src/dbg_ui_trace.erl b/lib/debugger/src/dbg_ui_trace.erl deleted file mode 100644 index 3e1fb2dcae..0000000000 --- a/lib/debugger/src/dbg_ui_trace.erl +++ /dev/null @@ -1,814 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2013. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_trace). - -%% External exports --export([start/1, start/3]). --export([title/1]). - --define(TRACEWIN, ['Button Area', 'Evaluator Area', 'Bindings Area']). --define(BACKTRACE, 100). - --record(state, {gs, % term() Graphics system id - win, % term() Attach process window data - coords, % {X,Y} Mouse point position - - pid, % pid() Debugged process - meta, % pid() Meta process - status, % {Status,Mod,Line} | {exit,Where,Reason} - % Status = init | idle | break - % | wait_break | wait_running - % | running - % Where={Mod,Line} | null - - cm, % atom() | undefined Current module - cm_obsolete=false, % boolean() Curr mod needs reloading - - stack, % {Cur,Max} - - trace, % boolean() - stack_trace, % all | no_tail | false - backtrace % integer() #call frames to fetch - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% start(Pid) -%% start(Pid, TraceWin, BackTrace) -%% Pid = pid() -%% TraceWin = [WinArea] -%% WinArea = 'Button|Evaluator|Bindings|Trace Area' -%% Backtrace = integer() -%%-------------------------------------------------------------------- -start(Pid) -> % Used by debugger:quick/3 (no monitor) - start(Pid, ?TRACEWIN, ?BACKTRACE). -start(Pid, TraceWin, BackTrace) -> - case {whereis(dbg_wx_mon), whereis(dbg_ui_mon)} of - {undefined, undefined} -> - case which_gui() of - gs -> - start2(Pid, TraceWin, BackTrace); - wx -> - dbg_wx_trace:start(Pid, TraceWin, BackTrace) - end; - {undefined, Monitor} when is_pid(Monitor) -> - start2(Pid, TraceWin, BackTrace); - {Monitor, _} when is_pid(Monitor) -> - dbg_wx_trace:start(Pid, TraceWin, BackTrace) - end. - -start2(Pid, TraceWin, BackTrace) -> - %% Inform int about my existence and get the meta pid back - case int:attached(Pid) of - {ok, Meta} -> - init(Pid, Meta, TraceWin, BackTrace); - error -> - ignore - end. - -which_gui() -> - try - wx:new(), - wx:destroy(), - wx - catch _:_ -> - gs - end. - -%%-------------------------------------------------------------------- -%% title(Pid) -> string() -%% By exporting this function, dbg_ui_mon may check with dbg_ui_winman -%% if there already is an attach window for a given pid and thus avoid -%% spawning processes unnecessarily. -%%-------------------------------------------------------------------- -title(Pid) -> - "Attach Process " ++ pid_to_list(Pid). - - -%%==================================================================== -%% Main loop and message handling -%%==================================================================== - -init(Pid, Meta, TraceWin, BackTrace) -> - - %% Start necessary stuff - GS = dbg_ui_trace_win:init(), % Graphics system - - %% Create attach process window - Title = title(Pid), - Win = dbg_ui_trace_win:create_win(GS, Title, TraceWin, menus()), - Window = dbg_ui_trace_win:get_window(Win), - dbg_ui_winman:insert(Title, Window), - - %% Initial process state - State1 = #state{gs=GS, win=Win, coords={0,0}, pid=Pid, meta=Meta, - status={idle,null,null}, - stack={1,1}}, - - State2 = init_options(TraceWin, - int:stack_trace(), % Stack Trace - BackTrace, % Back trace size - State1), - - State3 = init_contents(int:all_breaks(), % Breakpoints - State2), - - int:meta(Meta, trace, State3#state.trace), - - gui_enable_updown(stack_trace, {1,1}), - gui_enable_btrace(false, false), - dbg_ui_trace_win:display(idle), - - loop(State3). - -init_options(TraceWin, StackTrace, BackTrace, State) -> - lists:foreach(fun(Area) -> dbg_ui_trace_win:select(Area, true) end, - TraceWin), - - Trace = lists:member('Trace Area', TraceWin), - - dbg_ui_trace_win:select(map(StackTrace), true), - - %% Backtrace size is (currently) not shown in window - - State#state{trace=Trace,stack_trace=StackTrace,backtrace=BackTrace}. - -init_contents(Breaks, State) -> - Win = - lists:foldl(fun(Break, Win) -> - dbg_ui_trace_win:add_break(Win, - 'Break',Break) - end, - State#state.win, - Breaks), - - State#state{win=Win}. - -loop(#state{meta=Meta} = State) -> - receive - - %% From the GUI main window - GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs -> - Cmd = - dbg_ui_trace_win:handle_event(GuiEvent,State#state.win), - State2 = gui_cmd(Cmd, State), - loop(State2); - - %% From the GUI help windows - {gui, Cmd} -> - State2 = gui_cmd(Cmd, State), - loop(State2); - - %% From the interpreter - {int, Cmd} -> - State2 = int_cmd(Cmd, State), - loop(State2); - - %% From the meta process - {Meta, Cmd} -> - State2 = meta_cmd(Cmd, State), - loop(State2); - {NewMeta, {exit_at, Where, Reason, Cur}} -> - State2 = meta_cmd({exit_at, Where, Reason, Cur}, - State#state{meta=NewMeta}), - loop(State2); - - %% From the dbg_ui_edit process - {dbg_ui_edit, 'Backtrace:', BackTrace} -> - loop(State#state{backtrace=BackTrace}); - {dbg_ui_edit, Var, Val} -> - Cmd = atom_to_list(Var)++"="++io_lib:format("~p", [Val]), - State2 = gui_cmd({user_command, lists:flatten(Cmd)}, State), - loop(State2); - - %% From the dbg_ui_winman process (Debugger window manager) - {dbg_ui_winman, update_windows_menu, Data} -> - dbg_ui_winman:update_windows_menu(Data), - loop(State); - {dbg_ui_winman, destroy} -> - exit(stop) - end. - -%%--Commands from the GUI--------------------------------------------- - -gui_cmd(ignore, State) -> - State; -gui_cmd({win, Win}, State) -> - State#state{win=Win}; -gui_cmd(stopped, _State) -> - exit(stop); -gui_cmd({coords, Coords}, State) -> - State#state{coords=Coords}; - -gui_cmd({shortcut, Key}, State) -> - case shortcut(Key) of - {always, Cmd} -> gui_cmd(Cmd, State); - {if_enabled, Cmd} -> - case dbg_ui_trace_win:is_enabled(Cmd) of - true -> gui_cmd(Cmd, State); - false -> State - end; - false -> State - end; - -%% File menu -gui_cmd('Close', State) -> - gui_cmd(stopped, State); - -%% Edit menu -gui_cmd('Go To Line...', State) -> - %% Will result in message handled below: {gui, {gotoline, Line}} - dbg_ui_trace_win:helpwin(gotoline, State#state.win, - State#state.gs, State#state.coords), - State; -gui_cmd({gotoline, Line}, State) -> - Win = dbg_ui_trace_win:select_line(State#state.win, Line), - State#state{win=Win}; -gui_cmd('Search...', State) -> - dbg_ui_trace_win:helpwin(search, State#state.win, - State#state.gs, State#state.coords), - State; - -%% Process menu -gui_cmd('Step', State) -> - int:meta(State#state.meta, step), - State; -gui_cmd('Next', State) -> - int:meta(State#state.meta, next), - State; -gui_cmd('Continue', State) -> - int:meta(State#state.meta, continue), - {Status, Mod, Line} = State#state.status, - if - Status==wait_break -> - Win = dbg_ui_trace_win:unmark_line(State#state.win), - gui_enable_functions(wait_running), - State#state{win=Win, status={wait_running,Mod,Line}}; - true -> - dbg_ui_trace_win:enable(['Stop'], true), - dbg_ui_trace_win:enable(['Continue'], false), - State - end; -gui_cmd('Finish', State) -> - int:meta(State#state.meta, finish), - State; -gui_cmd('Skip', State) -> - int:meta(State#state.meta, skip), - State; -gui_cmd('Time Out', State) -> - int:meta(State#state.meta, timeout), - State; -gui_cmd('Stop', State) -> - int:meta(State#state.meta, stop), - {Status, Mod, Line} = State#state.status, - if - Status==wait_running -> - Win = dbg_ui_trace_win:mark_line(State#state.win, Line, - break), - gui_enable_functions(wait_break), - gui_enable_updown(State#state.stack_trace, - State#state.stack), - gui_enable_btrace(State#state.trace, - State#state.stack_trace), - dbg_ui_trace_win:display({wait, Mod, Line}), - State#state{win=Win, status={wait_break,Mod,Line}}; - true -> - dbg_ui_trace_win:enable(['Stop'], false), - dbg_ui_trace_win:enable(['Continue'], true), - State - end; -gui_cmd('Where', State) -> - {_Cur, Max} = State#state.stack, - Stack = {Max, Max}, - {_Status, Mod, Line} = State#state.status, - Win = gui_show_module(State#state.win, Mod, Line, - State#state.cm, State#state.pid, break), - gui_update_bindings(State#state.meta), - gui_enable_updown(State#state.stack_trace, Stack), - dbg_ui_trace_win:display(State#state.status), - State#state{win=Win, cm=Mod, stack=Stack}; - -gui_cmd('Kill', State) -> - exit(State#state.pid, kill), - State; -gui_cmd('Messages', State) -> - case int:meta(State#state.meta, messages) of - [] -> - dbg_ui_trace_win:eval_output("< No Messages!\n", bold); - Messages -> - dbg_ui_trace_win:eval_output("< --- Current Messages ---\n", - bold), - lists:foldl( - fun(Msg, N) -> - Str1 = io_lib:format(" ~w:", [N]), - dbg_ui_trace_win:eval_output(Str1, bold), - Str2 = io_lib:format(" ~ts~n",[io_lib:print(Msg)]), - dbg_ui_trace_win:eval_output(Str2, normal), - N+1 - end, - 1, - Messages) - end, - State; -gui_cmd('Back Trace', State) -> - dbg_ui_trace_win:trace_output("\nBACK TRACE\n----------\n"), - lists:foreach( - fun({Le, {Mod,Func,Args}}) -> - Str = io_lib:format("~p > ~p:~p~p~n", - [Le, Mod, Func, Args]), - dbg_ui_trace_win:trace_output(Str); - ({Le, {Fun,Args}}) -> - Str = io_lib:format("~p > ~p~p~n", [Le, Fun, Args]), - dbg_ui_trace_win:trace_output(Str); - (_) -> ignore - end, - int:meta(State#state.meta, backtrace, State#state.backtrace)), - dbg_ui_trace_win:trace_output("\n"), - State; -gui_cmd('Up', State) -> - {Cur, Max} = State#state.stack, - case int:meta(State#state.meta, stack_frame, {up, Cur}) of - {New, {undefined,-1}, _Bs} -> % call from non-interpreted code - Stack = {New, Max}, - Win = dbg_ui_trace_win:show_no_code(State#state.win), - dbg_ui_trace_win:update_bindings([]), - gui_enable_updown(State#state.stack_trace, Stack), - dbg_ui_trace_win:display({New,null,null}), - State#state{win=Win, cm=null, stack=Stack}; - - {New, {Mod,Line}, Bs} -> - Stack = {New, Max}, - Win = gui_show_module(State#state.win, Mod, Line, - State#state.cm, State#state.pid, - where), - dbg_ui_trace_win:update_bindings(Bs), - gui_enable_updown(State#state.stack_trace, Stack), - dbg_ui_trace_win:display({New,Mod,Line}), - State#state{win=Win, cm=Mod, stack=Stack}; - top -> - dbg_ui_trace_win:enable(['Up'], false), - State - end; -gui_cmd('Down', State) -> - {Cur, Max} = State#state.stack, - case int:meta(State#state.meta, stack_frame, {down, Cur}) of - {New, {undefined,-1}, _Bs} -> % call from non-interpreted code - Stack = {New, Max}, - Win = dbg_ui_trace_win:show_no_code(State#state.win), - dbg_ui_trace_win:update_bindings([]), - gui_enable_updown(State#state.stack_trace, Stack), - dbg_ui_trace_win:display({New,null,null}), - State#state{win=Win, cm=null, stack=Stack}; - - {New, {Mod,Line}, Bs} -> - Stack = {New, Max}, - Win = gui_show_module(State#state.win, Mod, Line, - State#state.cm, State#state.pid, - where), - dbg_ui_trace_win:update_bindings(Bs), - gui_enable_updown(State#state.stack_trace, Stack), - dbg_ui_trace_win:display({New,Mod,Line}), - State#state{win=Win, cm=Mod, stack=Stack}; - - bottom -> - gui_cmd('Where', State) - end; - -%% Break menu -gui_cmd('Line Break...', State) -> - add_break(State#state.gs, State#state.coords, line, - State#state.cm, - dbg_ui_trace_win:selected_line(State#state.win)), - State; -gui_cmd('Conditional Break...', State) -> - add_break(State#state.gs, State#state.coords, conditional, - State#state.cm, - dbg_ui_trace_win:selected_line(State#state.win)), - State; -gui_cmd('Function Break...', State) -> - add_break(State#state.gs, State#state.coords, function, - State#state.cm, undefined), - State; -gui_cmd('Enable All', State) -> - Breaks = int:all_breaks(), - ThisMod = State#state.cm, - lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod -> - int:enable_break(Mod, Line); - (_Break) -> - ignore - end, - Breaks), - State; -gui_cmd('Disable All', State) -> - Breaks = int:all_breaks(), - ThisMod = State#state.cm, - lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod -> - int:disable_break(Mod, Line); - (_Break) -> - ignore - end, - Breaks), - State; -gui_cmd('Delete All', State) -> - int:no_break(State#state.cm), - State; -gui_cmd({break, {Mod, Line}, What}, State) -> - case What of - add -> int:break(Mod, Line); - delete -> int:delete_break(Mod, Line); - {status, inactive} -> int:disable_break(Mod, Line); - {status, active} -> int:enable_break(Mod, Line); - {trigger, Action} -> int:action_at_break(Mod, Line, Action) - end, - State; - -%% Options menu -gui_cmd({'Trace Window', TraceWin}, State) -> - Trace = lists:member('Trace Area', TraceWin), - int:meta(State#state.meta, trace, Trace), - Win = dbg_ui_trace_win:configure(State#state.win, TraceWin), - {Status,_,_} = State#state.status, - if - Status==break; Status==wait_break -> - gui_enable_btrace(Trace, State#state.stack_trace); - true -> ignore - end, - State#state{win=Win, trace=Trace}; -gui_cmd({'Stack Trace', [Name]}, State) -> - int:meta(State#state.meta, stack_trace, map(Name)), - {Status,_,_} = State#state.status, - if - Status==break; Status==wait_break -> - gui_enable_btrace(State#state.trace, map(Name)); - true -> ignore - end, - State; -gui_cmd('Back Trace Size...', State) -> - dbg_ui_edit:start(State#state.gs, State#state.coords, "Backtrace", - 'Backtrace:', {integer, State#state.backtrace}), - State; - -%% Help menu -gui_cmd('Debugger', State) -> - Window = dbg_ui_trace_win:get_window(State#state.win), - HelpFile = filename:join([code:lib_dir(debugger), - "doc", "html", "part_frame.html"]), - tool_utils:open_help(Window, HelpFile), - State; - -gui_cmd({user_command, Cmd}, State) -> - {Status, _Mod, _Line} = State#state.status, - if - Status==break; - Status==wait_break; - Status==wait_running -> - Cm = State#state.cm, - Arg = case State#state.stack of - {Cur, Max} when Cur<Max -> {Cm, Cmd, Cur}; - _Stack -> {Cm, Cmd} - end, - - %% Reply will be received as {Meta, {eval_rsp, Res}} - int:meta(State#state.meta, eval, Arg); - true -> - Str = "Commands not allowed", - dbg_ui_trace_win:eval_output([$<,Str,10], normal) - end, - State; - -gui_cmd({edit, {Var, Val}}, State) -> - dbg_ui_edit:start(State#state.gs, State#state.coords, - "Edit variable", Var, {term, Val}), - State. - -add_break(GS, Coords, Type, undefined, _Line) -> - dbg_ui_break:start(GS, Coords, Type); -add_break(GS, Coords, Type, Mod, undefined) -> - dbg_ui_break:start(GS, Coords, Type, Mod); -add_break(GS, Coords, Type, Mod, Line) -> - dbg_ui_break:start(GS, Coords, Type, Mod, Line). - -%%--Commands from the interpreter------------------------------------- - -int_cmd({interpret, Mod}, State) -> - if - Mod==State#state.cm -> - State#state{cm_obsolete=true}; - true -> - State - end; -int_cmd({no_interpret, Mod}, State) -> - if - Mod==State#state.cm -> - State#state{cm_obsolete=true}; - true -> - Win = dbg_ui_trace_win:remove_code(State#state.win, Mod), - State#state{win=Win} - end; - -int_cmd({new_break, Break}, State) -> - Win = dbg_ui_trace_win:add_break(State#state.win, 'Break', Break), - State#state{win=Win}; -int_cmd({delete_break, Point}, State) -> - Win = dbg_ui_trace_win:delete_break(State#state.win, Point), - State#state{win=Win}; -int_cmd({break_options, Break}, State) -> - Win = dbg_ui_trace_win:update_break(State#state.win, Break), - State#state{win=Win}; -int_cmd(no_break, State) -> - Win = dbg_ui_trace_win:clear_breaks(State#state.win), - State#state{win=Win}; -int_cmd({no_break, Mod}, State) -> - Win = dbg_ui_trace_win:clear_breaks(State#state.win, Mod), - State#state{win=Win}. - -%%--Commands from the meta process------------------------------------ - -%% Message received when first attached to a living process -%% '_Trace' is a boolean indicating if the process is traced or not -- -%% ignore this as we already have ordered tracing or not depending on if -%% the Trace Area is shown or not. -meta_cmd({attached, Mod, Line, _Trace}, State) -> - Win = if - Mod/=undefined -> - gui_enable_functions(init), - gui_show_module(State#state.win, Mod, Line, - State#state.cm, State#state.pid, - break); - true -> State#state.win - end, - State#state{win=Win, status={init,Mod,Line}, cm=Mod}; - -%% Message received when returning to interpreted code -meta_cmd({re_entry, dbg_ieval, eval_fun}, State) -> - State; -meta_cmd({re_entry, Mod, _Func}, State) -> - Obs = State#state.cm_obsolete, - case State#state.cm of - Mod when Obs==true -> - Win = gui_load_module(State#state.win, Mod,State#state.pid), - State#state{win=Win, cm_obsolete=false}; - Mod -> State; - Cm -> - Win = gui_show_module(State#state.win, Mod, 0, - Cm, State#state.pid, break), - State#state{win=Win, cm=Mod} - end; - -%% Message received when attached to a terminated process -meta_cmd({exit_at, null, Reason, Cur}, State) -> - Stack = {Cur, Cur}, - gui_enable_functions(exit), - gui_enable_updown(false, Stack), - dbg_ui_trace_win:display({exit, null, Reason}), - State#state{status={exit,null,Reason}, stack=Stack}; -meta_cmd({exit_at, {Mod,Line}, Reason, Cur}, State) -> - Stack = {Cur+1, Cur+1}, - Win = gui_show_module(State#state.win, Mod, Line, - State#state.cm, State#state.pid, break), - gui_enable_functions(exit), - gui_enable_updown(State#state.stack_trace, Stack), - gui_enable_btrace(State#state.trace, State#state.stack_trace), - gui_update_bindings(State#state.meta), - dbg_ui_trace_win:display({exit, {Mod,Line}, Reason}), - State#state{win=Win, cm=Mod,status={exit,{Mod,Line},Reason}, - stack=Stack}; - -meta_cmd({break_at, Mod, Line, Cur}, State) -> - Stack = {Cur,Cur}, - Win = gui_show_module(State#state.win, Mod, Line, - State#state.cm, State#state.pid, break), - gui_enable_functions(break), - gui_enable_updown(State#state.stack_trace, Stack), - gui_enable_btrace(State#state.trace, State#state.stack_trace), - gui_update_bindings(State#state.meta), - dbg_ui_trace_win:display({break, Mod, Line}), - State#state{win=Win, cm=Mod, status={break,Mod,Line}, stack=Stack}; -meta_cmd({func_at, Mod, Line, Cur}, State) -> - Stack = {Cur,Cur}, - Win = gui_show_module(State#state.win, Mod, Line, - State#state.cm, State#state.pid, where), - gui_enable_functions(idle), - dbg_ui_trace_win:display(idle), - State#state{win=Win, cm=Mod, status={idle,Mod,Line}, stack=Stack}; -meta_cmd({wait_at, Mod, Line, Cur}, #state{status={Status,_,_}}=State) - when Status/=init, Status/=break -> - Stack = {Cur,Cur}, - gui_enable_functions(wait_running), - dbg_ui_trace_win:display({wait,Mod,Line}), - State#state{status={wait_running,Mod,Line}, stack=Stack}; -meta_cmd({wait_at, Mod, Line, Cur}, State) -> - Stack = {Cur,Cur}, - Win = gui_show_module(State#state.win, Mod, Line, - State#state.cm, State#state.pid, break), - gui_enable_functions(wait_break), - gui_enable_updown(State#state.stack_trace, Stack), - gui_enable_btrace(State#state.trace, State#state.stack_trace), - gui_update_bindings(State#state.meta), - dbg_ui_trace_win:display({wait, Mod, Line}), - State#state{win=Win, cm=Mod, status={wait_break,Mod,Line}, - stack=Stack}; -meta_cmd({wait_after_at, Mod, Line, Sp}, State) -> - meta_cmd({wait_at, Mod, Line, Sp}, State); -meta_cmd(running, State) -> - Win = dbg_ui_trace_win:unmark_line(State#state.win), - gui_enable_functions(running), - dbg_ui_trace_win:update_bindings([]), - dbg_ui_trace_win:display({running, State#state.cm}), - State#state{win=Win, status={running,null,null}}; - -meta_cmd(idle, State) -> - Win = dbg_ui_trace_win:show_no_code(State#state.win), - gui_enable_functions(idle), - dbg_ui_trace_win:update_bindings([]), - dbg_ui_trace_win:display(idle), - State#state{win=Win, status={idle,null,null}, cm=undefined}; - -%% Message about changed trace option can be ignored, the change must -%% have been ordered by this process. (In theory, the change could have -%% been ordered by another attached process. The Debugger, though, -%% allows max one attached process per debugged process). -meta_cmd({trace, _Bool}, State) -> - State; - -meta_cmd({stack_trace, Flag}, State) -> - dbg_ui_trace_win:select(map(Flag), true), - gui_enable_updown(Flag, State#state.stack), - {Status,_,_} = State#state.status, - if - Status==break; Status==wait_break -> - gui_enable_btrace(State#state.trace, Flag); - true -> ignore - end, - State#state{stack_trace=Flag}; - -meta_cmd({trace_output, Str}, State) -> - dbg_ui_trace_win:trace_output(Str), - State; - -%% Reply on a user command -meta_cmd({eval_rsp, Res}, State) -> - Str = io_lib:print(Res), - dbg_ui_trace_win:eval_output([$<,Str,10], normal), - State. - - -%%==================================================================== -%% GUI auxiliary functions -%%==================================================================== - -menus() -> - [{'File', [{'Close', no}]}, - {'Edit', [{'Go To Line...', no}, - {'Search...', no}]}, - {'Process', [{'Step', 0}, - {'Next', 0}, - {'Continue', 0}, - {'Finish', 0}, - {'Skip', no}, - {'Time Out', no}, - {'Stop', no}, - separator, - {'Kill', no}, - separator, - {'Messages', 0}, - {'Back Trace', no}, - separator, - {'Where', 0}, - {'Up', no}, - {'Down', no}]}, - {'Break', [{'Line Break...', 5}, - {'Conditional Break...', no}, - {'Function Break...', no}, - separator, - {'Enable All', no}, - {'Disable All', no}, - {'Delete All', 0}, - separator]}, - {'Options', [{'Trace Window', no, cascade, - [{'Button Area', no, check}, - {'Evaluator Area', no, check}, - {'Bindings Area', no, check}, - {'Trace Area', no, check}]}, - {'Stack Trace', no, cascade, - [{'Stack On, Tail', no, radio}, - {'Stack On, No Tail', no, radio}, - {'Stack Off', no, radio}]}, - {'Back Trace Size...', no}]}, - {'Help', [{'Debugger', no}]}]. - -%% enable(Status) -> [MenuItem] -%% Status = init % when first message from Meta has arrived -%% | idle | break | exit | wait_break | wait_running | running -enable(init) -> []; -enable(idle) -> ['Stop','Kill']; -enable(break) -> ['Step','Next','Continue','Finish','Skip', - 'Kill','Messages']; -enable(exit) -> []; -enable(wait_break) -> ['Continue','Time Out','Kill']; -enable(wait_running) -> ['Stop','Kill']; -enable(running) -> ['Stop','Kill']. - -all_buttons() -> - ['Step','Next','Continue','Finish','Skip','Time Out','Stop', - 'Kill','Messages','Back Trace','Where','Up','Down']. - -shortcut(s) -> {if_enabled, 'Step'}; -shortcut(n) -> {if_enabled, 'Next'}; -shortcut(c) -> {if_enabled, 'Continue'}; -shortcut(f) -> {if_enabled, 'Finish'}; -shortcut(m) -> {if_enabled, 'Messages'}; -shortcut(w) -> {if_enabled, 'Where'}; - -shortcut(b) -> {always, 'Line Break...'}; -shortcut(d) -> {always, 'Delete All'}; - -shortcut(_) -> false. - -map('Stack On, Tail') -> all; % Stack trace -map('Stack On, No Tail') -> no_tail; -map('Stack Off') -> false; -map(all) -> 'Stack On, Tail'; -map(true) -> 'Stack On, Tail'; -map(no_tail) -> 'Stack On, No Tail'; -map(false) -> 'Stack Off'. - - -%% gui_show_module(Win, Mod, Line, Cm, Pid, How) -> Win -%% gui_show_module(Win, {Mod,Line}, _Reason, Cm, Pid, How) -> Win -%% How = where | break -%% Show contents of a module in code area -gui_show_module(Win, {Mod,Line}, _Reason, Cm, Pid, How) -> - gui_show_module(Win, Mod, Line, Cm, Pid, How); -gui_show_module(Win, Mod, Line, Mod, _Pid, How) -> - dbg_ui_trace_win:mark_line(Win, Line, How); -gui_show_module(Win, Mod, Line, _Cm, Pid, How) -> - Win2 = case dbg_ui_trace_win:is_shown(Win, Mod) of - {true, Win3} -> Win3; - false -> gui_load_module(Win, Mod, Pid) - end, - dbg_ui_trace_win:mark_line(Win2, Line, How). - -gui_load_module(Win, Mod, Pid) -> - dbg_ui_trace_win:display({text, "Loading module..."}), - Contents = int:contents(Mod, Pid), - Win2 = dbg_ui_trace_win:show_code(Win, Mod, Contents), - dbg_ui_trace_win:display({text, ""}), - Win2. - -gui_update_bindings(Meta) -> - Bs = int:meta(Meta, bindings, nostack), - dbg_ui_trace_win:update_bindings(Bs). - -gui_enable_functions(Status) -> - Enable = enable(Status), - Disable = all_buttons() -- Enable, - dbg_ui_trace_win:enable(Disable, false), - dbg_ui_trace_win:enable(Enable, true). - -gui_enable_updown(Flag, Stack) -> - {Enable, Disable} = - if - Flag==false -> {[], ['Up', 'Down']}; - true -> - case Stack of - {1,1} -> {[], ['Up', 'Down']}; - {2,2} -> {[], ['Up', 'Down']}; - {Max,Max} -> {['Up'], ['Down']}; - {2,_Max} -> {['Down'], ['Up']}; - {_Cur,_Max} -> {['Up', 'Down'], []} - end - end, - dbg_ui_trace_win:enable(Enable, true), - dbg_ui_trace_win:enable(Disable, false), - if - Enable==[] -> dbg_ui_trace_win:enable(['Where'], false); - true -> dbg_ui_trace_win:enable(['Where'], true) - end. - -gui_enable_btrace(Trace, StackTrace) -> - Bool = if - Trace==false -> false; - StackTrace==false -> false; - true -> true - end, - dbg_ui_trace_win:enable(['Back Trace'], Bool). diff --git a/lib/debugger/src/dbg_ui_trace_win.erl b/lib/debugger/src/dbg_ui_trace_win.erl deleted file mode 100644 index beb3fbd71e..0000000000 --- a/lib/debugger/src/dbg_ui_trace_win.erl +++ /dev/null @@ -1,1595 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_trace_win). --compile([{nowarn_deprecated_function,{gs,button,2}}, - {nowarn_deprecated_function,{gs,button,3}}, - {nowarn_deprecated_function,{gs,checkbutton,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,4}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,editor,2}}, - {nowarn_deprecated_function,{gs,editor,3}}, - {nowarn_deprecated_function,{gs,entry,2}}, - {nowarn_deprecated_function,{gs,entry,3}}, - {nowarn_deprecated_function,{gs,frame,3}}, - {nowarn_deprecated_function,{gs,grid,3}}, - {nowarn_deprecated_function,{gs,gridline,2}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,label,3}}, - {nowarn_deprecated_function,{gs,menubar,2}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,window,2}}, - {nowarn_deprecated_function,{gs,window,3}}]). - -%% External exports --export([init/0]). --export([create_win/4, get_window/1, - configure/2, - enable/2, is_enabled/1, select/2, - add_break/3, update_break/2, delete_break/2, - clear_breaks/1, clear_breaks/2, - display/1, % Help messages - is_shown/2, % Code area - show_code/3, show_no_code/1, remove_code/2, - mark_line/3, unmark_line/1, - select_line/2, selected_line/1, - eval_output/2, % Evaluator area - update_bindings/1, % Bindings area - trace_output/1, % Trace area - handle_event/2 - ]). --export([helpwin/4, % Help windows - helpwin/5]). - --record(breakInfo, {point, status, break}). --record(winInfo, {window, % gsobj() - size, % {W, H} - flags, % {F,F,F,F} F = open|close - - marked_line=0, % integer() Current line - selected_line=0, % integer() Selected line - - breaks=[], % [#breakInfo{}] Known breakpoints - - editor, % {Mod, Editor} Visible code editor - editors=[] % [{Mod,Editor}] Code editors - }). - - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% init() -> GS -%% GS = term() -%%-------------------------------------------------------------------- -init() -> - dbg_ui_win:init(). - -%%-------------------------------------------------------------------- -%% create_win(GS, Title, TraceWin, Menus) -> #winInfo{} -%% GS = gsobj() -%% Title = string() -%% TraceWin = [WinArea] -%% WinArea = 'Button|Evaluator|Bindings|Trace Area' -%% Menus = [menu()] See dbg_ui_win.erl -%%-------------------------------------------------------------------- -create_win(GS, Title, TraceWin, Menus) -> - Bu = flip(lists:member('Button Area', TraceWin)), - Ev = flip(lists:member('Evaluator Area', TraceWin)), - Bi = flip(lists:member('Bindings Area', TraceWin)), - Tr = flip(lists:member('Trace Area', TraceWin)), - - Win = gs:window(trace_window, GS, [{title, Title}, - {width, 550}, - {configure,true}, {destroy,true}, - {keypress,true}, {motion,true}]), - - MenuBar = gs:menubar(Win, []), - dbg_ui_win:create_menus(MenuBar, Menus), - dbg_ui_winman:windows_menu(MenuBar), - - FrameOpts = [{anchor,nw}, {relief,raised}, {bw,2}, {keypress,true}], - Editor = code_area(2, 25, FrameOpts, Win), - button_area(Bu, 2, 235, FrameOpts, Win), - eval_area({Ev,Bi}, 2, 265, FrameOpts, Win), - bind_area({Ev,Bi}, 300, 265, FrameOpts, Win), - trace_area(Tr, 2, 475, FrameOpts, Win), - - Flags = {Bu, Ev, Bi, Tr}, - resizebar(rb1(Flags), 'RB1', 2, 225, 710, 10, Win), - resizebar(rb2(Flags), 'RB2', 2, 465, 710, 10, Win), - resizebar(rb3(Flags), 'RB3', 290, 265, 10, 200, Win), - config_v(), - config_h(), - - gs:config(Win,{height, - 25 + - gs:read('CodeArea', height) + - gs:read('RB1', height) + - gs:read('ButtonArea', height) + - erlang:max(gs:read('EvalArea', height), - gs:read('BindArea', height)) + - gs:read('RB2', height) + - gs:read('TraceArea', height)}), - - gs:config(Win, {map, true}), - #winInfo{window=Win, size={gs:read(Win,width), gs:read(Win,height)}, - flags=Flags, - editor={'$top', Editor}, editors=[{'$top', Editor}]}. - -flip(true) -> open; -flip(false) -> close. - -%%-------------------------------------------------------------------- -%% get_window(WinInfo) -> Window -%% WinInfo = #winInfo{} -%% Window = gsobj() -%%-------------------------------------------------------------------- -get_window(WinInfo) -> - WinInfo#winInfo.window. - -%%-------------------------------------------------------------------- -%% configure(WinInfo, TraceWin) -> WinInfo -%% WinInfo = #winInfo{} -%% TraceWin = [WinArea] -%% WinArea = 'Button|Evaluator|Bindings|Trace Area' -%% Window areas should be opened or closed. -%%-------------------------------------------------------------------- -configure(WinInfo, TraceWin) -> - {Bu1, Ev1, Bi1, Tr1} = OldFlags = WinInfo#winInfo.flags, - Bu2 = flip(lists:member('Button Area', TraceWin)), - Ev2 = flip(lists:member('Evaluator Area', TraceWin)), - Bi2 = flip(lists:member('Bindings Area', TraceWin)), - Tr2 = flip(lists:member('Trace Area', TraceWin)), - NewFlags = {Bu2, Ev2, Bi2, Tr2}, - - Win = WinInfo#winInfo.window, - W = gs:read(Win, width), - H = gs:read(Win, height), - - H2 = if - Bu1 =:= close, Bu2 =:= open -> - resize_button_area(open, width, W-4), - gs:config('ButtonArea', {height, 30}), - H+30; - Bu1 =:= open, Bu2 =:= close -> - gs:config('ButtonArea', [{width, 0}, {height, 0}]), - H-30; - true -> H - end, - H3 = if - Ev1 =:= close, Ev2 =:= open, Bi1 =:= open -> - Wnew1 = round((W-10-4)/2), % W = window/2 - rb - pads - Hbi1 = gs:read('BindArea', height), % H = bind area h - resize_eval_area(open, width, Wnew1), - resize_eval_area(open, height, Hbi1), - gs:config('RB3', {width, 10}), - gs:config('RB3', {height, Hbi1}), - resize_bind_area(open, width, - Wnew1-gs:read('BindArea', width)), - H2; - Ev1 =:= close, Ev2 =:= open, Bi1 =:= close -> - resize_eval_area(open, width, W-4), - resize_eval_area(open, height, 200), - H2+200; - Ev1 =:= open, Ev2 =:= close, Bi1 =:= open -> - gs:config('EvalArea', [{width,0}, {height,0}]), - gs:config('RB3', [{width, 0}, {height, 0}]), - Wnew2 = W-4, - resize_bind_area(open, width, - Wnew2-gs:read('BindArea', width)), - H2; - Ev1 =:= open, Ev2 =:= close, Bi1 =:= close -> - Hs1 = gs:read('EvalArea', height), - gs:config('EvalArea', [{width, 0}, {height, 0}]), - H2-Hs1; - true -> H2 - end, - H4 = if - Bi1 =:= close, Bi2 =:= open, Ev2 =:= open -> - Wnew3 = round((W-10-4)/2), % W = window/2 - rb - pads - Hs2 = gs:read('EvalArea', height), % H = eval area h - resize_bind_area(open, width, Wnew3), - resize_bind_area(open, height, Hs2), - gs:config('RB3', [{width,10},{height,Hs2}]), - resize_eval_area(open, width, - Wnew3-gs:read('EvalArea', width)), - H3; - Bi1 =:= close, Bi2 =:= open, Ev2 =:= close -> - resize_bind_area(open, width, W-4), - resize_bind_area(open, height, 200), - H3+200; - Bi1 =:= open, Bi2 =:= close, Ev2 =:= open -> - gs:config('BindArea', [{width, 0}, {height, 0}]), - gs:config('RB3', [{width, 0}, {height, 0}]), - Wnew4 = W-4, - resize_eval_area(open, width, - Wnew4-gs:read('EvalArea', width)), - H3; - Bi1 =:= open, Bi2 =:= close, Ev2 =:= close -> - Hbi2 = gs:read('BindArea', height), - gs:config('BindArea', [{width, 0}, {height, 0}]), - H3-Hbi2; - true -> H3 - end, - H5 = if - Tr1 =:= close, Tr2 =:= open -> - resize_trace_area(open, width, W-4), - resize_trace_area(open, height, 200), - H4+200; - Tr1 =:= open, Tr2 =:= close -> - Hf = gs:read('TraceArea', height), - gs:config('TraceArea', [{width, 0}, {height, 0}]), - H4-Hf; - true -> H4 - end, - gs:config(Win, {height, H5}), - - RB1old = rb1(OldFlags), RB1new = rb1(NewFlags), - if - RB1old =:= close, RB1new =:= open -> - gs:config('RB1', [{width, W-4}, {height, 10}]), - gs:config(Win, {height, gs:read(Win, height)+10}); - RB1old =:= open, RB1new =:= close -> - gs:config('RB1', [{width, 0}, {height, 0}, lower]), - gs:config(Win, {height, gs:read(Win, height)-10}); - true -> ignore - end, - - RB2old = rb2(OldFlags), RB2new = rb2(NewFlags), - if - RB2old =:= close, RB2new =:= open -> - gs:config('RB2', [{width, W-4}, {height, 10}]), - gs:config(Win, {height,gs:read(Win, height)+10}); - RB2old =:= open, RB2new =:= close -> - gs:config('RB2', [{width, 0}, {height, 0}, lower]), - gs:config(Win, {height, gs:read(Win, height)-10}); - true -> ignore - end, - config_v(), - config_h(), - - flush_configure(), - - WinInfo#winInfo{size={gs:read(Win, width), gs:read(Win, height)}, - flags=NewFlags}. - -flush_configure() -> - receive - {gs, _Id, configure, _Data, _Arg} -> - flush_configure() - after 100 -> - true - end. - -%%-------------------------------------------------------------------- -%% enable([MenuItem], Bool) -%% is_enabled(MenuItem) -> Bool -%% MenuItem = atom() -%% Bool = boolean() -%%-------------------------------------------------------------------- -enable(MenuItems, Bool) -> - lists:foreach(fun(MenuItem) -> - gs:config(MenuItem, {enable, Bool}), - case is_button(MenuItem) of - {true, Button} -> - gs:config(Button, {enable, Bool}); - false -> ignore - end - end, - MenuItems). - -is_enabled(MenuItem) -> - gs:read(MenuItem, enable). - -%%-------------------------------------------------------------------- -%% select(MenuItem, Bool) -%% MenuItem = atom() -%% Bool = boolean() -%%-------------------------------------------------------------------- -select(MenuItem, Bool) -> - dbg_ui_win:select(MenuItem, Bool). - -%%-------------------------------------------------------------------- -%% add_break(WinInfo, Name, {Point, Options}) -> WinInfo -%% WinInfo = #winInfo{} -%% Name = atom() Menu name -%% Point = {Mod, Line} -%% Options = [Status, Action, Mods, Cond] -%% Status = active | inactive -%% Action = enable | disable | delete -%% Mods = null (not used) -%% Cond = null | {Mod, Func} -%%-------------------------------------------------------------------- -add_break(WinInfo, Menu, {{Mod,Line},[Status|_Options]}=Break) -> - case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of - {Mod, Editor} -> - add_break_to_code(Editor, Line, Status); - false -> ignore - end, - add_break_to_menu(WinInfo, Menu, Break). - -add_break_to_code(Editor, Line, Status) -> - Color = if Status =:= active -> red; Status =:= inactive -> blue end, - config_editor(Editor, [{overwrite,{{Line,0},"-@- "}}, - {fg,{{{Line,0},{Line,lineend}}, Color}}]). - -add_break_to_menu(WinInfo, Menu, {Point, [Status|_Options]=Options}) -> - Break = dbg_ui_win:add_break(Menu, Point), - dbg_ui_win:update_break(Break, Options), - BreakInfo = #breakInfo{point=Point, status=Status, break=Break}, - WinInfo#winInfo{breaks=[BreakInfo|WinInfo#winInfo.breaks]}. - -%%-------------------------------------------------------------------- -%% update_break(WinInfo, {Point, Options}) -> WinInfo -%% WinInfo = #winInfo{} -%% Point = {Mod, Line} -%% Options = [Status, Action, Mods, Cond] -%% Status = active | inactive -%% Action = enable | disable | delete -%% Mods = null (not used) -%% Cond = null | {Mod, Func} -%%-------------------------------------------------------------------- -update_break(WinInfo, {{Mod,Line},[Status|_Options]}=Break) -> - case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of - {Mod, Editor} -> - add_break_to_code(Editor, Line, Status); - false -> ignore - end, - update_break_in_menu(WinInfo, Break). - -update_break_in_menu(WinInfo, {Point, [Status|_Options]=Options}) -> - {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point, - WinInfo#winInfo.breaks), - dbg_ui_win:update_break(BreakInfo#breakInfo.break, Options), - BreakInfo2 = BreakInfo#breakInfo{status=Status}, - WinInfo#winInfo{breaks=lists:keyreplace(Point, #breakInfo.point, - WinInfo#winInfo.breaks, - BreakInfo2)}. - -%%-------------------------------------------------------------------- -%% delete_break(WinInfo, Point) -> WinInfo -%% WinInfo = #winInfo{} -%% Point = {Mod, Line} -%%-------------------------------------------------------------------- -delete_break(WinInfo, {Mod,Line}=Point) -> - case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of - {Mod, Editor} -> delete_break_from_code(Editor, Line); - false -> ignore - end, - delete_break_from_menu(WinInfo, Point). - -delete_break_from_code(Editor, Line) -> - Prefix = string:substr(integer_to_list(Line)++": ", 1, 5), - config_editor(Editor, [{overwrite,{{Line,0},Prefix}}, - {fg,{{{Line,0},{Line,lineend}}, black}}]). - -delete_break_from_menu(WinInfo, Point) -> - {value, BreakInfo} = lists:keysearch(Point, #breakInfo.point, - WinInfo#winInfo.breaks), - dbg_ui_win:delete_break(BreakInfo#breakInfo.break), - WinInfo#winInfo{breaks=lists:keydelete(Point, #breakInfo.point, - WinInfo#winInfo.breaks)}. - -%%-------------------------------------------------------------------- -%% clear_breaks(WinInfo) -> WinInfo -%% clear_breaks(WinInfo, Mod) -> WinInfo -%% WinInfo = #winInfo{} -%%-------------------------------------------------------------------- -clear_breaks(WinInfo) -> - clear_breaks(WinInfo, all). -clear_breaks(WinInfo, Mod) -> - Remove = if - Mod =:= all -> WinInfo#winInfo.breaks; - true -> - lists:filter(fun(#breakInfo{point={Mod2,_L}}) -> - if - Mod2 =:= Mod -> true; - true -> false - end - end, - WinInfo#winInfo.breaks) - end, - lists:foreach(fun(#breakInfo{point=Point}) -> - delete_break(WinInfo, Point) - end, - Remove), - Remain = WinInfo#winInfo.breaks -- Remove, - WinInfo#winInfo{breaks=Remain}. - -%%-------------------------------------------------------------------- -%% display(Arg) -%% Arg = idle | {Status,Mod,Line} | {running,Mod} -%% | {exit,Where,Reason} | {text,Text} -%% Status = break | wait | Level -%% Level = int() -%% Mod = atom() -%% Line = integer() -%% Where = {Mod,Line} | null -%% Reason = term() -%% Text = string() -%%-------------------------------------------------------------------- -display(Arg) -> - Str = case Arg of - idle -> "State: uninterpreted"; - {exit, {Mod,Line}, Reason} -> - gs:config(trace_window, raise), - io_lib:format("State: EXITED [~w.erl/~w], Reason:~w", - [Mod, Line, Reason]); - {exit, null, Reason} -> - gs:config(trace_window, raise), - io_lib:format("State: EXITED [uninterpreted], " - "Reason:~w", [Reason]); - {Level, null, _Line} when is_integer(Level) -> - io_lib:format("*** Call level #~w " - "(in non-interpreted code)", - [Level]); - {Level, Mod, Line} when is_integer(Level) -> - io_lib:format("*** Call level #~w [~w.erl/~w]", - [Level, Mod, Line]); - {Status, Mod, Line} -> - What = case Status of - wait -> 'receive'; - _ -> Status - end, - io_lib:format("State: ~w [~w.erl/~w]", - [What, Mod, Line]); - {running, Mod} -> - io_lib:format("State: running [~w.erl]", [Mod]); - {text, Text} -> Text - end, - gs:config(info_window, {label,{text,lists:flatten(Str)}}). - -%%-------------------------------------------------------------------- -%% is_shown(WinInfo, Mod) -> {true, WinInfo} | false -%% show_code(WinInfo, Mod, Contents) -> WinInfo -%% show_no_code(WinInfo) -> WinInfo -%% remove_code(WinInfo, Mod) -> WinInfo -%% WinInfo = #winInfo{} -%% Mod = atom() -%% Contents = string() -%% Note: remove_code/2 should not be used for currently shown module. -%%-------------------------------------------------------------------- -is_shown(WinInfo, Mod) -> - case lists:keyfind(Mod, 1, WinInfo#winInfo.editors) of - {Mod, Editor} -> - gs:config(Editor, raise), - {true, WinInfo#winInfo{editor={Mod, Editor}}}; - false -> false - end. - -show_code(WinInfo, Mod, Contents) -> - Editors = WinInfo#winInfo.editors, - {Flag, Editor} = case lists:keyfind(Mod, 1, Editors) of - {Mod, Ed} -> {existing, Ed}; - false -> {new, code_editor()} - end, - %% Insert code and update breakpoints, if any - config_editor(Editor, [raise, clear]), - show_code(Editor, Contents), - lists:foreach(fun(BreakInfo) -> - case BreakInfo#breakInfo.point of - {Mod2, Line} when Mod2 =:= Mod -> - Status = BreakInfo#breakInfo.status, - add_break_to_code(Editor, Line,Status); - _Point -> ignore - end - end, - WinInfo#winInfo.breaks), - case Flag of - existing -> - WinInfo#winInfo{editor={Mod, Editor}}; - new -> - WinInfo#winInfo{editor={Mod, Editor}, - editors=[{Mod, Editor} | Editors]} - end. - -show_code(Editor, Text) when length(Text) > 1500 -> - %% Add some text at a time so that other processes may get scheduled - Str = string:sub_string(Text, 1, 1500), - config_editor(Editor, {insert,{'end', Str}}), - show_code(Editor, string:sub_string(Text, 1501)); -show_code(Editor, Text) -> - config_editor(Editor, {insert,{'end',Text}}). - -show_no_code(WinInfo) -> - {'$top', Editor} = lists:keyfind('$top', 1, WinInfo#winInfo.editors), - gs:config(Editor, raise), - WinInfo#winInfo{editor={'$top', Editor}}. - -remove_code(WinInfo, Mod) -> - Editors = WinInfo#winInfo.editors, - case lists:keyfind(Mod, 1, Editors) of - {Mod, Editor} -> - gs:destroy(Editor), - WinInfo#winInfo{editors=lists:keydelete(Mod, 1, Editors)}; - false -> - WinInfo - end. - -%%-------------------------------------------------------------------- -%% mark_line(WinInfo, Line, How) -> WinInfo -%% WinInfo = #winInfo{} -%% Line = integer() -%% How = break | where -%% Mark the code line where the process is executing. -%%-------------------------------------------------------------------- -mark_line(WinInfo, Line, How) -> - {_Mod, Editor} = WinInfo#winInfo.editor, - mark_line2(Editor, WinInfo#winInfo.marked_line, false), - mark_line2(Editor, Line, How), - if - Line =/= 0 -> config_editor(Editor, {vscrollpos, Line-5}); - true -> ignore - end, - WinInfo#winInfo{marked_line=Line}. - -unmark_line(WinInfo) -> - mark_line(WinInfo, 0, false). - -mark_line2(Editor, Line, How) -> - Prefix = case How of - break -> "-->"; - where -> ">>>"; - false -> " " - end, - Font = if - How =:= false -> dbg_ui_win:font(normal); - true -> dbg_ui_win:font(bold) - end, - config_editor(Editor, [{overwrite, {{Line,5}, Prefix}}, - {font_style, - {{{Line,0},{Line,lineend}}, Font}}]). - -%%-------------------------------------------------------------------- -%% select_line(WinInfo, Line) -> WinInfo -%% selected_line(WinInfo) -> undefined | Line -%% WinInfo = #winInfo{} -%% Line = integer() -%% Select/unselect a line (unselect if Line=0). -%%-------------------------------------------------------------------- -select_line(WinInfo, Line) -> - {_Mod, Editor} = WinInfo#winInfo.editor, - - %% Since 'Line' may be specified by the user in the 'Go To Line' - %% help window, it must be checked that it is correct - Size = gs:read(Editor, size), - if - Line =:= 0 -> - select_line(Editor, WinInfo#winInfo.selected_line, false), - WinInfo#winInfo{selected_line=0}; - Line < Size -> - select_line(Editor, Line, true), - config_editor(Editor, {vscrollpos, Line-5}), - WinInfo#winInfo{selected_line=Line}; - true -> - WinInfo - end. - -select_line(Editor, Line, true) -> - config_editor(Editor, {selection, {{Line,0}, {Line,lineend}}}); -select_line(Editor, _Line, false) -> - config_editor(Editor, {selection, {{1,0}, {1,0}}}). - -selected_line(WinInfo) -> - case WinInfo#winInfo.selected_line of - 0 -> undefined; - Line -> Line - end. - -%%-------------------------------------------------------------------- -%% eval_output(Str, Face) -%% Str = string() -%% Face = normal | bold -%%-------------------------------------------------------------------- -eval_output(Text, Face) -> - Y1 = gs:read('EvalEditor', size), - config_editor('EvalEditor', {insert,{'end',Text}}), - Y2 = gs:read('EvalEditor', size), - - Font = dbg_ui_win:font(Face), - config_editor('EvalEditor', - [{font_style, {{{Y1,0},{Y2,lineend}}, Font}}, - {vscrollpos,Y2}]). - -%%-------------------------------------------------------------------- -%% update_bindings(Bs) -%% Bs = [{Var,Val}] -%%-------------------------------------------------------------------- -update_bindings(Bs) -> - gs:config('BindGrid', {rows, {1,length(Bs)+1}}), - Font = dbg_ui_win:font(normal), - Last = - lists:foldl(fun({Var, Val}, Row) -> - Opts = [{text, {1,atom_to_list(Var)}}, - {text, {2,io_lib:format("~P", - [Val, 4])}}, - {doubleclick, true}, - {data, {binding,{Var,Val}}}], - case gs:read('BindGrid',{obj_at_row,Row}) of - undefined -> - gs:gridline('BindGrid', - [{row, Row}, - {height, 14}, - {font, Font} | Opts]); - GridLine -> - gs:config(GridLine, Opts) - end, - Row+1 - end, - 2, - Bs), - delete_gridlines(Last). - -delete_gridlines(Row) -> - case gs:read('BindGrid', {obj_at_row, Row}) of - undefined -> true; - GridLine -> - gs:destroy(GridLine), - delete_gridlines(Row+1) - end. - -%%-------------------------------------------------------------------- -%% trace_output(Str) -%% Str = string() -%%-------------------------------------------------------------------- -trace_output(Str) -> - Font = dbg_ui_win:font(normal), - config_editor('TraceEditor', - [{insert, {'end',Str}}, - {fg, {{{1,0},'end'},black}}, - {font_style, {{{1,0},'end'},Font}}]), - Max = gs:read('TraceEditor', size), - config_editor('TraceEditor', {vscrollpos, Max}). - -%%-------------------------------------------------------------------- -%% handle_event(GSEvent, WinInfo) -> Command -%% GSEvent = {gs, Id, Event, Data, Arg} -%% WinInfo = #winInfo{} -%% Command = ignore -%% | {win, WinInfo} -%% | stopped -%% | {coords, {X,Y}} -%% -%% | {shortcut, Key} -%% | MenuItem | {Menu, [MenuItem]} -%% MenuItem = Menu = atom() -%% | {break, Point, What} -%% What = add | delete | {status,Status} |{trigger,Trigger} -%% | {module, Mod, view} -%% -%% | {user_command, Cmd} -%% -%% | {edit, {Var, Val}} -%%-------------------------------------------------------------------- -%% Window events -handle_event({gs, _Id, configure, _Data, [W, H|_]}, WinInfo) -> - case WinInfo#winInfo.size of - {W, H} -> ignore; - _Size -> - configure(WinInfo, W, H), - {win, WinInfo#winInfo{size={W, H}}} - end; -handle_event({gs, _Id, destroy, _Data, _Arg}, _WinInfo) -> - stopped; -handle_event({gs, _Id, motion, _Data, [X,Y]}, WinInfo) -> - {LastX, LastY} = dbg_ui_win:motion(X, Y), - Win = WinInfo#winInfo.window, - {coords, {gs:read(Win, x)+LastX-5, gs:read(Win, y)+LastY-5}}; -handle_event({gs, RB, buttonpress, resizebar, _Arg}, WinInfo) -> - resize(WinInfo, RB), % Resize window contents - ignore; - -%% Menus, buttons and keyboard shortcuts -handle_event({gs, _Id, keypress, _Data, [Key,_,_,1]}, _WinInfo) -> - {shortcut, Key}; -handle_event({gs, _Id, click, {dbg_ui_winman, Win}, _Arg}, _WinInfo) -> - dbg_ui_winman:raise(Win), - ignore; -handle_event({gs, _Id, click, {menuitem, Name}, _Arg}, _WinInfo) -> - Name; -handle_event({gs, _Id, click, {menu, Menu}, _Arg}, _WinInfo) -> - Names = dbg_ui_win:selected(Menu), - {Menu, Names}; -handle_event({gs, _Id, click, {break, Point, What}, _Arg}, _WinInfo) -> - {break, Point, What}; -handle_event({gs, _Id, click, {module, Mod, view}, _Arg}, _WinInfo) -> - {module, Mod, view}; - -%% Code area -handle_event({gs, Editor, buttonpress, code_editor, _Arg}, WinInfo) -> - {Row, _Col} = gs:read(Editor, insertpos), - Again = receive - {gs, Editor, buttonpress, code_editor, _} -> - gs:read(Editor, insertpos) - after 500 -> - false - end, - case Again of - {Row, _} -> - {Mod, _Editor} = WinInfo#winInfo.editor, - Point = {Mod, Row}, - case lists:keymember(Point, #breakInfo.point, - WinInfo#winInfo.breaks) of - false -> {break, Point, add}; - true -> {break, Point, delete} - end; - {Row2, _} -> - select_line(Editor, Row2, true), - {win, WinInfo#winInfo{selected_line=Row2}}; - false -> - select_line(Editor, Row, true), - {win, WinInfo#winInfo{selected_line=Row}} - end; - -%% Button area -handle_event({gs, _Id, click, {button, Name}, _Arg}, _WinInfo) -> - Name; - -%% Evaluator area -handle_event({gs, 'EvalEntry', keypress, _Data, ['Return'|_]}, _WI) -> - Command = case gs:read('EvalEntry', text) of - [10] -> - eval_output("\n", normal), - ignore; - Cmd -> - eval_output([$>, Cmd, 10], normal), - {user_command, Cmd} - end, - gs:config('EvalEntry', [{text,""}, {focus,false}]), - Command; - -%% Bindings area -handle_event({gs, _Id, click, {binding, {Var, Val}}, _Arg}, _WinInfo) -> - Str = io_lib:format("< ~p = ~p~n", [Var, Val]), - eval_output(Str, bold), - ignore; -handle_event({gs, _Id, doubleclick, {binding, B}, _Arg}, _WinInfo) -> - {edit, B}; - -handle_event(_GSEvent, _WinInfo) -> - ignore. - - -%%==================================================================== -%% Internal functions -%%==================================================================== - -%%--Code Area--------------------------------------------------------- - -code_area(X, Y, FrameOpts, Win) -> - gs:frame('CodeArea', Win, - [{x,X}, {y,Y}, {width,546}, {height,400} | FrameOpts]), - gs:label(info_window, 'CodeArea', - [{label,{text,""}}, {font,dbg_ui_win:font(normal)}, - {x,5}, {y,10}, {width,406}, {height,15}, - {anchor,nw}, {align,w}]), - code_editor('CodeEditor', 536, 365). - -code_editor() -> - W = gs:read('CodeEditor', width), - H = gs:read('CodeEditor', height), - code_editor(null, W, H). - -code_editor(Name, W, H) -> - Editor = if - Name =:= null -> gs:editor('CodeArea', []); - true -> gs:editor(Name, 'CodeArea', []) - end, - gs:config(Editor, [{x,5}, {y,30}, {width,W}, {height,H}, - {keypress,false}, {buttonpress,true}, - {data,code_editor}]), - config_editor(Editor, [{vscroll,right}, {hscroll,bottom}]), - Font = dbg_ui_win:font(normal), - config_editor(Editor, [{wrap,none}, {fg,{{{1,0},'end'},black}}, - {font, Font}, - {font_style, {{{1,0},'end'},Font}}]), - Editor. - -resize_code_area(WinInfo, Key, Diff) -> - gs:config('CodeArea', {Key,gs:read('CodeArea', Key)+Diff}), - case Key of - width -> - gs:config(info_window, {Key,gs:read(info_window,Key)+Diff}); - height -> ignore - end, - - %% Resize all code editors - Value = gs:read('CodeEditor', Key)+Diff, - gs:config('CodeEditor', {Key,Value}), - Editors = WinInfo#winInfo.editors, - lists:foreach(fun({_Mod, Editor}) -> - gs:config(Editor, {Key,Value}) - end, - Editors). - -%%--Button Area------------------------------------------------------- - -buttons() -> - [{'Step','StepButton'}, {'Next','NextButton'}, - {'Continue','ContinueButton'}, {'Finish','FinishButton'}, - {'Where','WhereButton'}, {'Up','UpButton'}, {'Down','DownButton'}]. - -is_button(Name) -> - case lists:keyfind(Name, 1, buttons()) of - {Name, Button} -> {true, Button}; - false -> false - end. - -button_area(Bu, X, Y, FrameOpts, Win) -> - {W,H} = case Bu of - open -> {546,30}; - close -> {0,0} - end, - gs:frame('ButtonArea', Win, - [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]), - Font = dbg_ui_win:font(normal), - lists:foldl(fun({Name, Button}, Xb) -> - gs:button(Button, 'ButtonArea', - [{label, {text,Name}}, {font,Font}, - {x, Xb}, {y, 1}, - {width, 77}, {height, 24}, - {data, {button,Name}}]), - Xb+78 - end, - 1, - buttons()). - -resize_button_area(close, width, _Diff) -> - ignore; -resize_button_area(open, width, Diff) -> - gs:config('ButtonArea', {width, gs:read('ButtonArea', width)+Diff}). - -%%--Evaluator Area---------------------------------------------------- - -eval_area({Ev,Bi}, X, Y, FrameOpts, Win) -> - {W,H} = if - Ev =:= open -> {289,200}; - true -> {0,0} - end, - Font = dbg_ui_win:font(normal), - gs:frame('EvalArea', Win, - [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]), - gs:label('EvalArea', - [{label,{text,"Evaluator:"}}, {font, Font}, - {x,5}, {y,35}, {width,80}, {height,25}, - {anchor,sw}, {align,center}]), - gs:entry('EvalEntry', 'EvalArea', - [{font, Font}, - {x,80}, {y,35}, {width,185}, {height,25}, - {anchor,sw}, {keypress,true}]), - gs:editor('EvalEditor', 'EvalArea', - [{x,5}, {y,35}, {width, 280}, {height, 160}, - {keypress,false}, - {vscroll,right}, {hscroll,bottom}, - {wrap,none}, {fg,{{{1,0},'end'},black}}, - {font, Font}, - {font_style,{{{1,0},'end'},Font}}]), - gs:config('EvalEditor', {enable, false}), - if - Ev =:= open, Bi =:= close -> resize_eval_area(Ev, width, 257); - true -> ignore - end. - -resize_eval_area(close, _Key, _Diff) -> - ignore; -resize_eval_area(open, Key, Diff) -> - New = gs:read('EvalArea', Key)+Diff, - gs:config('EvalArea', {Key,New}), - case Key of - width -> - gs:config('EvalEntry', {width,New-104}), - gs:config('EvalEditor', {width,New-9}); - height -> - gs:config('EvalEditor', {height,New-40}) - end. - -%%--Bindings Area----------------------------------------------------- - -bind_area({Ev,Bi}, X, Y, FrameOpts, Win) -> - {W,H} = if - Bi =:= open -> {249,200}; - true -> {0,0} - end, - gs:frame('BindArea', Win, - [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]), - - Font = dbg_ui_win:font(bold), - gs:grid('BindGrid', 'BindArea', - [{x,2}, {y,2}, {height,193}, {width,241}, - {fg,black}, {vscroll,right}, {hscroll,bottom}, - {font,Font}, - calc_columnwidths(241), {rows, {1,50}}]), - gs:gridline('BindGrid', - [{row,1}, {height,14}, {fg,blue}, - {text,{1,"Name"}}, {text,{2,"Value"}}, {font,Font}]), - gs:config('BindGrid', {rows,{1,1}}), - if - Bi =:= open, Ev =:= close -> resize_bind_area(Bi, width, 297); - true -> ignore - end. - -resize_bind_area(close, _Key, _Diff) -> - ignore; -resize_bind_area(open, Key, Diff) -> - New = gs:read('BindArea', Key)+Diff, - gs:config('BindArea', {Key,New}), - case Key of - width -> - gs:config('BindGrid', {width,New-8}), - Cols = calc_columnwidths(New-8), - gs:config('BindGrid', Cols); - height -> - gs:config('BindGrid', {height,New-7}) - end. - -calc_columnwidths(Width) -> - if Width =< 291 -> - {columnwidths,[90,198]}; - true -> - S = (Width)/(90+198), - {columnwidths,[round(90*S),round(198*S)]} - end. - -%%--Trace Area-------------------------------------------------------- - -trace_area(Tr, X, Y, FrameOpts, Win) -> - {W,H} = case Tr of - open -> {546,200}; - close -> {0,0} - end, - gs:frame('TraceArea', Win, - [{x,X}, {y,Y}, {width,W}, {height,H} | FrameOpts]), - Editor = gs:editor('TraceEditor', 'TraceArea', - [{x,5}, {y,5}, {width,536}, {height,190}, - {keypress,false}]), - Font = dbg_ui_win:font(normal), - config_editor(Editor, - [{vscroll,right}, {hscroll,bottom}, - {wrap,none},{fg,{{{1,0},'end'},black}}, - {font, Font}, - {font_style,{{{1,0},'end'},Font}}]). - -resize_trace_area(close, _Key, _Diff) -> - ignore; -resize_trace_area(open, Key, Diff) -> - New = gs:read('TraceArea', Key)+Diff, - gs:config('TraceArea', {Key,New}), - gs:config('TraceEditor', {Key,New-10}). - -%%--Editors----------------------------------------------------------- - -config_editor(Editor, Opts) -> - gs:config(Editor, {enable,true}), - gs:config(Editor, Opts), - gs:config(Editor, {enable,false}). - -%%--Resize Bars------------------------------------------------------- -%% The resize bars are used to resize the areas within the window. - -%%-------------------------------------------------------------------- -%% resizebar(Flag, Name, X, Y, W, H, Obj) -> resizebar() -%% Flag = open | close -%% Name = atom() -%% X = Y = integer() Coordinates relative to Obj -%% W = H = integer() Width and height -%% Obj = gsobj() -%% Creates a 'resize bar', a frame object over which the cursor will -%% be of the 'resize' type. -%%-------------------------------------------------------------------- -resizebar(Flag, Name, X, Y, W, H, Obj) -> - {W2,H2} = case Flag of - open -> {W,H}; - close -> {0,0} - end, - gs:create(frame, Name, Obj, [{x,X}, {y,Y}, {width,W2}, {height,H2}, - {bw,2}, - {cursor,resize}, - {buttonpress,true}, {buttonrelease,true}, - {data,resizebar}]). - -rb1({_Bu,Ev,Bi,Tr}) -> - if - Ev =:= close, Bi =:= close, Tr =:= close -> close; - true -> open - end. - -rb2({_Bu,Ev,Bi,Tr}) -> - if - Tr =:= open -> - if - Ev =:= close, Bi =:= close -> close; - true -> open - end; - true -> close - end. - -rb3({_Bu,Ev,Bi,_Tr}) -> - if - Ev =:= open, Bi =:= open -> open; - true -> close - end. - -%%--Configuration----------------------------------------------------- -%% Resize the window as well as its contents - -%%-------------------------------------------------------------------- -%% config_v() -%% Reconfigure the window vertically. -%%-------------------------------------------------------------------- -config_v() -> - Y1 = 25+gs:read('CodeArea', height), - gs:config('RB1', {y,Y1}), - - Y2 = Y1+gs:read('RB1', height), - gs:config('ButtonArea', {y,Y2}), - - Y3 = Y2+gs:read('ButtonArea', height), - gs:config('EvalArea', {y,Y3}), - gs:config('RB3', {y,Y3}), - gs:config('BindArea', {y,Y3}), - - Y4 = Y3 + erlang:max(gs:read('EvalArea', height), - gs:read('BindArea', height)), - gs:config('RB2', {y,Y4}), - - Y5 = Y4 + gs:read('RB2', height), - gs:config('TraceArea', {y,Y5}). - -%%-------------------------------------------------------------------- -%% config_h() -%% Reconfigure the window horizontally. -%%-------------------------------------------------------------------- -config_h() -> - X1 = 2+gs:read('EvalArea', width), - gs:config('RB3', {x,X1}), - - X2 = X1+gs:read('RB3', width), - gs:config('BindArea', {x,X2}). - -%%-------------------------------------------------------------------- -%% configure(WinInfo, W, H) -%% The window has been resized, now its contents must be resized too. -%%-------------------------------------------------------------------- -configure(WinInfo, NewW, NewH) -> - {Bu,Ev,Bi,Tr} = Flags = WinInfo#winInfo.flags, - - OldW = gs:read('CodeArea', width)+4, - OldH = 25+gs:read('CodeArea', height)+ - gs:read('RB1', height)+ - gs:read('ButtonArea', height)+ - erlang:max(gs:read('EvalArea', height), gs:read('BindArea', height))+ - gs:read('RB2', height)+ - gs:read('TraceArea', height), - - %% Adjust width unless it is unchanged or less than minimum width - if - OldW =/= NewW -> - {Dcode,Deval,Dbind} = configure_widths(OldW,NewW,Flags), - resize_code_area(WinInfo, width, Dcode), - case rb1(Flags) of - open -> - gs:config('RB1', {width,gs:read('RB1',width)+Dcode}); - close -> ignore - end, - resize_button_area(Bu, width, Dcode), - resize_eval_area(Ev, width, Deval), - resize_bind_area(Bi, width, Dbind), - case rb2(Flags) of - open -> - gs:config('RB2', {width,gs:read('RB2',width)+Dcode}); - close -> ignore - end, - resize_trace_area(Tr, width, Dcode), - config_h(); - true -> ignore - end, - - %% Adjust height unless it is unchanged or less than minimum height - if - OldH =/= NewH -> - {Dcode2,Deval2,Dtrace} = configure_heights(OldH,NewH,Flags), - resize_code_area(WinInfo, height, Dcode2), - resize_eval_area(Ev, height, Deval2), - case rb3(Flags) of - open -> - gs:config('RB3', - {height,gs:read('RB3',height)+Deval2}); - close -> ignore - end, - resize_bind_area(Bi, height, Deval2), - resize_trace_area(Tr, height, Dtrace), - config_v(); - true -> ignore - end. - -%% Compute how much the width of each frame must be increased or -%% decreased in order to adjust to the new window width. -configure_widths(OldW, NewW, Flags) -> - {_Bu,Ev,Bi,_Tr} = Flags, - - %% Difference between old and new width, considering min window width - Diff = abs(erlang:max(OldW,330)-erlang:max(NewW,330)), - - %% Check how much the frames can be resized in reality - Limits = if - %% Window larger - NewW > OldW -> - if - Ev =:= open, Bi =:= open -> {0,Diff,Diff}; - Ev =:= open -> {0,Diff,0}; - Bi =:= open -> {0,0,Diff}; - true -> {Diff,0,0} - end; - - %% Window smaller; get difference between min size - %% and current size - OldW>NewW -> - if - Ev =:= open, Bi =:= open -> - {0, - gs:read('EvalArea',width)-204, - gs:read('BindArea',width)-112}; - Ev =:= open -> {0,Diff,0}; - Bi =:= open -> {0,0,Diff}; - true -> {Diff,0,0} - end - end, - - case Limits of - - %% No Shell or Bind frame, larger window - {T,0,0} when NewW > OldW -> {T,0,0}; - - %% No Shell or Bind frame, smaller window - {T,0,0} when OldW > NewW -> {-T,0,0}; - - %% Window larger; divide Diff among the frames and return result - {_,Sf,B} when NewW > OldW -> - {_,Sf2,B2} = divide([{0,0},{0,Sf},{0,B}],Diff), - {Sf2+B2,Sf2,B2}; - - %% Window smaller; divide Diff among the frames and return - %% the inverted result (the frames should shrink) - {_,Sf,B} when OldW>NewW -> - {_,Sf2,B2} = divide([{0,0},{0,Sf},{0,B}],Diff), - {-(Sf2+B2),-Sf2,-B2} - end. - -%% Compute how much the height of each frame must be increased or -%% decreased in order to adjust to the new window height. -configure_heights(OldH, NewH, Flags) -> - {_Bu,Ev,Bi,Tr} = Flags, - - %% Difference between old and new height, considering min win height - MinH = min_height(Flags), - Diff = abs(erlang:max(OldH,MinH)-erlang:max(NewH,MinH)), - - %% Check how much the frames can be resized in reality - {T,Sf,Ff} = if - %% Window larger - NewH > OldH -> - {Diff, - if - Ev =:= close, Bi =:= close -> 0; - true -> Diff - end, - if - Tr =:= open -> Diff; - true -> 0 - end}; - - %% Window smaller; get difference between min size - %% and current size - OldH > NewH -> - {gs:read('CodeArea',height)-100, - if - Ev =:= close, Bi =:= close -> 0; - true -> - if - Ev =:= open -> - gs:read('EvalArea',height)-100; - Bi =:= open -> - gs:read('BindArea',height)-100 - end - end, - if - Tr =:= open -> gs:read('TraceArea',height)-100; - true -> 0 - end} - end, - - if - %% Window larger; divide Diff among the frames and return result - NewH>OldH -> divide([{0,T},{0,Sf},{0,Ff}],Diff); - - %% Window smaller; divide Diff among the frames and return - %% the inverted result (the frames should shrink) - OldH>NewH -> - {T2,Sf2,Ff2} = divide([{0,T},{0,Sf},{0,Ff}],Diff), - {-T2,-Sf2,-Ff2} - end. - -%% Compute minimum window height -min_height(Flags) -> - {Bu,S,Bi,F} = Flags, - H1 = 25 + 100 + 2, % Upper pad + Trace frame + lower pad - H2 = H1 + bu(Bu) + s_bi(S,Bi) + f(F), - H3 = case rb1(Flags) of - open -> H2+10; - close -> H2 - end, - H4 = case rb2(Flags) of - open -> H3+10; - close -> H3 - end, - H4. - -bu(close) -> 0; -bu(open) -> 30. - -s_bi(close,close) -> 0; -s_bi(_,_) -> 100. - -f(close) -> 0; -f(open) -> 100. - -%% Try to distribute Diff as evenly as possible between E1, E2 and E3. -divide([{T,T},{S,S},{F,F}], _Diff) -> - {T,S,F}; -divide(L, Diff) -> - [{T,Tmax},{S,Smax},{F,Fmax}] = L, - - %% Count how many elements in L can still be filled - Rem = remaining(L), - - %% Divide Diff by Rem - D = Diff div Rem, - - if - %% All of Diff has been distributed - D =:= 0 -> {T,S,F}; - true -> - %% For each element, try to add as much as possible of D - {NewT,Dt} = divide2(D,T,Tmax), - {NewS,Ds} = divide2(D,S,Smax), - {NewF,Df} = divide2(D,F,Fmax), - - %% Recur with a list of elements with new current values - %% and decreased Diff - divide([{NewT,Tmax},{NewS,Smax},{NewF,Fmax}], - (Diff rem Rem)+Dt+Ds+Df) - end. - -%% Count the number of 'non-filled' elements in L, ie where Curr<Max. -remaining([]) -> 0; -remaining([{Max,Max}|T]) -> remaining(T); -remaining([_H|T]) -> 1 + remaining(T). - -divide2(_Diff, Max, Max) -> {Max,0}; -divide2(Diff, Curr, Max) -> - New = Curr+Diff, - if - New>Max -> {Max,New-Max}; - true -> {New,0} - end. - -%%--Resizing using resize bars---------------------------------------- -%% Motions event will move the ResizeBar accordingly in Win, when -%% the mouse button is released, the window is reconfigured. - -resize(WinInfo, ResizeBar) -> - - %% Get window dimensions - W = gs:read(WinInfo#winInfo.window, width), - H = gs:read(WinInfo#winInfo.window, height), - - %% Call resize loop with min and max for the resize bars derived - %% from the window dimensions - resizeloop(WinInfo, ResizeBar, null, - rblimits('RB1',W,H), - rblimits('RB2',W,H), - rblimits('RB3',W,H)). - -resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3}) -> - receive - {gs,_,motion,_,[_,Y]} when RB =:= 'RB1', Y > Min1, Y < Max1 -> - gs:config('RB1', {y,Y}), - resizeloop(WI, RB, Y, {Min1,Max1}, {Min2,Max2}, {Min3,Max3}); - {gs,_,motion,_,_} when RB =:= 'RB1' -> - resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3}); - - {gs,_,motion,_,[_,Y]} when RB =:= 'RB2', Y > Min2, Y < Max2 -> - gs:config('RB2', {y,Y}), - resizeloop(WI, RB, Y, {Min1,Max1}, {Min2,Max2}, {Min3,Max3}); - {gs,_,motion,_,_} when RB =:= 'RB2' -> - resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3}); - - {gs,_,motion,_,[X,_]} when RB =:= 'RB3', X > Min3, X < Max3 -> - gs:config('RB3', {x,X}), - resizeloop(WI, RB, X, {Min1,Max1}, {Min2,Max2}, {Min3,Max3}); - {gs,_,motion,_,_} when RB =:= 'RB3' -> - resizeloop(WI, RB, Prev, {Min1,Max1}, {Min2,Max2}, {Min3,Max3}); - - {gs,_,buttonrelease,_,_} -> - resize_win(WI, RB, Prev) - end. - -resize_win(_WinInfo, _RB, null) -> ignore; -resize_win(WinInfo, 'RB1', Y) -> - {_Bu,S,Bi,F} = Flags = WinInfo#winInfo.flags, - H = gs:read('CodeArea', height), - Diff = H-(Y-25), - - %% Resize Code, Evaluator and Binding areas - resize_code_area(WinInfo, height, -Diff), - if - S =:= close, Bi =:= close, F =:= open -> - resize_trace_area(open, height, Diff); - true -> - resize_eval_area(S, height, Diff), - resize_bind_area(Bi, height, Diff) - end, - - %% Resize vertical resize bar - case rb3(Flags) of - open -> gs:config('RB3', {height,gs:read('RB3',height)+Diff}); - close -> ignore - end, - - %% Adjust the frames y coordinates - config_v(); -resize_win(WinInfo, 'RB2', Y) -> - {_Bu,S,Bi,F} = Flags = WinInfo#winInfo.flags, - Prev = gs:read('TraceArea',y), - Diff = Prev-(Y+10), - - %% Resize Trace, Evaluator and Binding areas - resize_trace_area(F, height, Diff), - resize_eval_area(S, height, -Diff), - resize_bind_area(Bi, height, -Diff), - - %% Resize vertical resize bar - case rb3(Flags) of - open -> gs:config('RB3', {height,gs:read('RB3',height)-Diff}); - close -> ignore - end, - - %% Adjust the frames y coordinates - config_v(); - -resize_win(WinInfo, 'RB3', X) -> - {_Bu,S,Bi,_F} = WinInfo#winInfo.flags, - Prev = gs:read('BindArea', x), - Diff = Prev-(X+10), - - %% Resize Binding and Trace areas - resize_bind_area(Bi, width, Diff), - resize_eval_area(S, width, -Diff), - - %% Adjust the frames x coordinates - config_h(). - -%% Given the window dimensions, return the limits for a resize bar. -rblimits('RB1',_W,H) -> - - %% Code frame should not have height <100 - Min = 126, - - %% Max is decided by a minimum distance to 'RB2' - %% unless 'RB2' is invisible and 'CodeArea' is visible - %% (=> EvalFrame and BindFrame invisible) in which case - %% TraceFrame should not have height <100 - RB2 = gs:read('RB2',height), - FF = gs:read('TraceArea',height), - Max = case RB2 of - 0 when FF =/= 0 -> - H-112; - _ -> - Y = gs:read('RB2',y), - erlang:max(Min,Y-140) - end, - - {Min,Max}; -rblimits('RB2',_W,H) -> - %% TraceFrame should not have height < 100 - Max = H-112, - %% Min is decided by a minimum distance to 'RB1' - Y = gs:read('RB1',y), - Min = erlang:min(Max,Y+140), - {Min,Max}; - -rblimits('RB3',W,_H) -> - %% Neither CodeArea nor BindArea should occupy - %% less than 1/3 of the total window width and EvalFrame should - %% be at least 289 pixels wide - {erlang:max(round(W/3),289),round(2*W/3)}. - - -%%==================================================================== -%% 'Go To Line' and 'Search' help windows -%%==================================================================== - -helpwin(gotoline, WinInfo, GS, Coords) -> - spawn_link(?MODULE, helpwin, [gotoline, WinInfo, GS, Coords,self()]); -helpwin(search, WinInfo, GS, Coords) -> - spawn_link(?MODULE, helpwin, [search, WinInfo, GS, Coords, self()]). - -helpwin(Type, WinInfo, GS, Coords, AttPid) -> - {_Mod, Editor} = WinInfo#winInfo.editor, - Data = case Type of - gotoline -> null; - search -> - {{1, 0}, false} - end, - Win = helpwin(Type, GS, Coords), - helpwin_loop(Type, AttPid, Editor, Data, Win). - -helpwin_loop(Type, AttPid, Editor, Data, Win) -> - receive - {gs, _Id, destroy, _Data, _Arg} -> - helpwin_stop(Type, AttPid, Editor, Data), - true; - - {gs, _Id, keypress, _Data, ['Return'|_]} -> - gs:config(btn(Win), flash), - Data2 = helpwin_action(Type, default, - AttPid, Editor, Data, Win), - helpwin_loop(Type, AttPid, Editor, Data2, Win); - {gs, _Id, keypress, _Data, _Arg} -> - helpwin_loop(Type, AttPid, Editor, Data, Win); - - {gs, _Id, click, _Data, ["Clear"]} -> - gs:config(ent(Win), {delete, {0,last}}), - Data2 = helpwin_clear(Type, AttPid, Editor, Data, Win), - helpwin_loop(Type, AttPid, Editor, Data2, Win); - {gs, _Id, click, _Data, ["Close"]} -> - helpwin_stop(Type, AttPid, Editor, Data), - true; - {gs, _Id, click, Action, _Arg} -> - Data2 = - helpwin_action(Type, Action, AttPid, Editor, Data, Win), - helpwin_loop(Type, AttPid, Editor, Data2, Win) - end. - -helpwin_stop(gotoline, _AttPid, _Editor, _Data) -> - ignore; -helpwin_stop(search, _AttPid, Editor, {Pos, _CS}) -> - unmark_string(Editor, Pos). - -helpwin_clear(gotoline, _AttPid, _Editor, Data, _Win) -> - Data; -helpwin_clear(search, _AttPid, Editor, {Pos, CS}, Win) -> - unmark_string(Editor, Pos), - gs:config(lbl(Win), {label, {text,""}}), - {{1, 0}, CS}. - -helpwin_action(gotoline, default, AttPid, _Editor, Data, Win) -> - case string:strip(gs:read(ent(Win), text)) of - "" -> ignore; - Str -> - case catch list_to_integer(Str) of - {'EXIT', _Reason} -> ignore; - Line -> AttPid ! {gui, {gotoline, Line}} - end - end, - Data; -helpwin_action(search, case_sensitive, _AttPid, _Ed, {Pos, CS}, _Win) -> - Bool = if CS =:= true -> false; CS =:= false -> true end, - {Pos, Bool}; -helpwin_action(search, default, _AttPid, Editor, {Pos, CS}, Win) -> - gs:config(lbl(Win), {label, {text, ""}}), - unmark_string(Editor, Pos), - case gs:read(ent(Win), text) of - "" -> {Pos, CS}; - Str -> - gs:config(lbl(Win), {label, {text,"Searching..."}}), - Str2 = lowercase(CS, Str), - case search(Str2, Editor, gs:read(Editor, size), Pos, CS) of - {Row, Col} -> - gs:config(lbl(Win), {label, {text,""}}), - mark_string(Editor, {Row, Col}, Str), - {{Row, Col}, CS}; - not_found -> - gs:config(lbl(Win), {label, {text,"Not found"}}), - {Pos, CS} - end - end. - -search(_Str, _Editor, Max, {Row, _Col}, _CS) when Row>Max -> - not_found; -search(Str, Editor, Max, {Row, Col}, CS) -> - SearchIn = lowercase(CS, gs:read(Editor, - {get,{{Row,Col+1},{Row,lineend}}})), - case string:str(SearchIn, Str) of - 0 -> search(Str, Editor, Max, {Row+1, 0}, CS); - N -> {Row, Col+N} - end. - -lowercase(true, Str) -> Str; -lowercase(false, Str) -> - [if Char >= $A, Char =< $Z -> Char+32; - true -> Char - end || Char <- Str]. - -mark_string(Editor, {Row, Col}, Str) -> - Between = {{Row,Col}, {Row,Col+length(Str)}}, - Font = dbg_ui_win:font(bold), - gs:config(Editor, [{vscrollpos, Row-5}, - {font_style, {Between, Font}}, - {fg, {Between, red}}]). - -unmark_string(Editor, {Row, Col}) -> - Between = {{Row,Col}, {Row,lineend}}, - Font = dbg_ui_win:font(normal), - gs:config(Editor, [{vscrollpos, Row-5}, - {font_style, {Between, Font}}, - {fg, {Between, black}}]). - -helpwin(Type, GS, {X, Y}) -> - W = 200, Pad = 10, Wbtn = 50, - - Title = case Type of search -> "Search"; gotoline -> "Go To Line" end, - Win = gs:window(GS, [{title, Title}, {x, X}, {y, Y}, {width, W}, - {destroy, true}]), - - Ent = gs:entry(Win, [{x, Pad}, {y, Pad}, {width, W-2*Pad}, - {keypress, true}]), - Hent = gs:read(Ent, height), - - Font = dbg_ui_win:font(normal), - - {Ybtn, Lbl} = - case Type of - search -> - Ycb = Pad+Hent, - gs:checkbutton(Win, [{label, {text, "Case Sensitive"}}, - {font, Font}, - {align, w}, - {x, Pad}, {y, Ycb}, - {width, W-2*Pad}, {height, 15}, - {data, case_sensitive}]), - Ylbl = Ycb+15, - {Ylbl+Hent+Pad, - gs:label(Win, [{x, Pad}, {y, Ylbl}, - {width, W-2*Pad}, {height, Hent}])}; - gotoline -> {Pad+Hent+Pad, null} - end, - - BtnLbl = case Type of search -> "Search"; gotoline -> "Go" end, - Btn = gs:button(Win, [{label, {text, BtnLbl}}, {font, Font}, - {x, W/2-3/2*Wbtn-Pad}, {y, Ybtn}, - {width, Wbtn}, {height, Hent}, - {data, default}]), - gs:button(Win, [{label, {text, "Clear"}}, {font, Font}, - {x, W/2-1/2*Wbtn}, {y, Ybtn}, - {width, Wbtn}, {height, Hent}]), - gs:button(Win, [{label, {text, "Close"}}, {font, Font}, - {x, W/2+1/2*Wbtn+Pad}, {y, Ybtn}, - {width, Wbtn}, {height, Hent}]), - - H = Ybtn+Hent+Pad, - gs:config(Win, [{height, H}, {map, true}]), - {Ent, Lbl, Btn}. - -ent(Win) -> element(1, Win). -lbl(Win) -> element(2, Win). -btn(Win) -> element(3, Win). diff --git a/lib/debugger/src/dbg_ui_view.erl b/lib/debugger/src/dbg_ui_view.erl deleted file mode 100644 index be998f22ff..0000000000 --- a/lib/debugger/src/dbg_ui_view.erl +++ /dev/null @@ -1,255 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2011. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_view). - -%% External exports --export([start/2]). - --record(state, {gs, % term() Graphics system id - win, % term() Attach process window data - coords, % {X,Y} Mouse point position - mod % atom() Module - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% start(GS, Mod) -%% Mod = atom() -%%-------------------------------------------------------------------- -start(GS, Mod) -> - Title = "View Module " ++ atom_to_list(Mod), - case dbg_ui_winman:is_started(Title) of - true -> ignore; - false -> spawn(fun () -> init(GS, Mod, Title) end) - end. - --spec stop() -> no_return(). -stop() -> - exit(stop). - -%%==================================================================== -%% Main loop and message handling -%%==================================================================== - -init(GS, Mod, Title) -> - %% Subscribe to messages from the interpreter - int:subscribe(), - - %% Create attach process window - Win1 = dbg_ui_trace_win:create_win(GS, Title, ['Code Area'], menus()), - Window = dbg_ui_trace_win:get_window(Win1), - dbg_ui_winman:insert(Title, Window), - - Win2 = gui_load_module(Win1, Mod), - Win3 = - lists:foldl(fun(Break, Win) -> - dbg_ui_trace_win:add_break(Win, 'Break', Break) - end, - Win2, - int:all_breaks(Mod)), - - loop(#state{gs=GS, win=Win3, coords={0,0}, mod=Mod}). - -loop(State) -> - receive - - %% From the GUI main window - GuiEvent when is_tuple(GuiEvent), element(1, GuiEvent)==gs -> - Cmd = dbg_ui_trace_win:handle_event(GuiEvent, State#state.win), - State2 = gui_cmd(Cmd, State), - loop(State2); - - %% From the GUI help windows - {gui, Cmd} -> - State2 = gui_cmd(Cmd, State), - loop(State2); - - %% From the interpreter - {int, Cmd} -> - State2 = int_cmd(Cmd, State), - loop(State2); - - %% From the dbg_ui_winman process (Debugger window manager) - {dbg_ui_winman, update_windows_menu, Data} -> - dbg_ui_winman:update_windows_menu(Data), - loop(State); - {dbg_ui_winman, destroy} -> - stop(); - - %% Help window termination -- ignore - {'EXIT', _Pid, _Reason} -> - loop(State) - end. - -%%--Commands from the GUI--------------------------------------------- - -gui_cmd(ignore, State) -> - State; -gui_cmd({win, Win}, State) -> - State#state{win=Win}; -gui_cmd(stopped, _State) -> - stop(); -gui_cmd({coords, Coords}, State) -> - State#state{coords=Coords}; - -gui_cmd({shortcut, Key}, State) -> - case shortcut(Key) of - false -> State; - Cmd -> gui_cmd(Cmd, State) - end; - -%% File menu -gui_cmd('Close', _State) -> - stop(); - -%% Edit menu -gui_cmd('Go To Line...', State) -> - %% Will result in message handled below: {gui, {gotoline, Line}} - dbg_ui_trace_win:helpwin(gotoline, State#state.win, - State#state.gs, State#state.coords), - State; -gui_cmd({gotoline, Line}, State) -> - Win = dbg_ui_trace_win:select_line(State#state.win, Line), - State#state{win=Win}; -gui_cmd('Search...', State) -> - dbg_ui_trace_win:helpwin(search, State#state.win, - State#state.gs, State#state.coords), - State; - -%% Break menu -gui_cmd('Line Break...', State) -> - add_break(State#state.gs, State#state.coords, line, - State#state.mod, - dbg_ui_trace_win:selected_line(State#state.win)), - State; -gui_cmd('Conditional Break...', State) -> - add_break(State#state.gs, State#state.coords, conditional, - State#state.mod, - dbg_ui_trace_win:selected_line(State#state.win)), - State; -gui_cmd('Function Break...', State) -> - add_break(State#state.gs, State#state.coords, function, - State#state.mod, undefined), - State; -gui_cmd('Enable All', State) -> - Breaks = int:all_breaks(), - ThisMod = State#state.mod, - lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod -> - int:enable_break(Mod, Line); - (_Break) -> - ignore - end, - Breaks), - State; -gui_cmd('Disable All', State) -> - Breaks = int:all_breaks(), - ThisMod = State#state.mod, - lists:foreach(fun ({{Mod, Line}, _Options}) when Mod==ThisMod -> - int:disable_break(Mod, Line); - (_Break) -> - ignore - end, - Breaks), - State; -gui_cmd('Delete All', State) -> - int:no_break(State#state.mod), - State; -gui_cmd({break, {Mod, Line}, What}, State) -> - case What of - add -> int:break(Mod, Line); - delete -> int:delete_break(Mod, Line); - {status, inactive} -> int:disable_break(Mod, Line); - {status, active} -> int:enable_break(Mod, Line); - {trigger, Action} -> int:action_at_break(Mod, Line, Action) - end, - State; - -%% Help menu -gui_cmd('Debugger', State) -> - Window = dbg_ui_trace_win:get_window(State#state.win), - HelpFile = filename:join([code:lib_dir(debugger), - "doc", "html", "part_frame.html"]), - tool_utils:open_help(Window, HelpFile), - State. - -add_break(GS, Coords, Type, undefined, _Line) -> - dbg_ui_break:start(GS, Coords, Type); -add_break(GS, Coords, Type, Mod, undefined) -> - dbg_ui_break:start(GS, Coords, Type, Mod); -add_break(GS, Coords, Type, Mod, Line) -> - dbg_ui_break:start(GS, Coords, Type, Mod, Line). - -%%--Commands from the interpreter------------------------------------- - -int_cmd({new_break, {{Mod,_Line},_Options}=Break}, #state{mod=Mod}=State) -> - Win = dbg_ui_trace_win:add_break(State#state.win, 'Break', Break), - State#state{win=Win}; -int_cmd({delete_break, {Mod,_Line}=Point}, #state{mod=Mod}=State) -> - Win = dbg_ui_trace_win:delete_break(State#state.win, Point), - State#state{win=Win}; -int_cmd({break_options, {{Mod,_Line},_Options}=Break}, #state{mod=Mod}=State) -> - Win = dbg_ui_trace_win:update_break(State#state.win, Break), - State#state{win=Win}; -int_cmd(no_break, State) -> - Win = dbg_ui_trace_win:clear_breaks(State#state.win), - State#state{win=Win}; -int_cmd({no_break, _Mod}, State) -> - Win = dbg_ui_trace_win:clear_breaks(State#state.win), - State#state{win=Win}; -int_cmd(_, State) -> - State. - - -%%==================================================================== -%% GUI auxiliary functions -%%==================================================================== - -menus() -> - [{'File', [{'Close', 0}]}, - {'Edit', [{'Go To Line...', 0}, - {'Search...', 0}]}, - {'Break', [{'Line Break...', 5}, - {'Conditional Break...', 13}, - {'Function Break...', 0}, - separator, - {'Enable All', no}, - {'Disable All', no}, - {'Delete All', 0}, - separator]}, - {'Help', [{'Debugger', no}]}]. - -shortcut(c) -> 'Close'; -shortcut(g) -> 'Go To Line...'; -shortcut(s) -> 'Search...'; -shortcut(b) -> 'Line Break...'; -shortcut(r) -> 'Conditional Break...'; -shortcut(f) -> 'Function Break...'; -shortcut(d) -> 'Delete All'; - -shortcut(_) -> false. - -gui_load_module(Win, Mod) -> - dbg_ui_trace_win:display({text, "Loading module..."}), - Contents = int:contents(Mod, any), - Win2 = dbg_ui_trace_win:show_code(Win, Mod, Contents), - dbg_ui_trace_win:display({text, ""}), - Win2. diff --git a/lib/debugger/src/dbg_ui_win.erl b/lib/debugger/src/dbg_ui_win.erl deleted file mode 100644 index 1c7a80a1c4..0000000000 --- a/lib/debugger/src/dbg_ui_win.erl +++ /dev/null @@ -1,281 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2002-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_win). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,menu,2}}, - {nowarn_deprecated_function,{gs,menu,3}}, - {nowarn_deprecated_function,{gs,menubutton,2}}, - {nowarn_deprecated_function,{gs,menuitem,2}}, - {nowarn_deprecated_function,{gs,menuitem,3}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,1}}]). - -%% External exports --export([init/0, - font/1, min_size/3, min_size/4, - create_menus/2, select/2, selected/1, - add_break/2, update_break/2, delete_break/1, - motion/2 - ]). - --record(break, {mb, smi, emi, dimi, demi}). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% init() -> GS -%% GS = term() -%%-------------------------------------------------------------------- -init() -> - gs:start([{kernel, true}]). - -%%-------------------------------------------------------------------- -%% font(Style) -> Font -%% Style = normal | bold -%% Select a suitable font. Defaults to {screen,12} and, if it does not -%% exist, {courier,12}. -%%-------------------------------------------------------------------- -font(Style) -> - GS = init(), - Style2 = if - Style =:= normal -> []; - true -> [Style] - end, - case gs:read(GS, {choose_font, {screen,Style2,12}}) of - Font when element(1, Font) =:= screen -> - Font; - _ -> - gs:read(GS, {choose_font, {courier,Style2,12}}) - end. - -%%-------------------------------------------------------------------- -%% min_size(Strings, MinW, MinH) -> {W, H} -%% min_size(Font, Strings, MinW, MinH) -> {W, H} -%% Font = GS font - defaults to dbg_ui_win:font(normal) -%% Strings = [string()] -%% MinW = MinH = int() -%% W = H = int() -%%-------------------------------------------------------------------- -min_size(Strings, MinW, MinH) -> - min_size(font(normal), Strings, MinW, MinH). - -min_size(Font, Strings, MinW, MinH) -> - GS = init(), - min_size(GS, Font, Strings, MinW, MinH). - -min_size(GS, Font, [String|Strings], MinW, MinH) -> - {W, H} = gs:read(GS, {font_wh, {Font, String}}), - min_size(GS, Font, Strings, erlang:max(MinW, W), erlang:max(MinH, H)); -min_size(_GS, _Font, [], W, H) -> - {W, H}. - -%%-------------------------------------------------------------------- -%% create_menus(MenuBar, [Menu]) -%% MenuBar = gsobj() -%% Menu = {Name, [Item]} -%% Name = atom() -%% Item = {Name, N} | {Name, N, Type} | {Name, N, cascade, [Item]} -%% | separator -%% N = no | integer() -%% Type = check | radio -%% Create the specified menus and menuitems. -%% -%% Normal menuitems are specified as {Name, N}. Generates the event: -%% {gs, _Id, click, {menuitem, Name}, _Arg} -%% -%% Check and radio menuitems are specified as {Name, N, check|radio}. -%% They are assumed to be children to a cascade menuitem! (And all children -%% to one cascade menuitem are assumed to be either check OR radio -%% menuitems)! -%% Selecting a check/radio menuitem generates the event: -%% {gs, _Id, click, {menu, Menu}, _Arg} -%% where Menu is the name of the parent, the cascade menuitem. -%% Use selected(Menu) to retrieve which check/radio menuitems are -%% selected. -%%-------------------------------------------------------------------- -create_menus(MenuBar, [{Title, Items}|Menus]) -> - Title2 = " "++(atom_to_list(Title))++" ", - MenuBtn = gs:menubutton(MenuBar, [{label, {text,Title2}}, - {font, font(normal)}]), - case Title of - 'Help' -> gs:config(MenuBtn, {side, right}); - _ -> ignore - end, - Menu = gs:menu(Title, MenuBtn, []), - create_items(Menu, Items, Title), - create_menus(MenuBar, Menus); -create_menus(_MenuBar, []) -> - done. - -create_items(Menu, [Item|Items], Group) -> - create_item(Menu, Item, Group), - create_items(Menu, Items, Group); -create_items(_Menu, [], _Group) -> - done. - -create_item(Menu, {Name, _N, cascade, Items}, _Group) -> - MenuBtn = gs:menuitem(Menu, [{label, {text,Name}}, - {font, font(normal)}, - {itemtype, cascade}]), - SubMenu = gs:menu(Name, MenuBtn, []), - create_items(SubMenu, Items, Name); -create_item(Menu, separator, _Group) -> - gs:menuitem(Menu, [{itemtype, separator}]); -create_item(Menu, MenuItem, Group) -> - Options = case MenuItem of - {Name, N} -> - [{data, {menuitem,Name}}]; - {Name, N, check} -> - [{itemtype, check}, {data, {menu, Group}}]; - {Name, N, radio} -> - [{itemtype, radio}, {data, {menu, Group}}, - {group, group(Group)}] - end, - gs:menuitem(Name, Menu, [{label, {text,Name}}, - {font, font(normal)} | Options]), - if - is_integer(N) -> gs:config(Name, {underline, N}); - true -> ignore - end. - -%% When grouping radio buttons, the group id must be an atom unique for -%% each window. -group(Group) -> - list_to_atom(atom_to_list(Group)++pid_to_list(self())). - -%%-------------------------------------------------------------------- -%% select(MenuItem, Bool) -%% MenuItem = atom() -%% Bool = boolean() -%%-------------------------------------------------------------------- -select(MenuItem, Bool) -> - gs:config(MenuItem, {select, Bool}). - -%%-------------------------------------------------------------------- -%% selected(Menu) -> [Name] -%% Menu = Name = atom() -%%-------------------------------------------------------------------- -selected(Menu) -> - Children = gs:read(Menu, children), - Selected = [gs:read(Child, select) || Child <- Children], - lists:map(fun(Child) -> - {text, Name} = gs:read(Child, label), - list_to_atom(Name) - end, - Selected). - -%%-------------------------------------------------------------------- -%% add_break(Name, Point) -> #break{} -%% Name = atom() -%% Point = {Mod, Line} -%% The break will generate the following events: -%% {gs, _Id, click, {break, Point, Event}, _Arg} -%% Event = delete | {trigger, Action} | {status, Status} -%% Action = enable | disable | delete -%% Status = active | inactive -%%-------------------------------------------------------------------- -add_break(Menu, Point) -> - Font = font(normal), - - %% Create a name for the breakpoint - {Mod, Line} = Point, - Label = io_lib:format("~w ~5w", [Mod, Line]), - - %% Create a menu for the breakpoint - MenuBtn = gs:menuitem(Menu, [{label, {text,Label}}, {font, Font}, - {itemtype, cascade}]), - SubMenu = gs:menu(MenuBtn, []), - SMI = gs:menuitem(SubMenu, [{data, {break,Point,null}}]), - gs:menuitem(SubMenu, [{label, {text,"Delete"}}, {font, Font}, - {data, {break,Point,delete}}]), - TriggerMenuBtn = gs:menuitem(SubMenu, - [{label,{text,"Trigger Action"}}, - {font, Font}, - {itemtype, cascade}]), - TriggerMenu = gs:menu(TriggerMenuBtn, []), - Group = element(3, erlang:now()), - EMI = gs:menuitem(TriggerMenu, [{label, {text,"Enable"}}, - {font, Font}, - {itemtype, radio}, {group, Group}, - {data, - {break,Point,{trigger,enable}}}]), - DiMI = gs:menuitem(TriggerMenu, [{label, {text,"Disable"}}, - {font, Font}, - {itemtype, radio}, {group, Group}, - {data, - {break,Point,{trigger,disable}}}]), - DeMI = gs:menuitem(TriggerMenu, [{label, {text,"Delete"}}, - {font, Font}, - {itemtype, radio}, {group, Group}, - {data, - {break,Point,{trigger,delete}}}]), - - #break{mb=MenuBtn, smi=SMI, emi=EMI, dimi=DiMI, demi=DeMI}. - -%%-------------------------------------------------------------------- -%% update_break(Break, Options) -%% Break = #break{} -%% Options = [Status, Action, Mods, Cond] -%% Status = active | inactive -%% Action = enable | disable | delete -%% Mods = null (not used) -%% Cond = null | {Mod, Func} -%%-------------------------------------------------------------------- -update_break(Break, Options) -> - [Status, Trigger|_] = Options, - {break, Point, _Status} = gs:read(Break#break.smi, data), - - {Label, Data} = case Status of - active -> - {"Disable", {break,Point,{status,inactive}}}; - inactive -> - {"Enable", {break,Point,{status,active}}} - end, - gs:config(Break#break.smi, [{label, {text,Label}}, - {font, font(normal)}, - {data, Data}]), - - TriggerMI = case Trigger of - enable -> Break#break.emi; - disable -> Break#break.dimi; - delete -> Break#break.demi - end, - gs:config(TriggerMI, {select, true}). - -%%-------------------------------------------------------------------- -%% delete_break(Break) -%% Break = #break{} -%%-------------------------------------------------------------------- -delete_break(Break) -> - gs:destroy(Break#break.mb). - -%%-------------------------------------------------------------------- -%% motion(X, Y) -> {X, Y} -%% X = Y = integer() -%%-------------------------------------------------------------------- -motion(X, Y) -> - receive - {gs, _Id, motion, _Data, [NX,NY]} -> - motion(NX, NY) - after 0 -> - {X, Y} - end. diff --git a/lib/debugger/src/dbg_ui_winman.erl b/lib/debugger/src/dbg_ui_winman.erl deleted file mode 100644 index b5433a202b..0000000000 --- a/lib/debugger/src/dbg_ui_winman.erl +++ /dev/null @@ -1,182 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(dbg_ui_winman). --behaviour(gen_server). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,menu,3}}, - {nowarn_deprecated_function,{gs,menubutton,3}}, - {nowarn_deprecated_function,{gs,menuitem,3}}]). - -%% External exports --export([start/0]). --export([insert/2, is_started/1, - clear_process/1, - raise/1, - windows_menu/1, update_windows_menu/1]). - -%% gen_server callbacks --export([init/1, handle_call/3, handle_cast/2, handle_info/2, - terminate/2, code_change/3]). - --record(win, {owner, % pid() - title, % string() - win % gsobj() - }). - --record(state, {wins=[] % [#win{}] - }). - -%%==================================================================== -%% External exports -%%==================================================================== - -%%-------------------------------------------------------------------- -%% start() -%%-------------------------------------------------------------------- -start() -> - gen_server:start({local,?MODULE}, ?MODULE, [], []). - -%%-------------------------------------------------------------------- -%% insert(Title, Win) -%% Title = string() -%% Win = gsobj() -%%-------------------------------------------------------------------- -insert(Title, Win) -> - gen_server:cast(?MODULE, {insert, self(), Title, Win}). - -%%-------------------------------------------------------------------- -%% is_started(Title) -> true | false -%% Title = string() -%%-------------------------------------------------------------------- -is_started(Title) -> - case gen_server:call(?MODULE, {is_started, Title}, infinity) of - {true, Win} -> - raise(Win), - true; - false -> - false - end. - -%%-------------------------------------------------------------------- -%% clear_process(Title) -%% Title = string() -%%-------------------------------------------------------------------- -clear_process(Title) -> - gen_server:cast(?MODULE, {clear_process, Title}). - -%%-------------------------------------------------------------------- -%% raise(Win) -%% Win = gsobj() -%%-------------------------------------------------------------------- -raise(Win) -> - gs:config(Win, [raise, {iconify, false}, {setfocus, true}]). - -%%-------------------------------------------------------------------- -%% windows_menu(MenuBar) -%% MenuBar = gsobj() -%%-------------------------------------------------------------------- -windows_menu(MenuBar) -> - gs:menubutton('WindowsMenuBtn', MenuBar, - [{label,{text," Windows "}}, - {font, dbg_ui_win:font(normal)}]), - gs:menu('WindowsMenu', 'WindowsMenuBtn', []). - -%%-------------------------------------------------------------------- -%% update_windows_menu(Data) -%% Data = {New, Old} -%% New = Old = list() -%%-------------------------------------------------------------------- -update_windows_menu([MonInfo|Infos]) -> - gs:destroy('WindowsMenu'), - gs:menu('WindowsMenu', 'WindowsMenuBtn', []), - menuitem(MonInfo), - gs:menuitem(separator, 'WindowsMenu', [{itemtype, separator}]), - lists:foreach(fun(Info) -> menuitem(Info) end, Infos). - -menuitem({Title, Win}) -> - gs:menuitem(Title, 'WindowsMenu', [{label, {text,Title}}, - {font, dbg_ui_win:font(normal)}, - {data, {dbg_ui_winman,Win}}]). - - -%%==================================================================== -%% gen_server callbacks -%%==================================================================== - -init(_Arg) -> - process_flag(trap_exit, true), - {ok, #state{}}. - -handle_call({is_started, Title}, _From, State) -> - Reply = case lists:keyfind(Title, #win.title, State#state.wins) of - false -> false; - Win -> {true, Win#win.win} - end, - {reply, Reply, State}. - -handle_cast({insert, Pid, Title, Win}, State) -> - link(Pid), - Wins = State#state.wins ++ [#win{owner=Pid, title=Title, win=Win}], - inform_all(Wins), - {noreply, State#state{wins=Wins}}; - -handle_cast({clear_process, Title}, State) -> - OldWins = State#state.wins, - Wins = case lists:keyfind(Title, #win.title, OldWins) of - #win{owner=Pid} -> - Msg = {dbg_ui_winman, destroy}, - Pid ! Msg, - lists:keydelete(Title, #win.title, OldWins); - false -> - OldWins - end, - {noreply, State#state{wins=Wins}}. - -handle_info({'EXIT', Pid, _Reason}, State) -> - [Mon | _Wins] = State#state.wins, - if - Pid =:= Mon#win.owner -> {stop, normal, State}; - true -> - Wins2 = lists:keydelete(Pid, #win.owner, State#state.wins), - inform_all(Wins2), - {noreply, State#state{wins=Wins2}} - end. - -terminate(_Reason, State) -> - delete_all(State#state.wins), - ok. - -code_change(_OldVsn, State, _Extra) -> - {ok, State}. - - -%%==================================================================== -%% Internal functions -%%==================================================================== - -inform_all(Wins) -> - Infos = lists:map(fun(#win{title=Title, win=Win}) -> {Title, Win} end, - Wins), - Msg = {dbg_ui_winman, update_windows_menu, Infos}, - lists:foreach(fun(#win{owner=Pid}) -> Pid ! Msg end, Wins). - -delete_all(Wins) -> - Msg = {dbg_ui_winman, destroy}, - lists:foreach(fun(#win{owner=Pid}) -> Pid ! Msg end, Wins). diff --git a/lib/debugger/src/dbg_wx_mon_win.erl b/lib/debugger/src/dbg_wx_mon_win.erl index a617f3e1e7..0071b27027 100644 --- a/lib/debugger/src/dbg_wx_mon_win.erl +++ b/lib/debugger/src/dbg_wx_mon_win.erl @@ -43,7 +43,7 @@ -record(moduleInfo, {module, menubtn}). -record(procInfo, {pid, row}). -record(breakInfo, {point, status, break}). --record(break, {mb, smi, emi, dimi, demi}). %% BUGBUG defined in dbg_ui_win +-record(break, {mb, smi, emi, dimi, demi}). -record(winInfo, {window, % gsobj() grid, % gsobj() row, % int() Last row in grid @@ -76,13 +76,6 @@ init() -> dbg_wx_win:init(). -%%-------------------------------------------------------------------- -%% create_win(GS, Title, Menus) -> #winInfo{} -%% GS = gsobj() -%% Title = string() -%% Menus = [menu()] See dbg_ui_win.erl -%%-------------------------------------------------------------------- - -define(GRID,1000). -define(PAD, 5). diff --git a/lib/debugger/src/dbg_wx_trace.erl b/lib/debugger/src/dbg_wx_trace.erl index 7108b5a79a..1ac796bb4c 100644 --- a/lib/debugger/src/dbg_wx_trace.erl +++ b/lib/debugger/src/dbg_wx_trace.erl @@ -71,21 +71,10 @@ start(Pid, TraceWin, BackTrace) -> start(Pid, TraceWin, BackTrace, ?STRINGS). start(Pid, TraceWin, BackTrace, Strings) -> - case {whereis(dbg_wx_mon), whereis(dbg_ui_mon)} of - {undefined, undefined} -> - case which_gui() of - gs -> - dbg_ui_trace:start(Pid, TraceWin, BackTrace); - wx -> - Parent = wx:new(), - Env = wx:get_env(), - start(Pid, Env, Parent, TraceWin, BackTrace, Strings) - end; - {undefined, Monitor} when is_pid(Monitor) -> - dbg_ui_trace:start(Pid, TraceWin, BackTrace); - {Monitor, _} when is_pid(Monitor) -> + case whereis(dbg_wx_mon) of + Monitor when is_pid(Monitor) -> Monitor ! {?MODULE, self(), get_env}, - receive + receive {env, Monitor, Env, Parent} -> start(Pid, Env, Parent, TraceWin, BackTrace, Strings) end @@ -110,15 +99,6 @@ start(Pid, Env, Parent, TraceWin, BackTrace, Strings) -> ignore end. -which_gui() -> - try - wx:new(), - wx:destroy(), - wx - catch _:_ -> - gs - end. - %%-------------------------------------------------------------------- %% title(Pid) -> string() %% By exporting this function, dbg_wx_mon may check with dbg_wx_winman diff --git a/lib/debugger/src/debugger.app.src b/lib/debugger/src/debugger.app.src index 807054c983..84fb98c94e 100644 --- a/lib/debugger/src/debugger.app.src +++ b/lib/debugger/src/debugger.app.src @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2011. All Rights Reserved. +%% Copyright Ericsson AB 1997-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -27,20 +27,6 @@ dbg_iload, dbg_iserver, dbg_istk, - dbg_ui_break, - dbg_ui_break_win, - dbg_ui_edit, - dbg_ui_edit_win, - dbg_ui_filedialog_win, - dbg_ui_interpret, - dbg_ui_mon, - dbg_ui_mon_win, - dbg_ui_settings, - dbg_ui_trace, - dbg_ui_trace_win, - dbg_ui_view, - dbg_ui_win, - dbg_ui_winman, dbg_wx_break, dbg_wx_break_win, dbg_wx_code, @@ -59,5 +45,5 @@ i, int ]}, - {registered, [dbg_iserver, dbg_ui_mon, dbg_ui_winman]}, - {applications, [kernel, stdlib, gs]}]}. + {registered, [dbg_iserver, dbg_wx_mon, dbg_wx_winman]}, + {applications, [kernel, stdlib]}]}. diff --git a/lib/debugger/src/debugger.erl b/lib/debugger/src/debugger.erl index b97091ee6b..8a2ac28df5 100644 --- a/lib/debugger/src/debugger.erl +++ b/lib/debugger/src/debugger.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. +%% Copyright Ericsson AB 1997-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -32,44 +32,44 @@ %% -------- %% Interface module. %% -%% dbg_ui_winman +%% dbg_wx_winman %% ------------- %% Window manager, keeping track of open windows and Debugger %% processes. %% -%% dbg_ui_mon, dbg_ui_mon_win +%% dbg_wx_mon, dbg_wx_mon_win %% -------------------------- %% Monitor window, main window of Debugger, displaying information %% about interpreted modules and debugged processes. %% -%% dbg_ui_trace, dbg_ui_trace_win +%% dbg_wx_trace, dbg_wx_trace_win %% ------------------------------ %% Attach process window, showing the code executed by a debugged %% process and providing a GUI for stepping, inspecting variables etc. %% -%% dbg_ui_break, dbg_ui_break_win +%% dbg_wx_break, dbg_wx_break_win %% ------------------------------ %% Help window for creating new breakpoints. %% -%% dbg_ui_edit, dbg_ui_edit_win +%% dbg_wx_edit, dbg_wx_edit_win %% -------------------------------------- %% Help window for editing terms, used for setting backtrace size %% (i.e. how many stack frames to display in the attach process window) %% and changing variable values. %% -%% dbg_ui_interpret, dbg_ui_filedialog_win +%% dbg_wx_interpret, dbg_wx_filedialog_win %% -------------------------------------- %% Help window for selecting modules to interpret. %% -%% dbg_ui_settings, dbg_ui_filedialog_win +%% dbg_wx_settings, dbg_wx_filedialog_win %% -------------------------------------- %% Help window for saving and loading Debugger settings. %% -%% dbg_ui_view +%% dbg_wx_view %% ----------- -%% Help window for viewing interpreted modules (uses dbg_ui_trace_win). +%% Help window for viewing interpreted modules (uses dbg_wx_trace_win). %% -%% dbg_ui_win +%% dbg_wx_win %% ---------- %% GUI specific functionality used by more than one window type. %% @@ -78,7 +78,7 @@ start() -> start(global, default, default). start(Mode) when Mode==local; Mode==global -> start(Mode, default, default); -start(Gui) when Gui==gs; Gui==wx -> +start(Gui) when Gui==wx -> start(global, default, Gui); start(SFile) when is_list(SFile), is_integer(hd(SFile)) -> start(global, SFile, default). @@ -86,8 +86,6 @@ start(SFile) when is_list(SFile), is_integer(hd(SFile)) -> start(Mode, SFile) -> start(Mode, SFile, default). -start(Mode, SFile, gs) -> - dbg_ui_mon:start(Mode, SFile); start(Mode, SFile, wx) -> dbg_wx_mon:start(Mode, SFile); start(Mode, SFile, default) -> @@ -95,7 +93,7 @@ start(Mode, SFile, default) -> start(Mode, SFile, Gui). stop() -> - dbg_ui_mon:stop(). + dbg_wx_mon:stop(). quick(M, F, A) -> int:i(M), @@ -104,15 +102,7 @@ quick(M, F, A) -> auto_attach(Flags) -> case which_gui() of - gs -> int:auto_attach(Flags, {dbg_ui_trace, start, []}); wx -> int:auto_attach(Flags, {dbg_wx_trace, start, []}) end. -which_gui() -> - try - wx:new(), - wx:destroy(), - wx - catch _:_ -> - gs - end. +which_gui() -> wx. diff --git a/lib/dialyzer/doc/manual.txt b/lib/dialyzer/doc/manual.txt index d519ac960b..29c9518d84 100644 --- a/lib/dialyzer/doc/manual.txt +++ b/lib/dialyzer/doc/manual.txt @@ -125,7 +125,7 @@ The exit status of the command line version is: Usage: dialyzer [--help] [--version] [--shell] [--quiet] [--verbose] [-pa dir]* [--plt plt] [--plts plt*] [-Ddefine]* [-I include_dir]* [--output_plt file] [-Wwarn]* - [--src] [--gui | --wx] [files_or_dirs] [-r dirs] + [--src] [--gui] [files_or_dirs] [-r dirs] [--apps applications] [-o outfile] [--build_plt] [--add_to_plt] [--remove_from_plt] [--check_plt] [--no_check_plt] [--plt_info] [--get_warnings] @@ -234,9 +234,7 @@ Options: --fullpath Display the full path names of files for which warnings are emitted. --gui - Use the gs-based GUI. - --wx - Use the wx-based GUI. + Use the GUI. Note: * denotes that multiple occurrences of these options are possible. diff --git a/lib/dialyzer/doc/src/dialyzer.xml b/lib/dialyzer/doc/src/dialyzer.xml index 5bac999ac8..2a631c3010 100644 --- a/lib/dialyzer/doc/src/dialyzer.xml +++ b/lib/dialyzer/doc/src/dialyzer.xml @@ -67,7 +67,7 @@ dialyzer [--help] [--version] [--shell] [--quiet] [--verbose] [-pa dir]* [--plt plt] [--plts plt*] [-Ddefine]* [-I include_dir]* [--output_plt file] [-Wwarn]* - [--src] [--gui | --wx] [files_or_dirs] [-r dirs] + [--src] [--gui] [files_or_dirs] [-r dirs] [--apps applications] [-o outfile] [--build_plt] [--add_to_plt] [--remove_from_plt] [--check_plt] [--no_check_plt] [--plt_info] [--get_warnings] @@ -204,9 +204,7 @@ <tag><c><![CDATA[--fullpath]]></c></tag> <item>Display the full path names of files for which warnings are emitted.</item> <tag><c><![CDATA[--gui]]></c></tag> - <item>Use the gs-based GUI.</item> - <tag><c><![CDATA[--wx]]></c></tag> - <item>Use the wx-based GUI.</item> + <item>Use the GUI.</item> </taglist> <note> <p>* denotes that multiple occurrences of these options are possible.</p> diff --git a/lib/dialyzer/src/Makefile b/lib/dialyzer/src/Makefile index bb2edd419a..d7265ba31a 100644 --- a/lib/dialyzer/src/Makefile +++ b/lib/dialyzer/src/Makefile @@ -57,7 +57,6 @@ MODULES = \ dialyzer_dataflow \ dialyzer_dep \ dialyzer_explanation \ - dialyzer_gui \ dialyzer_gui_wx \ dialyzer_options \ dialyzer_plt \ @@ -113,9 +112,6 @@ $(EBIN)/dialyzer_cl_parse.$(EMULATOR): dialyzer_cl_parse.erl ../vsn.mk $(EBIN)/dialyzer_plt.$(EMULATOR): dialyzer_plt.erl ../vsn.mk $(erlc_verbose)erlc -W $(ERL_COMPILE_FLAGS) -DVSN="\"v$(VSN)\"" -o$(EBIN) dialyzer_plt.erl -$(EBIN)/dialyzer_gui.$(EMULATOR): dialyzer_gui.erl ../vsn.mk - $(erlc_verbose)erlc -W $(ERL_COMPILE_FLAGS) -DVSN="\"v$(VSN)\"" -o$(EBIN) dialyzer_gui.erl - $(EBIN)/dialyzer_gui_wx.$(EMULATOR): dialyzer_gui_wx.erl ../vsn.mk $(erlc_verbose)erlc -W $(ERL_COMPILE_FLAGS) -DVSN="\"v$(VSN)\"" -o$(EBIN) dialyzer_gui_wx.erl @@ -140,7 +136,6 @@ $(EBIN)/dialyzer_contracts.beam: dialyzer.hrl $(EBIN)/dialyzer_dataflow.beam: dialyzer.hrl $(EBIN)/dialyzer_dep.beam: dialyzer.hrl $(EBIN)/dialyzer_explanation.beam: dialyzer.hrl -$(EBIN)/dialyzer_gui.beam: dialyzer.hrl $(EBIN)/dialyzer_gui_wx.beam: dialyzer.hrl dialyzer_gui_wx.hrl $(EBIN)/dialyzer_options.beam: dialyzer.hrl $(EBIN)/dialyzer_plt.beam: dialyzer.hrl diff --git a/lib/dialyzer/src/dialyzer.erl b/lib/dialyzer/src/dialyzer.erl index 822aa0826a..35156afff2 100644 --- a/lib/dialyzer/src/dialyzer.erl +++ b/lib/dialyzer/src/dialyzer.erl @@ -62,18 +62,18 @@ plain_cl() -> cl_halt(cl_check_init(Opts), Opts); {plt_info, Opts} -> cl_halt(cl_print_plt_info(Opts), Opts); - {{gui, Type}, Opts} -> + {gui, Opts} -> try check_gui_options(Opts) catch throw:{dialyzer_error, Msg} -> cl_error(Msg) end, case Opts#options.check_plt of true -> case cl_check_init(Opts#options{get_warnings = false}) of - {ok, _} -> gui_halt(internal_gui(Type, Opts), Opts); + {ok, _} -> gui_halt(internal_gui(Opts), Opts); {error, _} = Error -> cl_halt(Error, Opts) end; false -> - gui_halt(internal_gui(Type, Opts), Opts) + gui_halt(internal_gui(Opts), Opts) end; {cl, Opts} -> case Opts#options.check_plt of @@ -179,12 +179,9 @@ run(Opts) -> erlang:error({dialyzer_error, lists:flatten(ErrorMsg)}) end. -internal_gui(Type, OptsRecord) -> +internal_gui(OptsRecord) -> F = fun() -> - case Type of - gs -> dialyzer_gui:start(OptsRecord); - wx -> dialyzer_gui_wx:start(OptsRecord) - end, + dialyzer_gui_wx:start(OptsRecord), ?RET_NOTHING_SUSPICIOUS end, doit(F). @@ -205,7 +202,7 @@ gui(Opts) -> case cl_check_init(OptsRecord) of {ok, ?RET_NOTHING_SUSPICIOUS} -> F = fun() -> - dialyzer_gui:start(OptsRecord) + dialyzer_gui_wx:start(OptsRecord) end, case doit(F) of {ok, _} -> ok; diff --git a/lib/dialyzer/src/dialyzer_cl_parse.erl b/lib/dialyzer/src/dialyzer_cl_parse.erl index 2ea3d3af5a..db27b2037d 100644 --- a/lib/dialyzer/src/dialyzer_cl_parse.erl +++ b/lib/dialyzer/src/dialyzer_cl_parse.erl @@ -2,7 +2,7 @@ %%----------------------------------------------------------------------- %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2006-2012. All Rights Reserved. +%% Copyright Ericsson AB 2006-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -30,7 +30,7 @@ -type dial_cl_parse_ret() :: {'check_init', #options{}} | {'plt_info', #options{}} | {'cl', #options{}} - | {{'gui', 'gs' | 'wx'}, #options{}} + | {'gui', #options{}} | {'error', string()}. -type deep_string() :: string() | [deep_string()]. @@ -193,12 +193,9 @@ cl(["--dump_callgraph", File|T]) -> put(dialyzer_callgraph_file, File), cl(T); cl(["--gui"|T]) -> - put(dialyzer_options_mode, {gui, gs}), + put(dialyzer_options_mode, gui), cl(T); -cl(["--wx"|T]) -> - put(dialyzer_options_mode, {gui, wx}), - cl(T); -cl(["--solver",Solver|T]) -> % not documented +cl(["--solver", Solver|T]) -> % not documented append_var(dialyzer_solvers, [list_to_atom(Solver)]), cl(T); cl([H|_] = L) -> @@ -217,7 +214,7 @@ cl([]) -> {plt_info, cl_options()}; false -> case get(dialyzer_options_mode) of - {gui, _} = GUI -> {GUI, common_options()}; + gui -> {gui, common_options()}; cl -> case get(dialyzer_options_analysis_type) =:= plt_check of true -> {check_init, cl_options()}; @@ -361,7 +358,7 @@ help_message() -> S = "Usage: dialyzer [--help] [--version] [--shell] [--quiet] [--verbose] [-pa dir]* [--plt plt] [--plts plt*] [-Ddefine]* [-I include_dir]* [--output_plt file] [-Wwarn]* - [--src] [--gui | --wx] [files_or_dirs] [-r dirs] + [--src] [--gui] [files_or_dirs] [-r dirs] [--apps applications] [-o outfile] [--build_plt] [--add_to_plt] [--remove_from_plt] [--check_plt] [--no_check_plt] [--plt_info] [--get_warnings] @@ -473,9 +470,7 @@ Options: --fullpath Display the full path names of files for which warnings are emitted. --gui - Use the gs-based GUI. - --wx - Use the wx-based GUI. + Use the GUI. Note: * denotes that multiple occurrences of these options are possible. diff --git a/lib/dialyzer/src/dialyzer_gui.erl b/lib/dialyzer/src/dialyzer_gui.erl deleted file mode 100644 index 97e5752577..0000000000 --- a/lib/dialyzer/src/dialyzer_gui.erl +++ /dev/null @@ -1,1381 +0,0 @@ -%% -*- erlang-indent-level: 2 -*- -%%------------------------------------------------------------------------ -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2006-2013. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% - -%%%----------------------------------------------------------------------- -%%% File : dialyzer_gui.erl -%%% Authors : Tobias Lindahl <[email protected]> -%%% Kostis Sagonas <[email protected]> -%%% Description : The graphical user interface for the Dialyzer tool. -%%% -%%% Created : 27 Apr 2004 by Tobias Lindahl <[email protected]> -%%%----------------------------------------------------------------------- - --module(dialyzer_gui). --compile([{nowarn_deprecated_function,{gs,button,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,editor,2}}, - {nowarn_deprecated_function,{gs,entry,2}}, - {nowarn_deprecated_function,{gs,frame,2}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,listbox,2}}, - {nowarn_deprecated_function,{gs,menu,2}}, - {nowarn_deprecated_function,{gs,menubar,2}}, - {nowarn_deprecated_function,{gs,menubutton,2}}, - {nowarn_deprecated_function,{gs,menuitem,2}}, - {nowarn_deprecated_function,{gs,radiobutton,2}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,stop,0}}, - {nowarn_deprecated_function,{gs,window,2}}]). - --export([start/1]). - --include("dialyzer.hrl"). - -%%------------------------------------------------------------------------ - --define(DIALYZER_ERROR_TITLE, "Dialyzer Error"). --define(DIALYZER_MESSAGE_TITLE, "Dialyzer Message"). - -%%------------------------------------------------------------------------ - --type gs_object() :: any(). %% XXX: should be imported from gs - --record(mode, {start_byte_code :: gs_object(), - start_src_code :: gs_object()}). - --record(menu, {file_save_log :: gs_object(), - file_save_warn :: gs_object(), - file_quit :: gs_object(), - help_about :: gs_object(), - help_manual :: gs_object(), - help_warnings :: gs_object(), - opts_macros :: gs_object(), - opts_includes :: gs_object(), - plt_empty :: gs_object(), - plt_search_doc :: gs_object(), - plt_show_doc :: gs_object(), - warnings :: gs_object()}). - --record(gui_state, {add_all :: gs_object(), - add_file :: gs_object(), - add_rec :: gs_object(), - chosen_box :: gs_object(), - analysis_pid :: pid(), - del_file :: gs_object(), - doc_plt :: dialyzer_plt:plt(), - clear_chosen :: gs_object(), - clear_log :: gs_object(), - clear_warn :: gs_object(), - init_plt :: dialyzer_plt:plt(), - dir_entry :: gs_object(), - file_box :: gs_object(), - file_wd :: gs_object(), - gs :: gs_object(), - log :: gs_object(), - menu :: #menu{}, - mode :: #mode{}, - options :: #options{}, - packer :: gs_object(), - run :: gs_object(), - stop :: gs_object(), - top :: gs_object(), - warnings_box :: gs_object(), - backend_pid :: pid()}). - -%%------------------------------------------------------------------------ - --spec start(#options{}) -> ?RET_NOTHING_SUSPICIOUS. - -start(#options{from = From, init_plts = InitPltFiles, - legal_warnings = LegalWarnings} = DialyzerOptions) -> - process_flag(trap_exit, true), - - GS = gs:start(), - code:add_pathsa(["."]), - WH = [{width, 1000}, {height, 550}], - EmptySpace = {stretch, 1}, - - {ok, Host} = inet:gethostname(), - %% --------- Top Window -------------- - TopWin = gs:window(GS, [{title, "Dialyzer " ++ ?VSN ++ " @ " ++ Host}, - {configure, true}, - {default, listbox, {bg, white}}, - {default, editor, {bg, white}}, - {default, entry, {bg, white}}, - {default, button, {font, {helvetica, bold, 12}}}, - {default, label, {font, {helvetica, bold, 12}}} - |WH]), - Packer = gs:frame(TopWin, [{packer_x, [{stretch, 3},{fixed, 200}, - {stretch, 7}]}, - {packer_y, [{fixed, 25}, {fixed, 20}, - {stretch, 1, 50}, - {fixed, 25}, {fixed, 20}, - {stretch, 1, 50}, - {fixed, 25}]}]), - - %% --------- Chosen box -------------- - gs:label(Packer, [{label, {text, "Directories or modules to analyze"}}, - {height, 20}, {pack_xy, {1, 2}}]), - ChosenBox = gs:listbox(Packer, [{pack_xy, {1, 3}}, {vscroll, right}, - {selectmode, multiple}]), - - %% --------- File box -------------- - gs:label(Packer, [{label, {text, "File"}}, {height, 20}, {pack_xy, {1,5}}]), - FilePacker = gs:frame(Packer, [{packer_x, [{fixed, 30}, {stretch, 1, 100}]}, - {packer_y, [{fixed, 25}, {stretch, 1, 25}]}, - {pack_xy, {1, 6}}]), - gs:label(FilePacker, [{label, {text, "Dir:"}}, {pack_xy, {1, 1}}]), - DirEntry = gs:entry(FilePacker, [{height, 30}, {pack_xy, {2, 1}}, - {keypress, true}]), - File = gs:listbox(FilePacker, [{pack_x, {1,2}}, {pack_y, 2}, - {selectmode, multiple}, {doubleclick, true}, - {vscroll, right}]), - - %% --------- Options -------------- - gs:label(Packer, [{label, {text, "Analysis Options"}}, - {height, 20}, {pack_xy, {2, 2}}]), - ModePacker = gs:frame(Packer, [{packer_x, [{fixed, 75}, {fixed, 120}]}, - {packer_y, [{fixed, 20}, {fixed, 20}, - {fixed, 20}, - %% EmptySpace, - {fixed, 20}, {fixed, 20}, - {fixed, 20}, EmptySpace]}, - {bw, 10}, {relief, flat}, - {default, {radiobutton, {align, w}}}, - {default, {label, {align, w}}}, - {pack_xy, {2, 3}}]), - - %% Bytecode vs. Source code - gs:label(ModePacker, [{label, {text, "File Type:"}}, - {height, 20}, {pack_xy, {1,1}}]), - {ByteSel, SrcSel} = case From of - byte_code -> {[{select, true}], []}; - src_code -> {[], [{select, true}]} - end, - ModeByteCode = gs:radiobutton(ModePacker, - ByteSel ++ [{group, start_from}, - {label, {text,"BeamFiles"}}, - {pack_xy, {2,1}}]), - ModeSrcCode = gs:radiobutton(ModePacker, - SrcSel ++ [{group, start_from}, - {label, {text,"SourceFiles"}}, - {pack_xy, {2,2}}]), - Mode = #mode{start_byte_code = ModeByteCode, - start_src_code = ModeSrcCode}, - - %% --------- Log box -------------- - gs:label(Packer, [{label, {text, "Log"}}, {height, 20}, {pack_xy, {3,2}}]), - Log = gs:editor(Packer, [{pack_x, 3}, {pack_y, 3}, {enable, false}, - {font, {courier, 12}}, {vscroll, right}, - {wrap, word}]), - - %% --------- Warnings box -------------- - gs:label(Packer, [{label, {text, "Warnings"}},{height, 20},{pack_xy, {3,5}}]), - WarningsBox = gs:editor(Packer, [{pack_x, {2,3}}, {pack_y, 6}, - {enable, false}, - {font, {courier, 12}}, {vscroll, right}, - {wrap, word}]), - - %% --------- Buttons -------------- - ButtonPackerHighLeft = - gs:frame(Packer, [{packer_x, [{fixed, 50}, {fixed, 65}, EmptySpace]}, - {pack_xy, {1,4}}]), - ButtonPackerHighRight = - gs:frame(Packer, [{packer_x, [{fixed, 70}, {fixed, 70}, EmptySpace]}, - {pack_xy, {3,4}}]), - ButtonPackerLowLeft = - gs:frame(Packer, [{packer_x, [{fixed, 50}, - {fixed, 60}, - {fixed, 110}, - EmptySpace]}, - {pack_xy, {1,7}}]), - ButtonPackerLowRight = - gs:frame(Packer, [{packer_x, [{fixed, 100}, - {fixed, 70}, - EmptySpace, - {fixed, 70}, - {fixed, 70}]}, - {pack_x, {2,3}}, {pack_y, 7}]), - - WHButton = [{width, 60}, {height, 20}], - AddFile = gs:button(ButtonPackerLowLeft, [{pack_xy, {1, 1}}, - {label, {text,"Add"}}|WHButton]), - AddAll = gs:button(ButtonPackerLowLeft, [{pack_xy, {2, 1}}, - {label, {text,"Add All"}}|WHButton]), - AddRec = gs:button(ButtonPackerLowLeft, [{pack_xy, {3, 1}}, - {label, {text,"Add Recursively"}} - |WHButton]), - DelFile = gs:button(ButtonPackerHighLeft, [{pack_xy, {1, 1}}, - {label, {text,"Delete"}}|WHButton]), - ClearChosen = gs:button(ButtonPackerHighLeft, [{pack_xy, {2, 1}}, - {label, {text,"Delete All"}} - |WHButton]), - ClearLog = gs:button(ButtonPackerHighRight, [{pack_xy, {1, 1}}, - {label, {text,"Clear Log"}} - |WHButton]), - ClearWarn = gs:button(ButtonPackerLowRight, [{pack_xy, {1, 1}}, - {label, {text,"Clear Warnings"}} - |WHButton]), - - Run = gs:button(ButtonPackerLowRight, [{pack_xy, {4, 1}}, - {label, {text,"Run"}}|WHButton]), - Stop = gs:button(ButtonPackerLowRight, [{pack_xy, {5, 1}}, {enable, false}, - {label, {text,"Stop"}}|WHButton]), - - %% --------- Menu -------------- - MenuBar = gs:menubar(TopWin, []), - - %% File Menu - MenuBarFile = gs:menubutton(MenuBar, [{label, {text, "File"}}]), - MenuFile = gs:menu(MenuBarFile, []), - MenuFileSaveWarn = gs:menuitem(MenuFile, [{label, {text, "Save Warnings"}}]), - MenuFileSaveLog = gs:menuitem(MenuFile, [{label, {text, "Save Log"}}]), - MenuFileQuit = gs:menuitem(MenuFile, [{label, {text, "Quit"}}]), - - %% Warnings Menu - MenuBarWarn = gs:menubutton(MenuBar, [{label, {text, "Warnings"}}]), - MenuWarn = gs:menu(MenuBarWarn, []), - MenuWarnMatch = gs:menuitem(MenuWarn, [{label, {text, "Match failures"}}, - {itemtype, check}, {select, true}]), - MenuWarnFailingCall = gs:menuitem(MenuWarn, - [{label, {text, "Failing function calls"}}, - {itemtype, check}, {select, true}]), - MenuWarnFunApp = gs:menuitem(MenuWarn, [{label, - {text, "Bad fun applications"}}, - {itemtype, check}, {select, true}]), - MenuWarnOpaque = gs:menuitem(MenuWarn, [{label, - {text, "Opaqueness violations"}}, - {itemtype, check}, {select, true}]), - MenuWarnLists = gs:menuitem(MenuWarn, - [{label, {text, "Improper list constructions"}}, - {itemtype, check}, {select, true}]), - MenuWarnNotCalled = gs:menuitem(MenuWarn, - [{label, {text, "Unused functions"}}, - {itemtype, check}, {select, true}]), - MenuWarnReturnOnlyExit = gs:menuitem(MenuWarn, - [{label, - {text, "Error handling functions"}}, - {itemtype, check}, {select, false}]), - MenuWarnReturnNoReturn = gs:menuitem(MenuWarn, - [{label, - {text, "Functions of no return"}}, - {itemtype, check}, {select, true}]), - MenuWarnCallNonExported = gs:menuitem(MenuWarn, - [{label, - {text, "Call to unexported function"}}, - {itemtype, check}, {select, true}]), - MenuWarnRaceCondition = gs:menuitem(MenuWarn, - [{label, - {text,"Possible race conditions"}}, - {itemtype, check}, {select, false}]), - MenuWarnContractTypes = gs:menuitem(MenuWarn, - [{label, {text, "Wrong contracts"}}, - {itemtype, check}, {select, true}]), - MenuWarnContractSyntax = gs:menuitem(MenuWarn, - [{label, - {text, "Wrong contract syntax"}}, - {itemtype, check}, {select, true}]), - - %% PLT Menu - MenuBarPLT = gs:menubutton(MenuBar, [{label, {text,"PLT"}}]), - MenuPLT = gs:menu(MenuBarPLT, []), - MenuPLTEmpty = gs:menuitem(MenuPLT, [{label, {text, "Init with empty PLT"}}, - {itemtype, check}, {select, false}]), - MenuPLTShow = gs:menuitem(MenuPLT, [{label, {text, "Show contents"}}]), - MenuPLTSearch = gs:menuitem(MenuPLT, [{label, {text, "Search contents"}}]), - - %% Options Menu - MenuBarOpts = gs:menubutton(MenuBar, [{label,{text,"Options"}}]), - MenuOpts = gs:menu(MenuBarOpts, []), - MenuOptsMacros = gs:menuitem(MenuOpts, - [{label, {text, "Manage Macro Definitions"}}]), - MenuOptsIncludes = gs:menuitem(MenuOpts, - [{label, {text, "Manage Include Directories"}}]), - - %% Help - MenuBarHelp = gs:menubutton(MenuBar, [{label, {text, "Help"}}, {side, right}]), - MenuHelp = gs:menu(MenuBarHelp, []), - MenuHelpManual = gs:menuitem(MenuHelp, [{label, {text, "Manual"}}]), - MenuHelpWarnings = gs:menuitem(MenuHelp, [{label, {text, "Warning Options"}}]), - MenuHelpAbout = gs:menuitem(MenuHelp, [{label, {text, "About"}}]), - - Warnings = [{?WARN_RETURN_NO_RETURN, MenuWarnReturnNoReturn}, - {?WARN_RETURN_ONLY_EXIT, MenuWarnReturnOnlyExit}, - {?WARN_NOT_CALLED, MenuWarnNotCalled}, - {?WARN_NON_PROPER_LIST, MenuWarnLists}, - {?WARN_FUN_APP, MenuWarnFunApp}, - {?WARN_MATCHING, MenuWarnMatch}, - {?WARN_OPAQUE, MenuWarnOpaque}, - {?WARN_FAILING_CALL, MenuWarnFailingCall}, - {?WARN_CALLGRAPH, MenuWarnCallNonExported}, - {?WARN_RACE_CONDITION, MenuWarnRaceCondition}, - %% For contracts. - {?WARN_CONTRACT_TYPES, MenuWarnContractTypes}, - {?WARN_CONTRACT_SYNTAX, MenuWarnContractSyntax} - ], - - init_warnings(Warnings, LegalWarnings), - - Menu = #menu{file_quit = MenuFileQuit, - plt_empty = MenuPLTEmpty, - help_manual = MenuHelpManual, - help_about = MenuHelpAbout, - help_warnings = MenuHelpWarnings, - opts_macros = MenuOptsMacros, - opts_includes = MenuOptsIncludes, - plt_search_doc = MenuPLTSearch, - plt_show_doc = MenuPLTShow, - file_save_log = MenuFileSaveLog, - file_save_warn = MenuFileSaveWarn, - warnings = Warnings}, - - %% --------- Init -------------- - gs:config(TopWin, [{map, true}]), - gs:config(Packer, WH), - {ok, CWD} = file:get_cwd(), - - InitPlt = - case InitPltFiles of - [] -> dialyzer_plt:new(); - _ -> - Plts = [dialyzer_plt:from_file(F) || F <- InitPltFiles], - dialyzer_plt:merge_plts_or_report_conflicts(InitPltFiles, Plts) - end, - - State = #gui_state{add_all = AddAll, - add_file = AddFile, - add_rec = AddRec, - chosen_box = ChosenBox, - clear_chosen = ClearChosen, - clear_log = ClearLog, - clear_warn = ClearWarn, - del_file = DelFile, - doc_plt = dialyzer_plt:new(), - dir_entry = DirEntry, - file_box = File, - file_wd = CWD, - gs = GS, - init_plt = InitPlt, - log = Log, - menu = Menu, - mode = Mode, - options = DialyzerOptions, - packer = Packer, - run = Run, - stop = Stop, - top = TopWin, - warnings_box = WarningsBox}, - NewState = change_dir_or_add_file(State, "."), - gui_loop(NewState). - -%% ---------------------------------------------------------------- -%% -%% Main GUI Loop -%% - --spec gui_loop(#gui_state{}) -> ?RET_NOTHING_SUSPICIOUS. - -gui_loop(#gui_state{add_all = AddAll, add_file = AddFile, add_rec = AddRec, - backend_pid = BackendPid, chosen_box = ChosenBox, - clear_chosen = ClearChosen, clear_log = ClearLog, - clear_warn = ClearWarn, del_file = DelFile, - dir_entry = DirEntry, file_box = File, log = Log, - menu = Menu, packer = Packer, run = Run, stop = Stop, - top = TopWin, warnings_box = Warn} = State) -> - %% --- Menu --- - Quit = Menu#menu.file_quit, - Manual = Menu#menu.help_manual, - Warnings = Menu#menu.help_warnings, - About = Menu#menu.help_about, - SaveLog = Menu#menu.file_save_log, - SaveWarn = Menu#menu.file_save_warn, - SearchPlt = Menu#menu.plt_search_doc, - ShowPlt = Menu#menu.plt_show_doc, - Macros = Menu#menu.opts_macros, - Includes = Menu#menu.opts_includes, - - receive - {gs, TopWin, configure, _Data, [W, H|_]} -> - gs:config(Packer, [{width, W}, {height, H}]), - gui_loop(State); - {gs, TopWin, destroy, _Data, _Args} -> - ?RET_NOTHING_SUSPICIOUS; - {gs, File, doubleclick, _, [_Id, Text|_]} -> - NewState = change_dir_or_add_file(State, Text), - gui_loop(NewState); - {gs, DirEntry, keypress, _, ['Return'|_]} -> - gs:config(TopWin, [{setfocus, true}]), - NewState = change_dir_absolute(State, gs:read(DirEntry, text)), - gui_loop(NewState); - {gs, DirEntry, keypress, _, _} -> - gui_loop(State); - %% ----- Buttons ----- - {gs, AddFile, click, _, _} -> - handle_add_files(State), - gui_loop(State); - {gs, AddAll, click, _, _} -> - handle_add_all_click(State), - gui_loop(State); - {gs, AddRec, click, _, _} -> - handle_add_rec_click(State), - gui_loop(State); - {gs, DelFile, click, _, _} -> - handle_file_delete(State), - gui_loop(State); - {gs, ClearChosen, click, _, _} -> - gs:config(ChosenBox, [clear]), - gui_loop(State); - {gs, ClearLog, click, _, _} -> - Log = State#gui_state.log, - gs:config(Log, [{enable, true}]), - gs:config(Log, [clear]), - gs:config(Log, [{enable, false}]), - gui_loop(State); - {gs, ClearWarn, click, _, _} -> - Warn = State#gui_state.warnings_box, - gs:config(Warn, [{enable, true}]), - gs:config(Warn, [clear]), - gs:config(Warn, [{enable, false}]), - gui_loop(State); - {gs, Run, click, _, _} -> - NewState = start_analysis(State), - gui_loop(NewState); - {gs, Stop, click, _, _} -> - config_gui_stop(State), - BackendPid ! {self(), stop}, - update_editor(Log, "\n***** Analysis stopped ****\n"), - gui_loop(State); - %% ----- Menu ----- - {gs, Quit, click, _, _} -> - case maybe_quit(State) of - true -> ?RET_NOTHING_SUSPICIOUS; - false -> gui_loop(State) - end; - {gs, Manual, click, _, _} -> - spawn_link(fun() -> manual(State) end), - gui_loop(State); - {gs, Warnings, click, _, _} -> - spawn_link(fun() -> warnings(State) end), - gui_loop(State); - {gs, About, click, _, _} -> - spawn_link(fun() -> about(State) end), - gui_loop(State); - {gs, SaveLog, click, _, _} -> - save_log(State), - gui_loop(State); - {gs, SaveWarn, click, _, _} -> - save_warn(State), - gui_loop(State); - {gs, SearchPlt, click, _, _} -> - spawn_link(fun() -> search_doc_plt(State) end), - gui_loop(State); - {gs, ShowPlt, click, _, _} -> - spawn_link(fun() -> show_doc_plt(State) end), - gui_loop(State); - {gs, Macros, click, _, _} -> - Self = self(), - spawn_link(fun() -> macro_dialog(State, Self) end), - gui_loop(State); - {gs, Includes, click, _, _} -> - Self = self(), - spawn_link(fun() -> include_dialog(State, Self) end), - gui_loop(State); - {new_options, NewOptions} -> - NewState = State#gui_state{options = NewOptions}, - gui_loop(NewState); - %% ----- Analysis ----- - {BackendPid, ext_calls, ExtCalls} -> - Msg = io_lib:format("The following functions are called " - "but type information about them is not available.\n" - "The analysis might get more precise by including " - "the modules containing these functions:\n\n\t~p\n", - [ExtCalls]), - free_editor(State, "Analysis done", Msg), - gui_loop(State); - {BackendPid, ext_types, ExtTypes} -> - Map = fun({M,F,A}) -> io_lib:format("~p:~p/~p",[M,F,A]) end, - ExtTypeString = string:join(lists:map(Map, ExtTypes), "\n"), - Msg = io_lib:format("The following remote types are being used " - "but information about them is not available.\n" - "The analysis might get more precise by including " - "the modules containing these types and making sure " - "that they are exported:\n~s\n", [ExtTypeString]), - free_editor(State, "Analysis done", Msg), - gui_loop(State); - {BackendPid, log, LogMsg} -> - update_editor(Log, LogMsg), - gui_loop(State); - {BackendPid, warnings, Warns} -> - SortedWarns = lists:keysort(2, Warns), %% Sort on file/line - WarnList = [dialyzer:format_warning(W) || W <- SortedWarns], - update_editor(Warn, lists:flatten(WarnList)), - gui_loop(State); - {BackendPid, done, _NewPlt, NewDocPlt} -> - message(State, "Analysis done"), - config_gui_stop(State), - gui_loop(State#gui_state{doc_plt = NewDocPlt}); - {'EXIT', BackendPid, {error, Reason}} -> - free_editor(State, ?DIALYZER_ERROR_TITLE, Reason), - config_gui_stop(State), - gui_loop(State); - {'EXIT', BackendPid, Reason} when Reason =/= 'normal' -> - free_editor(State, ?DIALYZER_ERROR_TITLE, io_lib:format("~p", [Reason])), - config_gui_stop(State), - gui_loop(State); - _Other -> - %% io:format("Received ~p\n", [Other]), - gui_loop(State) - end. - -%% ---------------------------------------------------------------- -%% -%% Main window actions -%% - -%% ---- Adding and deleting files ---- - -handle_add_all_click(#gui_state{chosen_box = ChosenBox, file_box = File, - file_wd = FWD, mode = Mode}) -> - case gs:read(File, items) of - [] -> - ok; - Add0 -> - gs:config(File, [{selection, clear}]), - Add1 = ordsets:subtract(Add0, [".."]), - Add = ordsets:from_list([filename:join(FWD, X) || X <- Add1]), - case gs:read(Mode#mode.start_byte_code, select) of - true -> - add_files(filter_mods(Add, ".beam"), ChosenBox, byte_code); - false -> - add_files(filter_mods(Add, ".erl"), ChosenBox, src_code) - end - end. - -all_subdirs(Dirs) -> - all_subdirs(Dirs, []). - -all_subdirs([Dir|T], Acc) -> - {ok, Files} = file:list_dir(Dir), - SubDirs = lists:zf(fun(F) -> - SubDir = filename:join(Dir, F), - case filelib:is_dir(SubDir) of - true -> {true, SubDir}; - false -> false - end - end, Files), - NewAcc = ordsets:union(ordsets:from_list(SubDirs), Acc), - all_subdirs(T ++ SubDirs, NewAcc); -all_subdirs([], Acc) -> - Acc. - -handle_add_rec_click(#gui_state{chosen_box = ChosenBox, file_box = File, - file_wd = FWD, mode = Mode}) -> - case gs:read(File, selection) of - [] -> - ok; - List -> - gs:config(File, [{selection, clear}]), - Dirs1 = [gs:read(File, {get, X}) || X <- List], - Dirs2 = ordsets:from_list([filename:join(FWD, X) || X <- Dirs1]), - Dirs3 = ordsets:filter(fun(X) -> filelib:is_dir(X) end, Dirs2), - TargetDirs = ordsets:union(Dirs3, all_subdirs(Dirs3)), - {Code, Ext} = case gs:read(Mode#mode.start_byte_code, select) of - true -> {byte_code, ".beam"}; - false -> {src_code, ".erl"} - end, - add_files(filter_mods(TargetDirs, Ext), ChosenBox, Code) - end. - -handle_add_files(#gui_state{chosen_box = ChosenBox, file_box = File, - file_wd = FWD, mode = Mode}) -> - case gs:read(File, selection) of - [] -> - ok; - List -> - gs:config(File, [{selection, clear}]), - Add0 = [gs:read(File, {get, X}) || X <- List], - Add = ordsets:from_list([filename:join(FWD, X) || X <- Add0]), - case gs:read(Mode#mode.start_byte_code, select) of - true -> - add_files(filter_mods(Add, ".beam"), ChosenBox, byte_code); - false -> - add_files(filter_mods(Add, ".erl"), ChosenBox, src_code) - end - end. - -filter_mods(Mods, Extension) -> - Fun = fun(X) -> - filename:extension(X) =:= Extension - orelse - (filelib:is_dir(X) andalso - contains_files(X, Extension)) - end, - ordsets:filter(Fun, Mods). - -contains_files(Dir, Extension) -> - {ok, Files} = file:list_dir(Dir), - lists:any(fun(X) -> filename:extension(X) =:= Extension end, Files). - -add_files(Add, ChosenBox, Type) -> - Set = gs:read(ChosenBox, items), - Set1 = - case Type of - byte_code -> filter_mods(Set, ".beam"); - src_code -> filter_mods(Set, ".erl") - end, - Files = ordsets:union(Add, Set1), - gs:config(ChosenBox, [{items, Files}]), - ok. - -handle_file_delete(#gui_state{chosen_box = ChosenBox}) -> - List = gs:read(ChosenBox, selection), - lists:foreach(fun(X) -> gs:config(ChosenBox, [{del, X}]) end, - lists:reverse(lists:sort(List))). - -%% ---- Other ---- - -change_dir_or_add_file(#gui_state{file_wd = FWD, mode = Mode, dir_entry = Dir, - chosen_box = CBox, file_box = File} = State, - Text) -> - NewWDorFile = - case Text of - ".." -> filename:join(butlast(filename:split(FWD))); - "." -> FWD; - _ -> filename:join(FWD, Text) - end, - case filelib:is_dir(NewWDorFile) of - true -> - gs:config(Dir, [{text, NewWDorFile}]), - {ok, List} = file:list_dir(NewWDorFile), - gs:config(File, [{items, [".."|lists:sort(List)]}]), - State#gui_state{file_wd = NewWDorFile}; - false -> - case gs:read(Mode#mode.start_byte_code, select) of - true -> - case filter_mods([NewWDorFile], ".beam") of - [] -> ok; - RealFiles -> add_files(RealFiles, CBox, byte_code) - end; - false -> - case filter_mods([NewWDorFile], ".erl") of - [] -> ok; - RealFiles -> add_files(RealFiles, CBox, src_code) - end - end, - State - end. - -butlast([H1, H2 | T]) -> - [H1 | butlast([H2|T])]; -butlast([_]) -> - []; -butlast([]) -> - ["/"]. - -change_dir_absolute(#gui_state{file_wd = FWD, dir_entry = Dir, - file_box = File} = State, - Text) -> - case filelib:is_dir(Text) of - true -> - WD = filename:join(FWD, Text), - gs:config(Dir, [{text, WD}]), - {ok, List} = file:list_dir(WD), - gs:config(File, [{items, [".."|lists:sort(List)]}]), - State#gui_state{file_wd = WD}; - false -> - State - end. - -init_warnings([{Tag, GSItem}|Left], LegalWarnings) -> - Select = ordsets:is_element(Tag, LegalWarnings), - gs:config(GSItem, [{select, Select}]), - init_warnings(Left, LegalWarnings); -init_warnings([], _LegalWarnings) -> - ok. - -config_gui_start(State) -> - Enabled = [{enable, true}], - Disabled = [{enable, false}], - gs:config(State#gui_state.stop, Enabled), - gs:config(State#gui_state.run, Disabled), - gs:config(State#gui_state.del_file, Disabled), - gs:config(State#gui_state.clear_chosen, Disabled), - gs:config(State#gui_state.add_file, Disabled), - gs:config(State#gui_state.add_all, Disabled), - gs:config(State#gui_state.add_rec, Disabled), - gs:config(State#gui_state.clear_warn, Disabled), - gs:config(State#gui_state.clear_log, Disabled), - Menu = State#gui_state.menu, - gs:config(Menu#menu.file_save_warn, Disabled), - gs:config(Menu#menu.file_save_log, Disabled), - gs:config(Menu#menu.opts_macros, Disabled), - gs:config(Menu#menu.opts_includes, Disabled), - gs:config(Menu#menu.plt_empty, Disabled), - gs:config(Menu#menu.plt_search_doc, Disabled), - gs:config(Menu#menu.plt_show_doc, Disabled), - Mode = State#gui_state.mode, - gs:config(Mode#mode.start_byte_code, Disabled), - gs:config(Mode#mode.start_src_code, Disabled). - -config_gui_stop(State) -> - Enabled = [{enable, true}], - Disabled = [{enable, false}], - gs:config(State#gui_state.stop, Disabled), - gs:config(State#gui_state.run, Enabled), - gs:config(State#gui_state.del_file, Enabled), - gs:config(State#gui_state.clear_chosen, Enabled), - gs:config(State#gui_state.add_file, Enabled), - gs:config(State#gui_state.add_all, Enabled), - gs:config(State#gui_state.add_rec, Enabled), - gs:config(State#gui_state.clear_warn, Enabled), - gs:config(State#gui_state.clear_log, Enabled), - Menu = State#gui_state.menu, - gs:config(Menu#menu.file_save_warn, Enabled), - gs:config(Menu#menu.file_save_log, Enabled), - gs:config(Menu#menu.opts_macros, Enabled), - gs:config(Menu#menu.opts_includes, Enabled), - gs:config(Menu#menu.plt_empty, Enabled), - gs:config(Menu#menu.plt_search_doc, Enabled), - gs:config(Menu#menu.plt_show_doc, Enabled), - Mode = State#gui_state.mode, - gs:config(Mode#mode.start_byte_code, Enabled), - gs:config(Mode#mode.start_src_code, Enabled). - -%% ---------------------------------------------------------------- -%% -%% Messages -%% - -message(State, Message) -> - output_sms(State, ?DIALYZER_MESSAGE_TITLE, Message). - -error_sms(State, Message) -> - output_sms(State, ?DIALYZER_ERROR_TITLE, Message). - -%% -%% This function is to be used *only* for small messages because lines -%% are not wrapped and the created window has a limited area for text. -%% For bigger messages, the function free_editor/3 is to be used. -%% -output_sms(#gui_state{gs = GS, top = TopWin}, Title, Message) -> - %% Lines = string:words(Message, $\n), - %% io:format("The message has ~w lines\n", [Lines]), - WH = [{width, 400}, {height, 100}], - MessageWin = gs:window(GS, [{title, Title}, - {default, button, {font, {helvetica, bold, 12}}} - |WH]), - MessagePacker = gs:frame(MessageWin, [{packer_y, [{fixed, 75}, {fixed, 25}]}, - {packer_x, [{fixed, 175},{fixed, 50}, - {fixed, 175}]}]), - gs:label(MessagePacker, [{pack_x, {1, 3}}, {pack_y, 1}, - {label, {text, Message}}]), - OK = gs:button(MessagePacker, [{label, {text, "OK"}}, {pack_xy, {2, 2}}]), - gs:config(MessageWin, [{map, true}]), - gs:config(MessagePacker, WH), - message_loop(OK, MessageWin, TopWin). - -message_loop(Ok, Win, TopWin) -> - receive - {gs, Ok, click, _, _} -> - gs:destroy(Win); - {gs, Win, destroy, _, _} -> - ok; - {gs, TopWin, destroy, _, _} -> - exit(normal); - {gs, _, _, _, _} -> - message_loop(Ok, Win, TopWin) - end. - -dialog(#gui_state{gs = GS, top = TopWin}, Message, OkLabel, CancelLabel) -> - WH = [{width, 400}, {height, 100}], - WHButton = [{width, 70}, {height, 20}], - DialogWin = gs:window(GS, [{title, "Dialyzer Message"}, - {default, button, {font, {helvetica, bold, 12}}} - |WH]), - DialogPacker = gs:frame(DialogWin, [{packer_y, [{fixed, 75}, {fixed, 25}]}, - {packer_x, [{fixed, 150}, {fixed, 50}, - {fixed, 50}, {fixed, 150}]}]), - gs:label(DialogPacker, [{pack_x, {1,4}}, {pack_y, 1}, - {label, {text, Message}}]), - Ok = gs:button(DialogPacker, [{label, {text, OkLabel}}, - {pack_xy, {2,2}}|WHButton]), - Cancel = gs:button(DialogPacker, [{label, {text, CancelLabel}}, - {pack_xy, {3,2}}|WHButton]), - gs:config(DialogWin, [{map, true}]), - gs:config(DialogPacker, WH), - dialog_loop(Ok, Cancel, DialogWin, TopWin). - -dialog_loop(Ok, Cancel, Win, TopWin) -> - receive - {gs, Ok, click, _, _} -> - gs:destroy(Win), - true; - {gs, Cancel, click, _, _} -> - gs:destroy(Win), - false; - {gs, Win, destroy, _, _} -> - false; - {gs, TopWin, destroy, _, _} -> - exit(normal); - {gs, _, _, _, _} -> - dialog_loop(Ok, Cancel, Win, TopWin) - end. - -maybe_quit(#gui_state{top = TopWin} = State) -> - case dialog(State, "Do you really want to quit?", "Yes", "No") of - true -> - flush(), - gs:destroy(TopWin), - gs:stop(), - true; - false -> - false - end. - - -%% ---------------------------------------------------------------- -%% -%% Menu actions -%% - -%% ---- Help Menu ---- - -manual(State) -> - help_menu_common(State, "Dialyzer Manual", 500, "manual.txt", white). - -warnings(State) -> - help_menu_common(State, "Dialyzer Warnings", 500, "warnings.txt", white). - -about(State) -> - help_menu_common(State, "About Dialyzer", 160, "about.txt", yellow). - -help_menu_common(#gui_state{gs = GS, top = TopWin} = State, - Title, Height, TxtFileName, BackGroundColor) -> - WH = [{width, 600}, {height, Height}], - Win = gs:window(GS, [{title, Title}, {configure, true}, - {default, editor, {bg, BackGroundColor}} | WH]), - EmptySpace = {stretch, 1}, - Frame = gs:frame(Win, [{packer_x, [EmptySpace, {fixed, 60}, EmptySpace]}, - {packer_y, [EmptySpace, {fixed, 30}]} | WH]), - Editor = gs:editor(Frame, [{pack_x, {1, 3}}, {pack_y, 1}, - {font, {courier, 12}}, {vscroll, right}, - {wrap, word}]), - Button = gs:button(Frame, [{label, {text, "Ok"}}, {pack_xy, {2, 2}}]), - gs:config(Win, [{map, true}]), - gs:config(Frame, WH), - AboutFile = filename:join([code:lib_dir(dialyzer), "doc", TxtFileName]), - case gs:config(Editor, {load, AboutFile}) of - {error, Reason} -> - gs:destroy(Win), - error_sms(State, - io_lib:format("Could not find doc/~s file!\n\n ~p", - [TxtFileName, Reason])); - ok -> - gs:config(Editor, [{enable, false}]), - show_info_loop(TopWin, Win, Frame, Button) - end. - -%% ---- File Menu ---- - -save_log(#gui_state{file_wd = CWD, log = Log} = State) -> - {Win, Entry, OkButton, CancelButton} = file_box(State, "Save Log", CWD), - save_loop(State, OkButton, CancelButton, Entry, Win, Log). - -save_warn(#gui_state{file_wd = CWD, warnings_box = WBox} = State) -> - {Win, Entry, OkButton, CancelButton} = file_box(State, "Save Warnings", CWD), - save_loop(State, OkButton, CancelButton, Entry, Win, WBox). - -file_box(#gui_state{gs = GS}, Title, Default) -> - WH = [{width, 400}, {height, 75}], - Win = gs:window(GS, [{title, Title}|WH]), - Fix25 = {fixed, 27}, Fix75 = {fixed, 75}, - WinPacker = gs:frame(Win, [{packer_y, [Fix25, Fix25, Fix25]}, - {packer_x, [Fix75, Fix75, Fix75, {fixed, 175}]}]), - gs:label(WinPacker, [{pack_xy, {1,2}}, {label, {text, "Enter file:"}}]), - Entry = gs:entry(WinPacker, [{pack_x, {2,4}}, {pack_y, 2}, {keypress, true}]), - OkButton = gs:button(WinPacker, [{label, {text, "Ok"}}, {pack_xy, {2,3}}]), - CancelButton = gs:button(WinPacker, [{label, {text, "Cancel"}}, - {pack_xy, {3,3}}]), - gs:config(Entry, [{text, Default}]), - gs:config(Win, [{map, true}]), - gs:config(WinPacker, WH), - {Win, Entry, OkButton, CancelButton}. - -save_loop(#gui_state{top = TopWin} = State, - OkButton, CancelButton, Entry, Save, Editor) -> - receive - {gs, OkButton, click, _, _} -> - File = gs:read(Entry, text), - case gs:config(Editor, [{save, File}]) of - {error, _} -> - error_sms(State, "Could not write to file:\n" ++ File), - save_loop(State, OkButton, CancelButton, Entry, Save, Editor); - _ -> - gs:destroy(Save) - end; - {gs, Entry, keypress, _, ['Return'|_]} -> - File = gs:read(Entry, text), - case gs:config(Editor, [{save, File}]) of - {error, _} -> - error_sms(State, "Could not write to file:\n" ++ File), - save_loop(State, OkButton, CancelButton, Entry, Save, Editor); - _ -> - gs:destroy(Save) - end; - {gs, Entry, keypress, _, _} -> - save_loop(State, OkButton, CancelButton, Entry, Save, Editor); - {gs, CancelButton, click, _, _} -> - gs:destroy(Save); - {gs, TopWin, destroy, _, _} -> - exit(normal); - {gs, Save, destroy, _, _} -> - ok; - {gs, _, _, _, _} -> - save_loop(State, OkButton, CancelButton, Entry, Save, Editor) - end. - -%% ---- Plt Menu ---- - -search_doc_plt(#gui_state{gs = GS, top = TopWin} = State) -> - WH = [{width, 400}, {height, 100}], - WHB = [{width, 120}, {height, 30}], - Title = io_lib:format("Search the PLT", []), - Win = gs:window(GS, [{title, Title}, {configure, true}, - {default, editor, {bg, white}} | WH]), - EmptySpace = {stretch, 1}, - Frame = gs:frame(Win, [{packer_x, [EmptySpace, EmptySpace, EmptySpace]}, - {packer_y, [{fixed, 30}, {fixed, 30}, - EmptySpace, {fixed, 30}]} | WH]), - gs:label(Frame, [{pack_xy, {1,1}}, {label, {text, "Module"}}]), - ModEntry = gs:entry(Frame, [{pack_xy, {1,2}}]), - gs:label(Frame, [{pack_xy, {2,1}}, {label, {text, "Function"}}]), - FunEntry = gs:entry(Frame, [{pack_xy, {2,2}}]), - gs:label(Frame, [{pack_xy, {3,1}}, {label, {text, "Arity"}}]), - ArityEntry = gs:entry(Frame, [{pack_xy, {3,2}}]), - ButtonPacker = gs:frame(Frame, [{pack_xy, {2,4}}, - {packer_x, [{fixed, 60}, {fixed, 60}]}, - {packer_y, {fixed, 30}}]), - SearchButton = gs:button(ButtonPacker, [{label, {text, "Search"}}, - {pack_xy, {1,1}}]), - CancelButton = gs:button(ButtonPacker, [{label, {text, "Cancel"}}, - {pack_xy, {2,1}}]), - gs:config(Win, [{map, true}]), - gs:config(Frame, WH), - gs:config(ButtonPacker, WHB), - search_doc_plt_loop(State, CancelButton, SearchButton, ModEntry, - FunEntry, ArityEntry, Win, TopWin). - -search_doc_plt_loop(State, CancelButton, SearchButton, ModEntry, - FunEntry, ArityEntry, Win, TopWin) -> - receive - {gs, CancelButton, click, _, _} -> - gs:destroy(Win), - ok; - {gs, TopWin, destroy, _, _} -> - exit(normal); - {gs, SearchButton, click, _, _} -> - M = format_search(gs:read(ModEntry, text)), - F = format_search(gs:read(FunEntry, text)), - A = format_search(gs:read(ArityEntry, text)), - case dialyzer_plt:get_specs(State#gui_state.doc_plt, M, F, A) of - "" -> - error_sms(State, "No such function"), - search_doc_plt_loop(State, CancelButton, SearchButton, ModEntry, - FunEntry, ArityEntry, Win, TopWin); - NonEmptyString -> - gs:destroy(Win), - free_editor(State, "Content of PLT", NonEmptyString) - end - end. - -format_search([]) -> - '_'; -format_search(String) -> - try list_to_integer(String) - catch error:_ -> list_to_atom(String) - end. - -show_doc_plt(#gui_state{doc_plt = DocPLT} = State) -> - case dialyzer_plt:get_specs(DocPLT) of - "" -> error_sms(State, "No analysis has been made yet!\n"); - NonEmptyString -> free_editor(State, "Content of PLT", NonEmptyString) - end. - -free_editor(#gui_state{gs = GS, top = TopWin}, Title, Contents0) -> - Contents = lists:flatten(Contents0), - Tokens = string:tokens(Contents, "\n"), - NofLines = length(Tokens), - LongestLine = lists:max([length(X) || X <- Tokens]), - Height0 = NofLines * 25 + 80, - Height = if Height0 > 500 -> 500; true -> Height0 end, - Width0 = LongestLine * 7 + 60, - Width = if Width0 > 800 -> 800; true -> Width0 end, - WH = [{width, Width}, {height, Height}], - Win = gs:window(GS, [{title, Title}, {configure, true}, - {default, editor, {bg, white}} | WH]), - EmptySpace = {stretch, 1}, - Frame = gs:frame(Win, [{packer_x, [EmptySpace, {fixed, 60}, EmptySpace]}, - {packer_y, [EmptySpace, {fixed, 30}]} - | WH]), - Editor = gs:editor(Frame, [{pack_x, {1,3}}, {pack_y, 1}, - {font, {courier, 12}}, {vscroll, right}, - {wrap, word}, {enable, true}]), - Button = gs:button(Frame, [{label, {text, "Ok"}}, {pack_xy, {2,2}}]), - gs:config(Editor, [{insert, {insert, Contents}}]), - gs:config(Editor, [{enable, false}]), - gs:config(Win, [{map, true}]), - gs:config(Frame, WH), - show_info_loop(TopWin, Win, Frame, Button). - -%% ---- Common ---- - -show_info_loop(TopWin, Win, Frame, Button) -> - receive - {gs, Button, click, _, _} -> - gs:destroy(Win); - {gs, TopWin, destroy, _, _} -> - exit(normal); - {gs, Win, destroy, _, _} -> - ok; - {gs, Win, configure, _Data, [W, H|_]} -> - gs:config(Frame, [{width, W}, {height, H}]), - show_info_loop(TopWin, Win, Frame, Button) - end. - -include_dialog(#gui_state{gs = GS, options = Options}, Parent) -> - WH = [{width, 300}, {height, 400}], - Title = io_lib:format("Include Directories", []), - Win = gs:window(GS, [{title, Title}, {configure, true}, - {default, entry, {bg, white}}| WH]), - EmptySpace = {stretch, 1}, - Frame = gs:frame(Win, [{packer_x, [EmptySpace]}, - {packer_y, [{fixed, 30}, {fixed, 30}, {fixed, 30}, - EmptySpace, {fixed, 30}, {fixed, 30}]} - | WH]), - gs:label(Frame, [{pack_xy, {1,1}}, {label, {text, "Directory"}}]), - DirEntry = gs:entry(Frame, [{pack_xy, {1,2}}]), - ButtonPacker1 = gs:frame(Frame, [{pack_xy, {1,3}}, - {packer_x, [{fixed, 70}, {fixed, 70}, - EmptySpace]}, - {packer_y, {fixed, 30}}]), - AddButton = gs:button(ButtonPacker1, [{label, {text, "Add"}}, - {pack_xy, {1,1}}]), - Dirs = [io_lib:format("~s", [X]) || X <- Options#options.include_dirs], - DirBox = gs:listbox(Frame, [{pack_xy, {1,4}}, {vscroll, right}, - {bg, white}, {configure, true}, - {selectmode, multiple}, {items, Dirs}]), - ButtonPacker2 = gs:frame(Frame, [{pack_xy, {1,5}}, - {packer_x, [{fixed, 60}, {fixed, 70}, - EmptySpace]}, - {packer_y, {fixed, 30}}]), - DeleteButton = gs:button(ButtonPacker2, [{label, {text, "Delete"}}, - {pack_xy, {1,1}}]), - DeleteAllButton = gs:button(ButtonPacker2, [{label, {text, "Delete All"}}, - {pack_xy, {2,1}}]), - ButtonPacker3 = gs:frame(Frame, [{pack_xy, {1,6}}, - {packer_x, [EmptySpace, - {fixed, 60}, {fixed, 60}]}, - {packer_y, {fixed, 30}}]), - OkButton = gs:button(ButtonPacker3, [{label, {text, "Ok"}}, - {pack_xy, {2,1}}]), - CancelButton = gs:button(ButtonPacker3, [{label, {text, "Cancel"}}, - {pack_xy, {3,1}}]), - gs:config(Win, [{map, true}]), - gs:config(Frame, WH), - include_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton, - DirBox, DirEntry, OkButton, CancelButton, Win). - -include_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton, - DirBox, DirEntry, OkButton, CancelButton, Win) -> - receive - {gs, CancelButton, click, _, _} -> - gs:destroy(Win), - ok; - {gs, OkButton, click, _, _} -> - gs:destroy(Win), - Parent ! {new_options, Options}, - ok; - {gs, Win, configure, _Data, [W, H|_]} -> - gs:config(Frame, [{width, W}, {height, H}]), - include_loop(Parent, Options, Frame, AddButton, DeleteAllButton, - DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win); - {gs, AddButton, click, _, _} -> - Dirs = Options#options.include_dirs, - NewDirs = - case gs:read(DirEntry, text) of - [] -> Dirs; - Add -> [Add|Dirs] - end, - NewOptions = Options#options{include_dirs = NewDirs}, - gs:config(DirBox, [{items, NewDirs}]), - include_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton, - DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win); - {gs, DeleteAllButton, click, _, _} -> - gs:config(DirBox, [clear]), - NewOptions = Options#options{include_dirs = []}, - include_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton, - DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win); - {gs, DeleteButton, click, _, _} -> - NewOptions = - case gs:read(DirBox, selection) of - [] -> - Options; - List -> - lists:foreach(fun(X) -> gs:config(DirBox, [{del, X}]) end, - lists:sort(List)), - NewDirs = gs:read(DirBox, items), - Options#options{include_dirs = NewDirs} - end, - include_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton, - DeleteButton, DirBox, DirEntry, OkButton, CancelButton, Win); - {gs, Win, destroy, _, _} -> - ok - end. - -macro_dialog(#gui_state{gs = GS, options = Options}, Parent) -> - WH = [{width, 300}, {height, 400}], - Title = io_lib:format("Macro Definitions", []), - Win = gs:window(GS, [{title, Title}, {configure, true}, - {default, entry, {bg, white}}| WH]), - EmptySpace = {stretch, 1}, - Frame = gs:frame(Win, [{packer_x, [EmptySpace, EmptySpace]}, - {packer_y, [{fixed, 30}, {fixed, 30}, {fixed, 30}, - EmptySpace, {fixed, 30}, {fixed, 30}]} - | WH]), - gs:label(Frame, [{pack_xy, {1,1}}, {label, {text, "Macro"}}]), - MacroEntry = gs:entry(Frame, [{pack_xy, {1,2}}]), - gs:label(Frame, [{pack_xy, {2,1}}, {label, {text, "Term"}}]), - TermEntry = gs:entry(Frame, [{pack_xy, {2,2}}]), - ButtonPacker1 = gs:frame(Frame, [{pack_x, {1,2}}, {pack_y, 3}, - {packer_x, [{fixed, 70},{fixed, 70}, - EmptySpace]}, - {packer_y, {fixed, 30}}]), - AddButton = gs:button(ButtonPacker1, [{label, {text, "Add"}}, - {pack_xy, {1,1}}]), - Macros = [io_lib:format("~p = ~p",[X,Y]) || {X,Y} <- Options#options.defines], - MacroBox = gs:listbox(Frame, [{pack_x, {1,2}}, {pack_y, 4}, {vscroll, right}, - {bg, white}, {configure, true}, - {selectmode, multiple}, - {items, Macros}]), - ButtonPacker2 = gs:frame(Frame, [{pack_x, {1,2}}, {pack_y, 5}, - {packer_x, [{fixed, 60}, {fixed, 70}, - EmptySpace]}, - {packer_y, {fixed, 30}}]), - DeleteButton = gs:button(ButtonPacker2, [{label, {text, "Delete"}}, - {pack_xy, {1,1}}]), - DeleteAllButton = gs:button(ButtonPacker2, [{label, {text, "Delete All"}}, - {pack_xy, {2,1}}]), - ButtonPacker3 = gs:frame(Frame, [{pack_x, {1,2}}, {pack_y, 6}, - {packer_x, [EmptySpace, - {fixed, 60}, {fixed, 60}]}, - {packer_y, {fixed, 30}}]), - OkButton = gs:button(ButtonPacker3, [{label, {text, "Ok"}}, - {pack_xy, {2,1}}]), - CancelButton = gs:button(ButtonPacker3, [{label, {text, "Cancel"}}, - {pack_xy, {3,1}}]), - gs:config(Win, [{map, true}]), - gs:config(Frame, WH), - macro_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton, - MacroBox, MacroEntry, TermEntry, OkButton, CancelButton, Win). - -macro_loop(Parent, Options, Frame, AddButton, DeleteAllButton, DeleteButton, - MacroBox, MacroEntry, TermEntry, OkButton, CancelButton, Win) -> - receive - {gs, CancelButton, click, _, _} -> - gs:destroy(Win), - ok; - {gs, OkButton, click, _, _} -> - gs:destroy(Win), - Parent ! {new_options, Options}, - ok; - {gs, Win, configure, _Data, [W, H|_]} -> - gs:config(Frame, [{width, W}, {height, H}]), - macro_loop(Parent, Options, Frame, AddButton, DeleteAllButton, - DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton, - CancelButton, Win); - {gs, AddButton, click, _, _} -> - Defines = Options#options.defines, - NewDefines = - case gs:read(MacroEntry, text) of - "" -> Defines; - Macro -> - Empty = [{text, ""}], - case gs:read(TermEntry, text) of - "" -> - gs:config(MacroEntry, Empty), - orddict:store(list_to_atom(Macro), true, Defines); - String -> - case parse(String) of - {ok, Term} -> - gs:config(MacroEntry, Empty), - gs:config(TermEntry, Empty), - orddict:store(list_to_atom(Macro), Term, Defines); - {error, _Reason} -> - Defines - end - end - end, - NewOptions = Options#options{defines = NewDefines}, - NewEntries = [io_lib:format("~p = ~p", [X, Y]) || {X, Y} <- NewDefines], - gs:config(MacroBox, [{items, NewEntries}]), - macro_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton, - DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton, - CancelButton, Win); - {gs, DeleteAllButton, click, _, _} -> - gs:config(MacroBox, [clear]), - NewOptions = Options#options{defines = []}, - macro_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton, - DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton, - CancelButton, Win); - {gs, DeleteButton, click, _, _} -> - NewOptions = - case gs:read(MacroBox, selection) of - [] -> - Options; - List -> - gs:config(MacroBox, [{selection, clear}]), - Fun = - fun(X) -> - Val = gs:read(MacroBox, {get, X}), - [MacroName|_] = re:split(Val, " ", [{return, list}]), - list_to_atom(MacroName) - end, - Delete = [Fun(X) || X <- List], - lists:foreach(fun(X) -> gs:config(MacroBox, [{del, X}]) end, - lists:reverse(lists:sort(List))), - Defines = Options#options.defines, - NewDefines = lists:foldl(fun(X, Acc) -> - orddict:erase(X, Acc) - end, - Defines, Delete), - Options#options{defines = NewDefines} - end, - macro_loop(Parent, NewOptions, Frame, AddButton, DeleteAllButton, - DeleteButton, MacroBox, MacroEntry, TermEntry, OkButton, - CancelButton, Win); - {gs, Win, destroy, _, _} -> - ok - end. - -parse(String) -> - case erl_scan:string(String ++ ".", 1) of - {ok, Ts, _} -> - case erl_parse:parse_exprs(Ts) of - {ok, [Expr]} -> - try erl_parse:normalise(Expr) - catch error:Reason -> {error, Reason} - end; - {error, E} -> - parse_error(E) - end; - {error, E, _} -> - parse_error(E) - end. - -parse_error(E) -> - S = io_lib:fwrite("Error parsing expression: ~P.", [E,15]), - {error, S}. - -%% ---------------------------------------------------------------- -%% -%% Run the analysis -%% - -start_analysis(State) -> - Analysis = build_analysis_record(State), - case get_anal_files(State, Analysis#analysis.start_from) of - error -> - Msg = "You must choose one or more files or dirs\n" - "before starting the analysis!", - error_sms(State, Msg), - config_gui_stop(State), - State; - {ok, Files} -> - Msg = "\n========== Starting Analysis ==========\n\n", - update_editor(State#gui_state.log, Msg), - NewAnalysis = Analysis#analysis{files = Files}, - run_analysis(State, NewAnalysis) - end. - -build_analysis_record(#gui_state{mode = Mode, menu = Menu, options = Options, - init_plt = InitPlt0}) -> - StartFrom = - case gs:read(Mode#mode.start_byte_code, select) of - true -> byte_code; - false -> src_code - end, - InitPlt = - case gs:read(Menu#menu.plt_empty, select) of - true -> dialyzer_plt:new(); - false -> InitPlt0 - end, - #analysis{defines = Options#options.defines, - include_dirs = Options#options.include_dirs, - plt = InitPlt, - start_from = StartFrom, - solvers = Options#options.solvers}. - -get_anal_files(#gui_state{chosen_box = ChosenBox}, StartFrom) -> - Files = gs:read(ChosenBox, items), - FilteredMods = - case StartFrom of - src_code -> filter_mods(Files, ".erl"); - byte_code -> filter_mods(Files, ".beam") - end, - FilteredDirs = [X || X <- Files, filelib:is_dir(X)], - case ordsets:union(FilteredMods, FilteredDirs) of - [] -> error; - Set -> {ok, Set} - end. - -run_analysis(State, Analysis) -> - config_gui_start(State), - Self = self(), - NewAnalysis = Analysis#analysis{doc_plt = dialyzer_plt:new()}, - LegalWarnings = find_legal_warnings(State), - Fun = - fun() -> - dialyzer_analysis_callgraph:start(Self, LegalWarnings, NewAnalysis) - end, - BackendPid = spawn_link(Fun), - State#gui_state{backend_pid = BackendPid}. - -find_legal_warnings(#gui_state{menu = #menu{warnings = Warnings}}) -> - ordsets:from_list([Tag || {Tag, GSItem} <- Warnings, - gs:read(GSItem, select) =:= true]). - -flush() -> - receive - _ -> flush() - after - 0 -> ok - end. - -update_editor(Editor, Msg) -> - gs:config(Editor, [{enable, true}]), - NofRows = gs:read(Editor, size), - gs:config(Editor, [{insertpos, 'end'}]), - gs:config(Editor, [{insert, {insert, Msg}}]), - NewNofRows = gs:read(Editor, size), - ScrollPos = gs:read(Editor, vscrollpos), - gs:config(Editor, [{vscrollpos, ScrollPos + NewNofRows - NofRows}]), - gs:config(Editor, [{enable, false}]). diff --git a/lib/et/src/Makefile b/lib/et/src/Makefile index 386169fe95..377e593712 100644 --- a/lib/et/src/Makefile +++ b/lib/et/src/Makefile @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 2000-2012. All Rights Reserved. +# Copyright Ericsson AB 2000-2013. All Rights Reserved. # # The contents of this file are subject to the Erlang Public License, # Version 1.1, (the "License"); you may not use this file except in @@ -127,15 +127,12 @@ $(EBIN)/et_selector.$(EMULATOR): et_selector.erl ../include/et.hrl $(EBIN)/et_contents_viewer.$(EMULATOR): et_contents_viewer.erl ../include/et.hrl et_internal.hrl -$(EBIN)/et_gs_contents_viewer.$(EMULATOR): et_gs_contents_viewer.erl ../include/et.hrl et_internal.hrl $(EBIN)/et_wx_contents_viewer.$(EMULATOR): et_wx_contents_viewer.erl ../include/et.hrl et_internal.hrl $(EBIN)/et_collector.$(EMULATOR): et_collector.erl ../include/et.hrl et_internal.hrl $(EBIN)/et_viewer.$(EMULATOR): et_viewer.erl ../include/et.hrl et_internal.hrl -$(EBIN)/et_gs_viewer.$(EMULATOR): et_gs_viewer.erl ../include/et.hrl et_internal.hrl - $(EBIN)/et_wx_viewer.$(EMULATOR): et_wx_viewer.erl ../include/et.hrl et_internal.hrl diff --git a/lib/et/src/et.app.src b/lib/et/src/et.app.src index fd203e3e44..f7189a4197 100644 --- a/lib/et/src/et.app.src +++ b/lib/et/src/et.app.src @@ -2,7 +2,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2002-2010. All Rights Reserved. +%% Copyright Ericsson AB 2002-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -24,8 +24,6 @@ [ et, et_collector, - et_gs_contents_viewer, - et_gs_viewer, et_selector, et_viewer, et_wx_contents_viewer, diff --git a/lib/et/src/et_collector.erl b/lib/et/src/et_collector.erl index a78b30c419..e05c67be60 100644 --- a/lib/et/src/et_collector.erl +++ b/lib/et/src/et_collector.erl @@ -409,8 +409,6 @@ report(TH, TraceOrEvent) when is_record(TH, table_handle) -> report(TH#table_handle.collector_pid, TraceOrEvent) end end; -report(TH, end_of_trace) when is_record(TH, table_handle) -> - {ok, TH}; report(_, Bad) -> exit({bad_event, Bad}). diff --git a/lib/et/src/et_gs_contents_viewer.erl b/lib/et/src/et_gs_contents_viewer.erl deleted file mode 100644 index 2d414f10b4..0000000000 --- a/lib/et/src/et_gs_contents_viewer.erl +++ /dev/null @@ -1,602 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2000-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%---------------------------------------------------------------------- -%% Purpose: Displays details of a trace event -%%---------------------------------------------------------------------- - --module(et_gs_contents_viewer). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,editor,2}}, - {nowarn_deprecated_function,{gs,frame,2}}, - {nowarn_deprecated_function,{gs,menu,2}}, - {nowarn_deprecated_function,{gs,menubar,2}}, - {nowarn_deprecated_function,{gs,menubutton,2}}, - {nowarn_deprecated_function,{gs,menuitem,2}}, - {nowarn_deprecated_function,{gs,menuitem,3}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,2}}]). - --behaviour(gen_server). - -%% External exports --export([start_link/1, - stop/1]). - -%% gen_server callbacks --export([init/1, terminate/2, code_change/3, - handle_call/3, handle_cast/2, handle_info/2]). - --include("../include/et.hrl"). --include("et_internal.hrl"). - --record(state, {parent_pid, % Pid of parent process - viewer_pid, % Pid of viewer process - event_order, % Field to be used as primary key - event, % The original event - filtered_event, % Event processed by active filter - active_filter, % Name of the active filter - filters, % List of possible filters - win, % GUI: Window object - packer, % GUI: Packer object - width, % GUI: Window width - height}). % GUI: Window height - -%%%---------------------------------------------------------------------- -%%% Client side -%%%---------------------------------------------------------------------- - -%%---------------------------------------------------------------------- -%% start_link(Options) -> {ok, ContentsPid} | {error, Reason} -%% -%% Start an viewer for the event contents as window in GS -%% -%% Options = [option()] -%% -%% option() = -%% -%% {parent_pid, pid()} | % Pid of parent process -%% {viewer_pid, pid()} | % Pid of viewer process -%% {event_order, event_order()} | % Field to be used as primary key -%% {active_filter, atom()} | % Name of the active filter -%% {filter, atom(), fun()} % A named filter fun -%% -%% event_order() = 'trace_ts' | 'event_ts' -%% ContentsPid = pid() -%% Reason = term() -%%---------------------------------------------------------------------- - -start_link(Options) -> - case parse_opt(Options, default_state()) of - {ok, S} -> - case gen_server:start_link(?MODULE, [S], []) of - {ok, ContentsPid} when S#state.parent_pid =/= self() -> - unlink(ContentsPid), - {ok, ContentsPid}; - Other -> - Other - end; - {error, Reason} -> - {error, Reason} - end. - -default_state() -> - #state{parent_pid = self(), - viewer_pid = undefined, - active_filter = ?DEFAULT_FILTER_NAME, - filters = [?DEFAULT_FILTER], - width = 600, - height = 300}. - -parse_opt([], S) -> - Name = S#state.active_filter, - Filters = S#state.filters, - if - S#state.event =:= undefined -> - {error, {badarg, no_event}}; - is_atom(Name) -> - case lists:keysearch(Name, #filter.name, Filters) of - {value, F} when is_record(F, filter) -> - {ok, S#state{active_filter = Name}}; - false -> - {error, {badarg, {no_such_filter, Name, Filters}}} - end - end; -parse_opt([H | T], S) -> - case H of - {parent_pid, ParentPid} when is_pid(ParentPid) -> - parse_opt(T, S#state{parent_pid = ParentPid}); - {viewer_pid, ViewerPid} when is_pid(ViewerPid) -> - parse_opt(T, S#state{viewer_pid = ViewerPid}); - {event_order, trace_ts} -> - parse_opt(T, S#state{event_order = trace_ts}); - {event_order, event_ts} -> - parse_opt(T, S#state{event_order = event_ts}); - {event, Event} when is_record(Event, event) -> - parse_opt(T, S#state{event = Event}); - {active_filter, Name} when is_atom(Name) -> - parse_opt(T, S#state{active_filter = Name}); - F when is_record(F, filter), - is_atom(F#filter.name), - is_function(F#filter.function) -> - Filters = lists:keydelete(F#filter.name, #filter.name, S#state.filters), - Filters2 = lists:keysort(#filter.name, [F | Filters]), - parse_opt(T, S#state{filters = Filters2}); - {width, Width} when is_integer(Width), Width > 0 -> - parse_opt(T, S#state{width = Width}); - {height, Height} when is_integer(Height), Height > 0 -> - parse_opt(T, S#state{height = Height}); - Bad -> - {error, {bad_option, Bad}} - end; -parse_opt(BadList, _S) -> - {error, {bad_option_list, BadList}}. - -%%---------------------------------------------------------------------- -%% stop(ContentsPid) -> ok -%% -%% Stops a contents viewer process -%% -%% ContentsPid = pid() -%%---------------------------------------------------------------------- - -stop(ContentsPid) -> - unlink(ContentsPid), - call(ContentsPid, stop). - -call(ContentsPid, Request) -> - gen_server:call(ContentsPid, Request, infinity). - -%%%---------------------------------------------------------------------- -%%% Callback functions from gen_server -%%%---------------------------------------------------------------------- - -%%---------------------------------------------------------------------- -%% Func: init/1 -%% Returns: {ok, State} | -%% {ok, State, Timeout} | -%% ignore | -%% {stop, Reason} -%%---------------------------------------------------------------------- - -init([S]) when is_record(S, state) -> - process_flag(trap_exit, true), - S2 = create_window(S), - {ok, S2}. - -%%---------------------------------------------------------------------- -%% Func: handle_call/3 -%% Returns: {reply, Reply, State} | -%% {reply, Reply, State, Timeout} | -%% {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, Reply, State} | (terminate/2 is called) -%% {stop, Reason, State} (terminate/2 is called) -%%---------------------------------------------------------------------- - -handle_call(stop, _From, S) -> - unlink(S#state.parent_pid), - {stop, shutdown, ok, S}; -handle_call(Request, From, S) -> - ok = error_logger:format("~p(~p): handle_call(~p, ~p, ~p)~n", - [?MODULE, self(), Request, From, S]), - Reply = {error, {bad_request, Request}}, - {reply, Reply, S}. - -%%---------------------------------------------------------------------- -%% Func: handle_cast/2 -%% Returns: {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, State} (terminate/2 is called) -%%---------------------------------------------------------------------- - -handle_cast(Msg, S) -> - ok = error_logger:format("~p(~p): handle_cast(~p, ~p)~n", - [?MODULE, self(), Msg, S]), - {noreply, S}. - -%%---------------------------------------------------------------------- -%% Func: handle_info/2 -%% Returns: {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, State} (terminate/2 is called) -%%---------------------------------------------------------------------- - -handle_info({gs, Button, click, Data, _Other}, S) -> - case Button of - close -> - gs:destroy(S#state.win), - {stop, normal, S}; - save -> - Event = S#state.event, - Bin = list_to_binary(event_to_string(Event, S#state.event_order)), - TimeStamp = - case S#state.event_order of - trace_ts -> Event#event.trace_ts; - event_ts -> Event#event.event_ts - end, - FileName = ["et_contents_viewer_", now_to_string(TimeStamp), ".save"], - file:write_file(lists:flatten(FileName), Bin), - {noreply, S}; - _PopupMenuItem when is_record(Data, filter) -> - F = Data, - ChildState= S#state{active_filter = F#filter.name}, - case gen_server:start_link(?MODULE, [ChildState], []) of - {ok, Pid} when S#state.parent_pid =/= self() -> - unlink(Pid), - {noreply, S}; - _ -> - {noreply, S} - end; - {hide, Actors} -> - send_viewer_event(S, {delete_actors, Actors}), - {noreply, S}; - {show, Actors} -> - send_viewer_event(S, {insert_actors, Actors}), - {noreply, S}; - {mode, Mode} -> - send_viewer_event(S, {mode, Mode}), - {noreply, S}; - Nyi -> - ok = error_logger:format("~p: click ~p ignored (nyi)~n", - [?MODULE, Nyi]), - {noreply, S} - end; -handle_info({gs, _Obj, destroy,_, _}, S) -> - unlink(S#state.parent_pid), - gs:destroy(S#state.win), - {stop, normal, S}; -handle_info({gs, _Obj, keypress, _, [KeySym, _Keycode, _Shift, _Control | _]}, S) -> - case KeySym of - 'c' -> - gs:destroy(S#state.win), - {stop, normal, S}; - - 'f' -> - E = S#state.filtered_event, - From = E#event.from, - send_viewer_event(S, {delete_actors, [From]}), - {noreply, S}; - 't' -> - E = S#state.filtered_event, - To = E#event.to, - send_viewer_event(S, {delete_actors, [To]}), - {noreply, S}; - 'b' -> - E = S#state.filtered_event, - From = E#event.from, - To = E#event.to, - send_viewer_event(S, {delete_actors, [From, To]}), - {noreply, S}; - - 'F' -> - E = S#state.filtered_event, - From = E#event.from, - send_viewer_event(S, {insert_actors, [From]}), - {noreply, S}; - 'T' -> - E = S#state.filtered_event, - To = E#event.to, - send_viewer_event(S, {insert_actors, [To]}), - {noreply, S}; - 'B' -> - E = S#state.filtered_event, - From = E#event.from, - To = E#event.to, - send_viewer_event(S, {insert_actors, [From, To]}), - {noreply, S}; - - 's' -> - E = S#state.filtered_event, - From = E#event.from, - To = E#event.to, - First = et_collector:make_key(S#state.event_order, E), - Mode = {search_actors, forward, First, [From, To]}, - send_viewer_event(S, {mode, Mode}), - {noreply, S}; - 'r' -> - E = S#state.filtered_event, - From = E#event.from, - To = E#event.to, - First = et_collector:make_key(S#state.event_order, E), - Mode = {search_actors, reverse, First, [From, To]}, - send_viewer_event(S, {mode, Mode}), - {noreply, S}; - 'a' -> - send_viewer_event(S, {mode, all}), - {noreply, S}; - - 0 -> - case lists:keysearch(?DEFAULT_FILTER_NAME, #filter.name, S#state.filters) of - {value, F} when is_record(F, filter) -> - ChildState= S#state{active_filter = F#filter.name}, - case gen_server:start_link(?MODULE, [ChildState], []) of - {ok, Pid} when S#state.parent_pid =/= self() -> - unlink(Pid); - _ -> - ignore - end; - false -> - ignore - end, - {noreply, S}; - Int when is_integer(Int), Int > 0, Int =< 9 -> - case catch lists:nth(Int, S#state.filters) of - F when is_record(F, filter) -> - ChildState= S#state{active_filter = F#filter.name}, - case gen_server:start_link(?MODULE, [ChildState], []) of - {ok, Pid} when S#state.parent_pid =/= self() -> - unlink(Pid); - _ -> - ignore - end; - {'EXIT', _} -> - ignore - end, - {noreply, S}; - - 'Shift_L' -> - {noreply, S}; - 'Shift_R' -> - {noreply, S}; - 'Caps_Lock' -> - {noreply, S}; - _ -> - io:format("~p: ignored: ~p~n", [?MODULE, KeySym]), - {noreply, S} - end; -handle_info({gs, _Obj, configure, [], [W, H | _]}, S) -> - gs:config(S#state.packer, [{width, W},{height, H}]), - S2 = S#state{width = W, height = H}, - {noreply, S2}; -handle_info({'EXIT', Pid, Reason}, S) -> - if - Pid =:= S#state.parent_pid -> - unlink(Pid), - {stop, Reason, S}; - true -> - {noreply, S} - end; -handle_info(Info, S) -> - ok = error_logger:format("~p(~p): handle_info(~p, ~p)~n", - [?MODULE, self(), Info, S]), - {noreply, S}. - -%%---------------------------------------------------------------------- -%% Func: terminate/2 -%% Purpose: Shutdown the server -%% Returns: any (ignored by gen_server) -%%---------------------------------------------------------------------- - -terminate(_Reason, _S) -> - ignore. - -%%---------------------------------------------------------------------- -%% Func: code_change/3 -%% Purpose: Convert process state when code is changed -%% Returns: {ok, NewState} -%%---------------------------------------------------------------------- - -code_change(_OldVsn, S, _Extra) -> - {ok, S}. - -%%%---------------------------------------------------------------------- -%%% Handle graphics -%%%---------------------------------------------------------------------- - -create_window(S) -> - H = S#state.height, - W = S#state.width, - Name = S#state.active_filter, - Title = lists:concat([?MODULE, " (filter: ", Name, ")"]), - WinOpt = [{title, Title}, {configure, true}, - {width, W}, {height, H}], - GS = gs:start(), - Win = gs:window(GS, WinOpt), - Bar = gs:menubar(Win, []), - create_file_menu(Bar), - PackerOpt = [{packer_x, [{stretch, 1}]}, - {packer_y, [{stretch, 1}, {fixed, 25}]}, - {x, 0}, {y, 25}], - Packer = gs:frame(Win, PackerOpt), - EditorOpt = [{pack_xy, {1, 1}}, {vscroll, right}, {hscroll, bottom}, - {wrap, none}, - {bg, lightblue}, {font, {courier, 12}}], - Editor = gs:editor(Packer, EditorOpt), - FilteredEvent = config_editor(Editor, S), - S2 = S#state{win = Win, packer = Packer, filtered_event = FilteredEvent}, - create_hide_menu(Bar, S2), - create_search_menu(Bar, S2), - create_filter_menu(Bar, S#state.filters), - gs:config(Packer, [{width, W}, {height, H}]), - gs:config(Win, [{map,true}, {keypress, true}]), - S2. - -create_file_menu(Bar) -> - Button = gs:menubutton(Bar, [{label, {text, "File"}}]), - Menu = gs:menu(Button, []), - gs:menuitem(close, Menu, [{label, {text,"Close (c)"}}]), - gs:menuitem(save, Menu, [{label, {text,"Save"}}]). - -create_filter_menu(Bar, Filters) -> - Button = gs:menubutton(Bar, [{label, {text, "Filters"}}]), - Menu = gs:menu(Button, []), - gs:menuitem(Menu, [{label, {text, "Select Filter"}}, {bg, lightblue}, {enable, false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - Item = fun(F, N) when F#filter.name =:= ?DEFAULT_FILTER_NAME-> - Label = lists:concat([pad_string(F#filter.name, 20), "(0)"]), - gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]), - N + 1; - (F, N) -> - Name = F#filter.name, - Label = lists:concat([pad_string(Name, 20), "(", N, ")"]), - gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]), - N + 1 - end, - Filters2 = lists:keysort(#filter.name, Filters), - lists:foldl(Item, 1, Filters2), - Menu. - -create_hide_menu(Bar, S) -> - Button = gs:menubutton(Bar, [{label, {text, "Hide"}}]), - Menu = gs:menu(Button, []), - E = S#state.filtered_event, - From = E#event.from, - To = E#event.to, - if - S#state.viewer_pid =:= undefined -> - ignore; - From =:= To -> - gs:menuitem(Menu, [{label, {text, "Hide actor in Viewer "}}, {bg, lightblue}, {enable, false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem({hide, [From]}, Menu, [{label, {text,"From=To (f|t|b)"}}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem(Menu, [{label, {text, "Show actor in Viewer "}}, {bg, lightblue}, {enable, false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem({show, [From]}, Menu, [{label, {text,"From=To (F|T|B)"}}]); - true -> - gs:menuitem(Menu, [{label, {text, "Hide actor in Viewer "}}, {bg, lightblue}, {enable, false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem({hide, [From]}, Menu, [{label, {text,"From (f)"}}]), - gs:menuitem({hide, [To]}, Menu, [{label, {text,"To (t)"}}]), - gs:menuitem({hide, [From, To]}, Menu, [{label, {text,"Both (b)"}}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem(Menu, [{label, {text, "Show actor in Viewer "}}, {bg, lightblue}, {enable, false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem({show, [From]}, Menu, [{label, {text,"From (F)"}}]), - gs:menuitem({show, [To]}, Menu, [{label, {text,"To (T)"}}]), - gs:menuitem({show, [From, To]}, Menu, [{label, {text,"Both (B)"}}]) - end. - -create_search_menu(Bar, S) -> - Button = gs:menubutton(Bar, [{label, {text, "Search"}}]), - Menu = gs:menu(Button, []), - E = S#state.filtered_event, - From = E#event.from, - To = E#event.to, - gs:menuitem(Menu, [{label, {text, "Search in Viewer "}}, - {bg, lightblue}, {enable, false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - if - S#state.viewer_pid =:= undefined -> - S; - From =:= To -> - Key = et_collector:make_key(S#state.event_order, E), - ModeS = {search_actors, forward, Key, [From]}, - ModeR = {search_actors, reverse, Key, [From]}, - gs:menuitem({mode, ModeS}, Menu, [{label, {text,"Forward from this event (s)"}}]), - gs:menuitem({mode, ModeR}, Menu, [{label, {text,"Reverse from this event (r)"}}]); - true -> - Key = et_collector:make_key(S#state.event_order, E), - ModeS = {search_actors, forward, Key, [From, To]}, - ModeR = {search_actors, reverse, Key, [From, To]}, - gs:menuitem({mode, ModeS}, Menu, [{label, {text,"Forward from this event (s)"}}]), - gs:menuitem({mode, ModeR}, Menu, [{label, {text,"Reverse from this event (r)"}}]) - end, - gs:menuitem({mode, all}, Menu, [{label, {text,"Abort search. Display all (a)"}}]). - -config_editor(Editor, S) -> - Event = S#state.event, - Name = S#state.active_filter, - {value, F} = lists:keysearch(Name, #filter.name, S#state.filters), - FilterFun = F#filter.function, - case catch FilterFun(Event) of - true -> - do_config_editor(Editor, Event, lightblue, S#state.event_order); - {true, Event2} when is_record(Event2, event) -> - do_config_editor(Editor, Event2, lightblue, S#state.event_order); - false -> - do_config_editor(Editor, Event, red, S#state.event_order); - Bad -> - Contents = {bad_filter, Name, Bad}, - BadEvent = Event#event{contents = Contents}, - do_config_editor(Editor, BadEvent, red, S#state.event_order) - end. - -do_config_editor(Editor, Event, Colour, TsKey) -> - String = event_to_string(Event, TsKey), - gs:config(Editor, {insert, {'end', String}}), - gs:config(Editor, {enable, false}), - gs:config(Editor, {bg, Colour}), - Event. - -%%%---------------------------------------------------------------------- -%%% String handling -%%%---------------------------------------------------------------------- - -term_to_string(Term) -> - case catch io_lib:format("~s", [Term]) of - {'EXIT', _} -> io_lib:format("~p", [Term]); - GoodString -> GoodString - end. - -now_to_string({Mega, Sec, Micro} = Now) - when is_integer(Mega), is_integer(Sec), is_integer(Micro) -> - {{Y, Mo, D}, {H, Mi, S}} = calendar:now_to_universal_time(Now), - lists:concat([Y, "-", Mo, "-", D, " ", H, ".", Mi, ".", S, ".", Micro]); -now_to_string(Other) -> - term_to_string(Other). - -event_to_string(Event, TsKey) -> - ReportedTs = Event#event.trace_ts, - ParsedTs = Event#event.event_ts, - Deep = - ["DETAIL LEVEL: ", term_to_string(Event#event.detail_level), - "\nLABEL: ", term_to_string(Event#event.label), - case Event#event.from =:= Event#event.to of - true -> - ["\nACTOR: ", term_to_string(Event#event.from)]; - false -> - ["\nFROM: ", term_to_string(Event#event.from), - "\nTO: ", term_to_string(Event#event.to)] - end, - case ReportedTs =:= ParsedTs of - true -> - ["\nPARSED: ", now_to_string(ParsedTs)]; - false -> - case TsKey of - trace_ts -> - ["\nTRACE_TS: ", now_to_string(ReportedTs), - "\nEVENT_TS: ", now_to_string(ParsedTs)]; - event_ts -> - ["\nEVENT_TS: ", now_to_string(ParsedTs), - "\nTRACE_TS: ", now_to_string(ReportedTs)] - end - end, - "\nCONTENTS:\n\n", term_to_string(Event#event.contents)], - lists:flatten(Deep). - -pad_string(Atom, MinLen) when is_atom(Atom) -> - pad_string(atom_to_list(Atom), MinLen); -pad_string(String, MinLen) when is_integer(MinLen), MinLen >= 0 -> - Len = length(String), - case Len >= MinLen of - true -> - String; - false -> - String ++ lists:duplicate(MinLen - Len, $ ) - end. - -send_viewer_event(S, Event) -> - case S#state.viewer_pid of - ViewerPid when is_pid(ViewerPid) -> - ViewerPid ! {et, Event}; - undefined -> - ignore - end. diff --git a/lib/et/src/et_gs_viewer.erl b/lib/et/src/et_gs_viewer.erl deleted file mode 100644 index ce8634d09f..0000000000 --- a/lib/et/src/et_gs_viewer.erl +++ /dev/null @@ -1,1498 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2009-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%---------------------------------------------------------------------- -%% Purpose: Displays a sequence chart for trace events (messages/actions) -%%---------------------------------------------------------------------- - --module(et_gs_viewer). --compile([{nowarn_deprecated_function,{gs,canvas,2}}, - {nowarn_deprecated_function,{gs,checkbutton,3}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,frame,2}}, - {nowarn_deprecated_function,{gs,line,2}}, - {nowarn_deprecated_function,{gs,menu,2}}, - {nowarn_deprecated_function,{gs,menu,3}}, - {nowarn_deprecated_function,{gs,menubar,2}}, - {nowarn_deprecated_function,{gs,menubutton,2}}, - {nowarn_deprecated_function,{gs,menubutton,3}}, - {nowarn_deprecated_function,{gs,menuitem,2}}, - {nowarn_deprecated_function,{gs,menuitem,3}}, - {nowarn_deprecated_function,{gs,scale,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,text,2}}, - {nowarn_deprecated_function,{gs,window,2}}]). - --behaviour(gen_server). - -%% External exports --export([start_link/1]). - -%% gen_server callbacks --export([init/1, terminate/2, code_change/3, - handle_call/3, handle_cast/2, handle_info/2]). - --include("../include/et.hrl"). --include("et_internal.hrl"). - --define(unknown, "UNKNOWN"). - --record(state, - {parent_pid, % Pid of parent process - collector_pid, % Pid of collector process - event_order, % Field to be used as primary key - trace_pattern, % Collector trace pattern - active_filter, % Name of the active filter - filters, % List of possible filters - selected_actor, % Actor selected by user - first_event, % Key of first event (regardless of visibility) - last_event, % Key of last event (regardless of visibility) - max_events, % Maximum number of shown events - events, % Queue containg all event keys (regardless of visibility) - max_actors, % Maximum number of shown actors - actors, % List of known actors - refresh_needed, % Refresh is needed in order to show all actors - display_mode, % Display all or only matching actors - detail_level, % Show only events with lesser detail level - hide_actions, % Hide/show events where to == from actor (bool) - hide_unknown, % Hide/show events with unknown actor (bool) - is_suspended, % Suspend viewer updates (bool) - title, % GUI: Window title - win, % GUI: Window object - menubar, % GUI: Menu bar object - packer, % GUI: Packer object - width, % GUI: Window width - height, % GUI: Window height - scale, % GUI: Scaling factor on canvas - font, % GUI: Font to be used on text labels - canvas_width, % GUI: Canvas width - canvas_height, % GUI: Canvas height - canvas, % GUI: Canvas object - y_pos}). % GUI: Current y position on canvas - --record(actor, {name, string}). - --define(initial_x, 10). --define(incr_x, 60). --define(initial_y, 15). --define(incr_y, 15). - -%%%---------------------------------------------------------------------- -%%% Client side -%%%---------------------------------------------------------------------- - -start_link(Options) -> - case parse_opt(Options, default_state(), []) of - {ok, S, CollectorOpt} -> - case S#state.collector_pid of - CollectorPid when is_pid(CollectorPid) -> - case gen_server:start_link(?MODULE, [S], []) of - {ok, Pid} when S#state.parent_pid =/= self() -> - unlink(Pid), - {ok, Pid}; - Other -> - Other - end; - undefined -> - case et_collector:start_link(CollectorOpt) of - {ok, CollectorPid} -> - S2 = S#state{collector_pid = CollectorPid}, - case gen_server:start_link(?MODULE, [S2], []) of - {ok, Pid} when S#state.parent_pid =/= self() -> - unlink(Pid), - {ok, Pid}; - Other -> - Other - end; - {error, Reason} -> - {error, {et_collector, Reason}} - end - end; - {error, Reason} -> - {error, Reason} - end. - -default_state() -> - #state{parent_pid = self(), - collector_pid = undefined, - detail_level = ?detail_level_max, - active_filter = ?DEFAULT_FILTER_NAME, - filters = [?DEFAULT_FILTER], - event_order = trace_ts, - is_suspended = false, - max_events = 100, - first_event = first, - last_event = first, - events = queue_new(), - max_actors = 5, - actors = [create_actor(?unknown)], - selected_actor = ?unknown, - hide_actions = false, - hide_unknown = false, - refresh_needed = false, - display_mode = all, - scale = 2, - canvas_height = 0, - canvas_width = 0, - width = 800, - height = 600}. - -parse_opt([], S, CollectorOpt) -> - {ok, S, [{parent_pid, S#state.parent_pid} | CollectorOpt]}; -parse_opt([H | T], S, CollectorOpt) -> - case H of - {parent_pid, Parent} when Parent =:= undefined -> - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S#state{parent_pid = Parent}, CollectorOpt2); - {parent_pid, Parent} when is_pid(Parent) -> - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S#state{parent_pid = Parent}, CollectorOpt2); - {title, Title} -> - parse_opt(T, S#state{title = name_to_string(Title)}, CollectorOpt); - {detail_level, Level} when is_integer(Level), - Level >= ?detail_level_min, - Level =< ?detail_level_max -> - parse_opt(T, S#state{detail_level = Level}, CollectorOpt); - {detail_level, max} -> - parse_opt(T, S#state{detail_level = ?detail_level_max}, CollectorOpt); - {detail_level, min} -> - parse_opt(T, S#state{detail_level = ?detail_level_min}, CollectorOpt); - {is_suspended, true} -> - parse_opt(T, S#state{is_suspended = true}, CollectorOpt); - {is_suspended, false} -> - parse_opt(T, S#state{is_suspended = false}, CollectorOpt); - {scale, Scale} when is_integer(Scale), Scale > 0 -> - parse_opt(T, S#state{scale = Scale}, CollectorOpt); - {width, W} when is_integer(W), W > 0 -> - parse_opt(T, S#state{width = W, canvas_width = W}, CollectorOpt); - {height, WH} when is_integer(WH), WH > 0 -> - parse_opt(T, S#state{height = WH, canvas_height = WH}, CollectorOpt); - {collector_pid, Pid} when is_pid(Pid) -> - parse_opt(T, S#state{collector_pid = Pid}, CollectorOpt); - {collector_pid, undefined} -> - parse_opt(T, S#state{collector_pid = undefined}, CollectorOpt); - {active_filter, Name} when is_atom(Name) -> - parse_opt(T, S#state{active_filter = Name}, CollectorOpt); - {event_order, trace_ts} -> %% BUGBUG: Verify event_order with collector - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S#state{event_order = trace_ts}, CollectorOpt2); - {event_order, event_ts} -> %% BUGBUG: Verify event_order with collector - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S#state{event_order = event_ts}, CollectorOpt2); - {trace_port, _Port} -> - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S, CollectorOpt2); - {trace_max_queue, _Queue} -> - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S, CollectorOpt2); - {trace_pattern, _Pattern} -> - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S, CollectorOpt2); - {trace_global, _Boolean} -> - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S, CollectorOpt2); - {trace_client, _Client} -> - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S, CollectorOpt2); - {dict_insert, {filter, Name}, Fun} -> - if - is_atom(Name), is_function(Fun) -> - F = #filter{name = Name, function = Fun}, - Filters = lists:keydelete(Name, #filter.name, S#state.filters), - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S#state{filters = Filters ++ [F]}, CollectorOpt2); - true -> - {error, {bad_option, H}} - end; - {dict_insert, {subscriber, Pid}, _Val} -> - if - is_pid(Pid) -> - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S, CollectorOpt2); - true -> - {error, {bad_option, H}} - end; - {dict_insert, _Key, _Val} -> - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S, CollectorOpt2); - {dict_delete, {filter, Name}} -> - Filters = lists:keydelete(Name, #filter.name, S#state.filters), - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S#state{filters = Filters}, CollectorOpt2); - {dict_delete, _Key} -> - CollectorOpt2 = [H | CollectorOpt], - parse_opt(T, S, CollectorOpt2); - {max_events, Max} when is_integer(Max), Max > 0-> - parse_opt(T, S#state{max_events = Max}, CollectorOpt); - {max_events, Max} when Max =:= infinity -> - parse_opt(T, S#state{max_events = Max}, CollectorOpt); - {max_actors, Max} when is_integer(Max), Max >= 0-> - parse_opt(T, S#state{max_actors = Max}, CollectorOpt); - {max_actors, Max} when Max =:= infinity -> - parse_opt(T, S#state{max_actors = Max}, CollectorOpt); - {actors, ActorNames} when is_list(ActorNames) -> - ActorNames2 = - case lists:member(?unknown, ActorNames) of - false -> [?unknown | ActorNames]; - true -> ActorNames - end, - Actors = [create_actor(Name) || Name <- ActorNames2], - parse_opt(T, S#state{actors = Actors}, CollectorOpt); - {first_event, First} -> - parse_opt(T, S#state{first_event = First}, CollectorOpt); - {hide_unknown, Bool} when Bool =:= false -> - parse_opt(T, S#state{hide_unknown = Bool}, CollectorOpt); - {hide_unknown, Bool} when Bool =:= true -> - parse_opt(T, S#state{hide_unknown = Bool}, CollectorOpt); - {hide_actions, Bool} when Bool =:= false -> - parse_opt(T, S#state{hide_actions = Bool}, CollectorOpt); - {hide_actions, Bool} when Bool =:= true -> - parse_opt(T, S#state{hide_actions = Bool}, CollectorOpt); - {display_mode, Mode = all} -> - parse_opt(T, S#state{display_mode = Mode}, CollectorOpt); - {display_mode, Mode = {search_actors, Dir, _Key, Actors}} when is_list(Actors), Dir =:= forward -> - parse_opt(T, S#state{display_mode = Mode}, CollectorOpt); - {display_mode, Mode = {search_actors, Dir, _Key, Actors}} when is_list(Actors), Dir =:= reverse -> - parse_opt(T, S#state{display_mode = Mode}, CollectorOpt); - - Bad -> - {error, {bad_option, Bad}} - end; -parse_opt(BadList, _S, _CollectorOpt) -> - {error, {bad_option_list, BadList}}. - -do_dict_insert({filter, Name}, Fun, S) when is_atom(Name), is_function(Fun) -> - F = #filter{name = Name, function = Fun}, - Filters = lists:keydelete(Name, #filter.name, S#state.filters), - Filters2 = lists:keysort(#filter.name, [F | Filters]), - gs:destroy(filter_menu), - create_filter_menu(S#state.active_filter, Filters2), - S#state{filters = Filters2}; -do_dict_insert(_Key, _Val, S) -> - %% ok = error_logger:format("~p(~p): handle_info({et, {dict_insert, ~p, ~p}})~n", - %% [?MODULE, self(), Key, Val]), - S. - -do_dict_delete({filter, Name}, S) when is_atom(Name), Name =/= S#state.active_filter -> - Filters = lists:keydelete(Name, #filter.name, S#state.filters), - gs:destroy(filter_menu), - create_filter_menu(S#state.active_filter, Filters), - S#state{filters = Filters}; -do_dict_delete(_Key, S) -> - %% ok = error_logger:format("~p(~p): handle_info({et, {dict_delete, ~p}})~n", - %% [?MODULE, self(), Key]), - S. - -%%%---------------------------------------------------------------------- -%%% Callback functions from gen_server -%%%---------------------------------------------------------------------- - -%%---------------------------------------------------------------------- -%% Func: init/1 -%% Returns: {ok, State} | -%% {ok, State, Timeout} | -%% ignore | -%% {stop, Reason} -%%---------------------------------------------------------------------- - -init([S]) when is_record(S, state) -> - process_flag(trap_exit, true), - InitialTimeout = 0, - case S#state.parent_pid of - undefined -> - ignore; - Pid when is_pid(Pid) -> - link(Pid) - end, - et_collector:dict_insert(S#state.collector_pid, - {subscriber, self()}, - ?MODULE), - {ok, create_main_window(S), InitialTimeout}. - -%%---------------------------------------------------------------------- -%% Func: handle_call/3 -%% Returns: {reply, Reply, State} | -%% {reply, Reply, State, Timeout} | -%% {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, Reply, State} | (terminate/2 is called) -%% {stop, Reason, State} (terminate/2 is called) -%%---------------------------------------------------------------------- - -handle_call(get_collector_pid, _From, S) -> - Reply = S#state.collector_pid, - reply(Reply, S); -handle_call(stop, _From, S) -> - gs:destroy(S#state.win), - {stop, shutdown, ok, S}; -handle_call(Request, From, S) -> - ok = error_logger:format("~p(~p): handle_call(~p, ~p, ~p)~n", - [?MODULE, self(), Request, From, S]), - Reply = {error, {bad_request, Request}}, - reply(Reply, S). - -%%---------------------------------------------------------------------- -%% Func: handle_cast/2 -%% Returns: {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, State} (terminate/2 is called) -%%---------------------------------------------------------------------- - -handle_cast(Msg, S) -> - ok = error_logger:format("~p(~p): handle_cast(~p, ~p)~n", - [?MODULE, self(), Msg, S]), - noreply(S). - -%%---------------------------------------------------------------------- -%% Func: handle_info/2 -%% Returns: {noreply, State} | -%% {noreply, State, Timeout} | -%% {stop, Reason, State} (terminate/2 is called) -%%---------------------------------------------------------------------- - -handle_info({et, {more_events, _Size}}, S) -> - noreply(S); -handle_info({et, {insert_actors, ActorNames}}, S) when is_list(ActorNames) -> - Fun = fun(N, Actors) -> - case lists:keymember(N, #actor.name, Actors) of - true -> Actors; - false -> Actors ++ [create_actor(N)] - end - end, - Actors = lists:foldl(Fun, S#state.actors, ActorNames), - S2 = refresh_main_window(S#state{actors = Actors}), - noreply(S2); -handle_info({et, {delete_actors, ActorNames}}, S) when is_list(ActorNames)-> - Fun = fun(N, Actors) when N =:= ?unknown -> - Actors; - (N, Actors) -> - lists:keydelete(N, #actor.name, Actors) - end, - New = lists:foldl(Fun, S#state.actors, ActorNames), - S2 = refresh_main_window(S#state{actors = New}), - noreply(S2); -handle_info({et, {dict_insert, Key, Val}}, S) -> - S2 = do_dict_insert(Key, Val, S), - noreply(S2); -handle_info({et, {dict_delete, Key}}, S) -> - S2 = do_dict_delete(Key, S), - noreply(S2); -handle_info({et, first}, S) -> - S2 = scroll_first(S), - noreply(S2); -handle_info({et, prev}, S) -> - S2 = scroll_prev(S), - noreply(S2); -handle_info({et, next}, S) -> - S2 = scroll_next(S), - noreply(S2); -handle_info({et, last}, S) -> - S2 = scroll_last(S), - noreply(S2); -handle_info({et, refresh}, S) -> - S2 = refresh_main_window(S), - noreply(S2); -handle_info({et, {display_mode, Mode}}, S) -> - S2 = change_display_mode(Mode, S), - noreply(S2); -handle_info({et, close}, S) -> - gs:destroy(S#state.win), - {stop, shutdown, S}; -handle_info({gs, Button, click, Data, Other} = Click, S) -> - CollectorPid = S#state.collector_pid, - case Button of - close -> - gs:destroy(S#state.win), - {stop, shutdown, S}; - suspended -> - case Other of - [_Text, _Group, Bool | _] when Bool =:= true -> - S2 = do_suspend(S), - noreply(S2); - [_Text, _Group, Bool | _] when Bool =:= false -> - S2 = do_resume(S), - noreply(S2); - _ -> - click_error(Click, S), - noreply(S) - end; - hide_actions -> - case Other of - [_Text, _Group, Bool | _] when Bool =:= true -> - S2 = refresh_main_window(S#state{hide_actions = Bool}), - noreply(S2); - [_Text, _Group, Bool | _] when Bool =:= false -> - S2 = refresh_main_window(S#state{hide_actions = Bool}), - noreply(S2); - _ -> - click_error(Click, S), - noreply(S) - end; - hide_unknown -> - case Other of - [_Text, _Group, Bool | _] when Bool =:= true -> - S2 = refresh_main_window(S#state{hide_unknown = Bool}), - noreply(S2); - [_Text, _Group, Bool | _] when Bool =:= false -> - S2 = refresh_main_window(S#state{hide_unknown = Bool}), - noreply(S2); - _ -> - click_error(Click, S), - noreply(S) - end; - up -> - S2 = scroll_up(S), - noreply(S2); - down -> - S2 = scroll_down(S), - noreply(S2); - first -> - S2 = scroll_first(S), - noreply(S2); - prev -> - S2 = scroll_prev(S), - noreply(S2); - next -> - S2 = scroll_next(S), - noreply(S2); - last -> - S2 = scroll_last(S), - noreply(S2); - refresh -> - S2 = refresh_main_window(S), - noreply(S2); - {display_mode, Mode} -> - S2 = change_display_mode(Mode, S), - noreply(S2); - close_all -> - close_all(S); - close_all_others -> - close_all_others(S); - first_all -> - et_collector:multicast(CollectorPid, first), - noreply(S); - prev_all -> - et_collector:multicast(CollectorPid, prev), - noreply(S); - next_all -> - et_collector:multicast(CollectorPid, next), - noreply(S); - last_all -> - et_collector:multicast(CollectorPid, last), - noreply(S); - refresh_all -> - et_collector:multicast(CollectorPid, refresh), - noreply(S); - clear_all -> - et_collector:clear_table(CollectorPid), - et_collector:multicast(CollectorPid, refresh), - noreply(S); - load_all -> - et_collector:start_trace_client(CollectorPid, event_file, "et_viewer.log"), - noreply(S); - save_all -> - et_collector:save_event_file(CollectorPid, - "et_viewer.log", - [existing, write, keep]), - noreply(S); - {open_viewer, Scale} -> - Actors = [A#actor.name || A <- S#state.actors], - open_viewer(Scale, S#state.active_filter, Actors, S), - noreply(S); - _Level when Data =:= detail_level, is_integer(hd(Other)), - hd(Other) >= ?detail_level_min, - hd(Other) =< ?detail_level_max -> - S2 = S#state{detail_level = hd(Other)}, - noreply(S2); - _PopupMenuItem when is_record(Data, filter) -> - open_viewer(S#state.scale, Data#filter.name, [?unknown], S), - noreply(S); - _ -> - click_error(Click, S), - noreply(S) - end; -handle_info({gs, _Obj, destroy,_, _}, S) -> - gs:destroy(S#state.win), - {stop, shutdown, S}; -handle_info({gs, _Obj, buttonpress, _, [_Button, X, Y | _]}, S) -> - S3 = - case y_to_n(Y, S) of - actor -> - %% Actor click - case S#state.actors of - [] -> - S; - _ -> - N = x_to_n(X, S), - A = lists:nth(N, S#state.actors), - S#state{selected_actor = A} - end; - {event, N} -> - %% Event click - List = queue_to_list(S#state.events), - S2 = S#state{events = list_to_queue(List)}, - - Key = lists:nth(N, List), - Pid = S#state.collector_pid, - Fun = fun create_contents_window/2, - case et_collector:iterate(Pid, Key, -1) of - Prev when Prev =:= Key -> - et_collector:iterate(Pid, first, 1, Fun, S2); - Prev -> - et_collector:iterate(Pid, Prev, 1, Fun, S2) - end - end, - noreply(S3); -handle_info({gs, _Obj, buttonrelease, _, [_Button, X, Y | _]}, S) -> - S2 = - case y_to_n(Y, S) of - actor -> - %% Actor click - case S#state.actors of - [] -> - S; - Actors -> - N = x_to_n(X, S), - New = lists:nth(N, S#state.actors), - Old = S#state.selected_actor, - case New#actor.name =:= Old#actor.name of - true -> - A = S#state.selected_actor, - toggle_search_for_actor(A#actor.name, S); - false -> - move_actor(Old, New, Actors, S) - end - end; - {event, _N} -> - %% Event click ignored - S - end, - noreply(S2); -handle_info({gs, _Obj, keypress, _, [KeySym, _Keycode, _Shift, _Control | _]} = Key, S) -> - case KeySym of - 'c' -> - close_all_others(S); - 'C' -> - close_all(S); - 'Up' -> - S2 = scroll_up(S), - noreply(S2); - 'Down' -> - S2 = scroll_down(S), - noreply(S2); - 'f' -> - S2 = scroll_first(S), - noreply(S2); - 'p' -> - S2 = scroll_prev(S), - noreply(S2); - 'Prior' -> - S2 = scroll_prev(S), - noreply(S2); - 'n' -> - S2 = scroll_next(S), - noreply(S2); - 'Next' -> - S2 = scroll_next(S), - noreply(S2); - 'l' -> - S2 = scroll_last(S), - noreply(S2); - 'r' -> - S2 = refresh_main_window(S), - noreply(S2); - 'F' -> - et_collector:multicast(S#state.collector_pid, first), - noreply(S); - 'P' -> - et_collector:multicast(S#state.collector_pid, prev), - noreply(S); - 'N' -> - et_collector:multicast(S#state.collector_pid, next), - noreply(S); - 'L' -> - et_collector:multicast(S#state.collector_pid, last), - noreply(S); - 'R' -> - et_collector:multicast(S#state.collector_pid, refresh), - noreply(S); - - 'a' -> - S2 = S#state{display_mode = all}, - S3 = refresh_main_window(S2), - noreply(S3); - - 'equal' -> - Scale = S#state.scale, - Actors = [A#actor.name || A <- S#state.actors], - open_viewer(Scale, S#state.active_filter, Actors, S), - noreply(S); - 'plus' -> - Scale = S#state.scale + 1, - Actors = [A#actor.name || A <- S#state.actors], - open_viewer(Scale, S#state.active_filter, Actors, S), - noreply(S); - 'minus' -> - case S#state.scale of - 1 -> - gs:config(S#state.canvas, beep); - Scale -> - Actors = [A#actor.name || A <- S#state.actors], - open_viewer(Scale - 1, S#state.active_filter, Actors, S) - end, - noreply(S); - 0 -> - case lists:keysearch(?DEFAULT_FILTER_NAME, #filter.name, S#state.filters) of - {value, F} when is_record(F, filter) -> - open_viewer(S#state.scale, F#filter.name, [?unknown], S); - false -> - gs:config(S#state.canvas, beep) - end, - noreply(S); - Int when is_integer(Int), Int > 0, Int =< 9 -> - case catch lists:nth(Int, S#state.filters) of - F when is_record(F, filter) -> - open_viewer(S#state.scale, F#filter.name, [?unknown], S); - {'EXIT', _} -> - gs:config(S#state.canvas, beep) - end, - noreply(S); - - 'Shift_L' -> - noreply(S); - 'Shift_R' -> - noreply(S); - 'Caps_Lock' -> - noreply(S); - - _ -> - click_error(Key, S), - noreply(S) - end; -handle_info({gs, _Obj,configure, [], [W, H | _]}, S) -> - gs:config(S#state.packer, [{width, W}, {height, H}]), - S2 = S#state{width = W, height = H}, - noreply(S2); -handle_info(timeout, S) -> - Try = - case S#state.display_mode of - {search_actors, reverse, _, _} -> - -10; - _ -> - 10 - end, - if - S#state.is_suspended =:= true -> - {noreply, S, infinity}; - S#state.max_events =:= infinity -> - display_more_events(Try, S); - true -> - Needed = S#state.max_events - queue_length(S#state.events), - if - Needed =< 0 -> {noreply, S, infinity}; - Needed > 10 -> display_more_events(Try, S); - Needed =< 10 -> display_more_events(Needed, S) - end - end; - -handle_info({'EXIT', Pid, Reason}, S) -> - if - Pid =:= S#state.collector_pid -> - unlink(Pid), - gs:destroy(S#state.win), - {stop, Reason, S}; - Pid =:= S#state.parent_pid -> - unlink(Pid), - gs:destroy(S#state.win), - {stop, Reason, S}; - true -> - noreply(S) - end; -handle_info(Info, S) -> - ok = error_logger:format("~p(~p): handle_info(~p, ~p)~n", - [?MODULE, self(), Info, S]), - noreply(S). - -%%---------------------------------------------------------------------- -%% Func: terminate/2 -%% Purpose: Shutdown the server -%% Returns: any (ignored by gen_server) -%%---------------------------------------------------------------------- - -terminate(_Reason, _S) -> - ignore. - -%%---------------------------------------------------------------------- -%% Func: code_change/3 -%% Purpose: Convert process state when code is changed -%% Returns: {ok, NewState} -%%---------------------------------------------------------------------- - -code_change(_OldVsn, S, _Extra) -> - {ok, S}. - -%%%---------------------------------------------------------------------- -%%% Handle suspend/resume -%%%---------------------------------------------------------------------- - -reply(Reply, S) -> - case queue_length(S#state.events) of - _ when S#state.is_suspended =:= true -> - {reply, Reply, S, infinity}; - _ when S#state.max_events =:= infinity -> - {reply, Reply, S, 500}; - N when N >= S#state.max_events -> - {reply, Reply, S, infinity}; - _ -> - {reply, Reply, S, 0} - end. - -noreply(S) -> - case queue_length(S#state.events) of - _ when S#state.is_suspended =:= true -> - {noreply, S, infinity}; - _ when S#state.max_events =:= infinity -> - {noreply, S, 500}; - N when N >= S#state.max_events -> - {noreply, S, infinity}; - _ -> - {noreply, S, 0} - end. - -do_suspend(S) -> - config_suspend(S#state{is_suspended = true}). - -do_resume(S) -> - config_suspend(S#state{is_suspended = false}). - -config_suspend(S) -> - Suspended = S#state.is_suspended, - gs:config(refresh, [{enable, not Suspended}]), - gs:config(refresh_all, [{enable, not Suspended}]), - gs:config(clear_all, [{enable, not Suspended}]), - S. - -refresh_main_window(S) -> - Pid = S#state.collector_pid, - Key = S#state.first_event, - case et_collector:iterate(Pid, Key, -1) of - Prev when Prev =:= Key -> - scroll_first(S); - _Prev -> - S2 = S#state{last_event = S#state.first_event}, - clear_canvas(S2) - end. - -scroll_first(S) -> - S2 = S#state{first_event = first, last_event = first}, - clear_canvas(S2). - -scroll_prev(S) -> - Try = - case S#state.max_events of - infinity -> -10; - Max -> -Max - end, - Key = et_collector:iterate(S#state.collector_pid, S#state.first_event, Try), - S2 = S#state{first_event = Key, last_event = Key}, - clear_canvas(S2). - -scroll_next(S) -> - S2 = S#state{first_event = S#state.last_event}, - clear_canvas(S2). - -scroll_up(S) -> - Key = et_collector:iterate(S#state.collector_pid, S#state.first_event, -5), - S2 = S#state{first_event = Key, last_event = Key}, - clear_canvas(S2). - -scroll_down(S) -> - Key = et_collector:iterate(S#state.collector_pid, S#state.first_event, 5), - S2 = S#state{first_event = Key, last_event = Key}, - clear_canvas(S2). - -scroll_last(S) -> - S2 = S#state{first_event = last, last_event = last}, - clear_canvas(S2). - -change_display_mode(Mode, S) -> - case Mode of - all -> - S2 = S#state{display_mode = Mode}, - refresh_main_window(S2); - {search_actors, _Dir, _Key, []} -> - S2 = S#state{display_mode = all}, - refresh_main_window(S2); - {search_actors, _Dir, Key, Actors} when is_list(Actors) -> - Pid = S#state.collector_pid, - Prev = et_collector:iterate(Pid, Key, -1), - S2 = S#state{first_event = Prev, - last_event = Prev, - display_mode = Mode}, - clear_canvas(S2) - end. - -close_all(S) -> - et_collector:multicast(S#state.collector_pid, close), - timer:sleep(timer:seconds(1)), - spawn(et_collector, stop, [S#state.collector_pid]), - gs:destroy(S#state.win), - {stop, shutdown, S}. - -close_all_others(S) -> - Fun = - fun({{subscriber, Pid}, _}) -> - if - Pid =:= self() -> - ignore; - true -> - unlink(Pid), - Pid ! {et, close} - end - end, - All = et_collector:dict_match(S#state.collector_pid, - {{subscriber, '_'}, '_'}), - lists:foreach(Fun, All), - noreply(S). - -click_error(Click, S) -> - gs:config(S#state.canvas, beep), - io:format("~p: ignored: ~p~n", [?MODULE, Click]). - -%%%---------------------------------------------------------------------- -%%% Clone viewer -%%%---------------------------------------------------------------------- - -open_viewer(Scale, FilterName, Actors, S) -> - Filters = [{dict_insert, {filter, F#filter.name}, F#filter.function} - || F <- S#state.filters], - Options = - [{parent_pid, S#state.parent_pid}, - {title, S#state.title}, - {collector_pid, S#state.collector_pid}, - {is_suspended, S#state.is_suspended}, - {detail_level, S#state.detail_level}, - {active_filter, FilterName}, - {event_order, S#state.event_order}, - {first_event, S#state.first_event}, - {max_events, S#state.max_events}, - {max_actors, S#state.max_actors}, - {hide_actions, S#state.hide_actions}, - {hide_unknown, S#state.hide_unknown}, - {is_suspended, S#state.is_suspended}, - {actors, Actors}, - {scale, Scale}, - {width, S#state.width}, - {height, S#state.height} | Filters], - case start_link(Options) of - {ok, ViewerPid} -> - unlink(ViewerPid), - ok; - {error, Reason} -> - ok = error_logger:format("~p: Failed to start a new window: ~p~n", - [?MODULE, Reason]) - end. - -%%%---------------------------------------------------------------------- -%%% Handle graphics -%%%---------------------------------------------------------------------- - -create_main_window(S) -> - Font = select_font(S#state.scale), - GS = gs:start(), - Name = name_to_string(S#state.active_filter), - Title = case S#state.title of - undefined -> atom_to_list(?MODULE); - Explicit -> name_to_string(Explicit) - end, - WinOpt = [{title, Title ++ " (filter: " ++ Name ++ ")"}, - {configure, true}, - {width, S#state.width}, - {height, S#state.height}], - Win = gs:window(GS, WinOpt), - Bar = gs:menubar(Win, []), - - create_file_menu(Bar), - create_viewer_menu(Bar), - create_collector_menu(Bar), - gs:menubutton(filter_button, Bar, [{label, {text, "Filter"}}]), - create_filter_menu(S#state.active_filter, S#state.filters), - create_help_menu(Bar), - - config_suspend(S), - - PackerOpt = [{packer_x, [{fixed, 5}, {fixed, 40}, {fixed, 40}, - {stretch, 1}, {fixed, 5}]}, - {packer_y, [{fixed, 30}, {fixed, 30}, - {stretch, 1}, {fixed, 30}]}, - {x, 0}, {y, 30}], - Packer = gs:frame(Win, PackerOpt), - gs:checkbutton(suspended, Packer, [{label,{text,"Freeze"}}, - {x, 10}, {y, 0}, - {width, 120}, {align, w}, - {select, S#state.is_suspended}]), - gs:checkbutton(hide_actions, Packer, [{label,{text,"Hide From=To"}}, - {x, 10}, {y, 20}, - {width, 120}, {align, w}, - {select, S#state.hide_actions}]), - gs:checkbutton(hide_unknown, Packer, [{label,{text,"Hide Unknown"}}, - {x, 10}, {y, 40}, - {width, 120}, {align, w}, - {select, S#state.hide_unknown}]), - gs:scale(Packer, [{text,"Detail Level"}, - {range, {?detail_level_min, ?detail_level_max}}, - {orient, horizontal}, - {x, 150}, {y, 0}, {height, 65}, {width, 200}, - {pos, S#state.detail_level}, {data, detail_level}]), - CanvasW = calc_canvas_width(S), - CanvasH = calc_canvas_height(S), - CanOpt = [{pack_xy, {{2, 4}, 3}}, {vscroll, right}, {hscroll, bottom}, - {scrollregion, {2, 2, CanvasW, CanvasH}}], - Canvas = gs:canvas(Packer, CanOpt), - gs:config(Canvas, [{buttonpress, true}, {buttonrelease, true}]), - gs:config(Packer, [{width, S#state.width}, {height, S#state.height}]), - gs:config(Win, [{map, true}, {keypress, true}]), - S2 = S#state{title = Title, - win = Win, font = Font, packer = Packer, - canvas_width = CanvasW, canvas_height = CanvasH, - canvas = Canvas, - y_pos = ?initial_y * S#state.scale}, - draw_all_actors(S2). - -select_font(Scale) when is_integer(Scale) -> - case Scale of - 1 -> {courier, 7}; - 2 -> {courier, 10}; - 3 -> {courier, 12}; - 4 -> {courier, 14}; - S -> {courier, S * 4} - end. - -create_file_menu(Bar) -> - Button = gs:menubutton(Bar, [{label, {text, "File"}}]), - Menu = gs:menu(Button, []), - gs:menuitem(close_all, Menu, [{label, {text, "Close Collector and all Viewers (C) "}}]), - gs:menuitem(close_all_others, Menu, [{label, {text, "Close other Viewers, but keep Collector (c)"}}]), - gs:menuitem(close, Menu, [{label, {text, "Close this Viewer, but keep Collector"}}]), - gs:menuitem(Menu, [{itemtype, separator}]), - - gs:menuitem(clear_all, Menu, [{label, {text, "Clear Collector"}}]), - gs:menuitem(load_all, Menu, [{label, {text, "Load Collector from the file \"et_viewer.log\""}}]), - gs:menuitem(save_all, Menu, [{label, {text, "Save Collector to the file \"et_viewer.log\""}}]). - -create_viewer_menu(Bar) -> - Button = gs:menubutton(Bar, [{label, {text, "Viewer"}}]), - Menu = gs:menu(Button, []), - gs:menuitem(Menu, [{label, {text, "Scroll this Viewer"}}, {bg, lightblue}, {enable,false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem(first, Menu, [{label, {text, "First (f)"}}]), - gs:menuitem(prev, Menu, [{label, {text, "Prev (p)"}}]), - gs:menuitem(next, Menu, [{label, {text, "Next (n)"}}]), - gs:menuitem(last, Menu, [{label, {text, "Last (l)"}}]), - gs:menuitem(refresh, Menu, [{label, {text, "Refresh (r)"}}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem(up, Menu, [{label, {text, "Up 5 (Up)"}}]), - gs:menuitem(down, Menu, [{label, {text, "Down 5 (Down)"}}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem(Menu, [{label, {text, "Search in this Viewer"}}, {bg, lightblue}, {enable,false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem({mode, all}, Menu, [{label, {text, "Abort search. Display all (a)"}}]). - -create_collector_menu(Bar) -> - Button = gs:menubutton(Bar, [{label, {text, "Collector"}}]), - Menu = gs:menu(Button, []), - gs:menuitem(Menu, [{label, {text, "Scroll all Viewers"}}, {bg, lightblue}, {enable,false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem(first_all, Menu, [{label, {text, "First (F)"}}]), - gs:menuitem(prev_all, Menu, [{label, {text, "Prev (P)"}}]), - gs:menuitem(next_all, Menu, [{label, {text, "Next (N)"}}]), - gs:menuitem(last_all, Menu, [{label, {text, "Last (L)"}}]), - gs:menuitem(refresh_all, Menu, [{label, {text, "Refresh (R)"}}]). - -create_filter_menu(ActiveFilterName, Filters) -> - Menu = gs:menu(filter_menu, filter_button, []), - Item = fun(F, N) when F#filter.name =:= collector -> - Label = lists:concat([pad_string(F#filter.name, 20), "(0)"]), - gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]), - N + 1; - (F, N) -> - Label = lists:concat([pad_string(F#filter.name, 20), "(", N, ")"]), - gs:menuitem(Menu, [{label, {text, Label}}, {data, F}]), - N + 1 - end, - gs:menuitem(Menu, [{label, {text, "Same Filter New Scale"}}, {bg, lightblue}, {enable,false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - {value, Filter} = lists:keysearch(ActiveFilterName, #filter.name, Filters), - Same = lists:concat([pad_string(ActiveFilterName, 20), "(=)"]), - Larger = lists:concat([pad_string(ActiveFilterName, 20), "(+)"]), - Smaller = lists:concat([pad_string(ActiveFilterName, 20), "(-)"]), - gs:menuitem(Menu, [{label, {text, Same}}, {data, Filter}]), - gs:menuitem(Menu, [{label, {text, Smaller}}, {data, Filter}]), - gs:menuitem(Menu, [{label, {text, Larger}}, {data, Filter}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem(Menu, [{label, {text, "New Filter Same Scale"}}, {bg, lightblue}, {enable,false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - lists:foldl(Item, 1, Filters). - -create_help_menu(Bar) -> - Button = gs:menubutton(Bar, [{label, {text, "Help"}}]), - Menu = gs:menu(Button, []), - gs:menuitem(Menu, [{label, {text, "Display details of an event"}}, - {bg, lightblue}, {enable,false}]), - gs:menuitem(Menu, [{label, {text, " Single click on the name tag or the arrow (Mouse-1)"}}, - {enable,false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem(Menu, [{label, {text, "Toggle actor search"}}, - {bg, lightblue}, {enable,false}]), - gs:menuitem(Menu, [{label, {text, " Single click on the name tag (Mouse-1)"}}, - {enable,false}]), - gs:menuitem(Menu, [{itemtype, separator}]), - gs:menuitem(Menu, [{label, {text, "Move actor"}}, - {bg, lightblue}, {enable,false}]), - gs:menuitem(Menu, [{label, {text, " se drag and drop on name tag (Mouse-1)"}}, - {enable,false}]). - -clear_canvas(S) -> - gs:destroy(S#state.canvas), - CanvasW = calc_canvas_width(S), - CanvasH = calc_canvas_height(S), - CanOpt = [{pack_xy, {{2, 4}, 3}}, {vscroll, right}, {hscroll, bottom}, - {scrollregion, {2, 2, CanvasW, CanvasH}}], - Canvas = gs:canvas(S#state.packer, CanOpt), - gs:config(S#state.packer, [{width, S#state.width}, {height, S#state.height}]), - gs:config(Canvas, [{buttonpress, true}, {buttonrelease, true}]), - S2 = S#state{refresh_needed = false, - y_pos = ?initial_y * S#state.scale, - canvas = Canvas, - canvas_width = CanvasW, - canvas_height = CanvasH, - events = queue_new()}, - draw_all_actors(S2). - -calc_canvas_width(S) -> - Min = calc_min_actors(S), - CanvasW = ((2 * ?initial_x) + (Min * ?incr_x)) * S#state.scale, - lists:max([CanvasW, S#state.width - (15 * S#state.scale), S#state.canvas_width]). - -calc_canvas_height(S) -> - Min = calc_min_events(S), - CanvasH = ((2 * ?initial_y) + (Min * ?incr_y)) * S#state.scale, - lists:max([CanvasH, S#state.height - (4 * 30), S#state.canvas_height]). - -calc_min_actors(S) -> - Max = S#state.max_actors, - N = length(S#state.actors), - if - Max =:= infinity -> - N * 2; - Max < N -> - N; - true -> - Max - end. - -calc_min_events(S) -> - Max = S#state.max_events, - N = queue_length(S#state.events), - if - Max =:= infinity -> - N * 2; - Max < N -> - N; - true -> - Max - end. - -display_more_events(Try, S) -> - Name = S#state.active_filter, - {value, F} = lists:keysearch(Name, #filter.name, S#state.filters), - FilterFun = F#filter.function, - Fun = fun(Event, State) -> - case catch FilterFun(Event) of - true -> - State2 = ensure_key(Event, State), - opt_display_event(Event, State2); - {true, Event2} -> - State2 = ensure_key(Event2, State), - opt_display_event(Event2, State2); - false -> - ensure_key(Event, State); - Bad -> - Contents = {bad_filter, Name, Bad, Event}, - Event2 = Event#event{contents = Contents, - from = bad_filter, - to = bad_filter}, - State2 = ensure_key(Event2, State), - opt_display_event(Event2, State2) - end - end, - Pid = S#state.collector_pid, - S2 = et_collector:iterate(Pid, S#state.last_event, Try, Fun, S), - case queue_length(S2#state.events) - queue_length(S#state.events) of - Diff when Diff =:= Try -> - %% Got as much as requested, look for more - %% io:format("Done: ~p~n", [{Try, Diff}]), - {noreply, S2, 0}; - _Diff when S2#state.first_event =:= S#state.first_event, - S2#state.last_event =:= S#state.last_event -> - %% Got lesser than requested, wait a while before looking for more - %% io:format("More: ~p~n", [{Try, Diff}]), - {noreply, S2, 500}; - _Diff -> - %% Got lesser than requested, look for more - %% io:format("More2: ~p~n", [{Try, Diff}]), - {noreply, S2, 0} - end. - -ensure_key(E, S) when is_record(E, event), is_record(S, state) -> - Key = et_collector:make_key(S#state.event_order, E), - case S#state.first_event of - first -> - S#state{first_event = Key, last_event = Key}; - last -> - S#state{first_event = Key, last_event = Key}; - _ -> - S#state{last_event = Key} - end. - -opt_display_event(E, S) -> - case S#state.display_mode of - all -> - display_event(E, S); - {search_actors, _Dir, _FirstKey, Actors} -> - %% Key = S#state.last_event, - From = select_actor_name(E#event.from, S), - case lists:member(From, Actors) of - true -> - display_event(E, S); - false -> - To = select_actor_name(E#event.to, S), - case lists:member(To, Actors) of - true -> - display_event(E, S); - false -> - S - end - end - end. - -select_actor_name(Name, S) -> - case lists:keymember(Name, #actor.name, S#state.actors) of - true -> Name; - false -> ?unknown - end. - -display_event(E, S) when E#event.detail_level < S#state.detail_level -> - {FromRefresh, From} = ensure_actor(E#event.from, S), - {FromName, FromPos, S2} = From, - {ToRefresh, To} = ensure_actor(E#event.to, S2), - {ToName, ToPos, S3} = To, - if - FromRefresh =/= false, ToRefresh =/= false -> - Key = S#state.last_event, - refresh_beep(S), - S3#state{refresh_needed = true, - events = queue_in(Key, S3#state.events)}; - FromName =:= ToName -> - case S#state.hide_actions of - true -> - S3; - false -> - Label = name_to_string(E#event.label), - draw_named_arrow(Label, FromName, FromPos, ToName, ToPos, S3) - end; - true -> - Label = name_to_string(E#event.label), - draw_named_arrow(Label, FromName, FromPos, ToName, ToPos, S3) - end; -display_event(_, S) -> - S. - -draw_named_arrow(Label, FromName, FromPos, ToName, ToPos, S) -> - Key = S#state.last_event, - case S#state.y_pos + (?incr_y * S#state.scale) of - _ when S#state.hide_unknown =:= true, FromName =:= ?unknown -> - S; - _ when S#state.hide_unknown =:= true, ToName =:= ?unknown -> - S; - Y when Y > S#state.canvas_height -> - refresh_beep(S), - S#state{refresh_needed = true, - events = queue_in(Key, S#state.events)}; - Y -> - S2 = S#state{y_pos = Y, events = queue_in(Key, S#state.events)}, - S3 = draw_arrow(FromPos, ToPos, S2), - draw_label(Label, FromName, ToName, FromPos, ToPos, S3) - end. - -refresh_beep(S) -> - case S#state.refresh_needed of - false -> - gs:config(S#state.canvas, beep), - gs:config(S#state.canvas, beep), - gs:config(S#state.canvas, beep); - true -> - ignore - end. - -draw_arrow(Pos, Pos, S) -> - S; -draw_arrow(FromPos, ToPos, S) -> - Y = S#state.y_pos, - CanOpts = [{coords, [{FromPos , Y}, {ToPos, Y}]}, - {arrow, last},{width, 1}, {fg, black}], - gs:line(S#state.canvas, CanOpts), - S. - -draw_label(Label, FromName, ToName, FromPos, ToPos, S) -> - Colour = - if - FromName =:= ?unknown, - ToName =:= ?unknown -> blue; %turquoise; - FromName =:= ?unknown -> orange; - ToName =:= ?unknown -> orange; - FromPos =:= ToPos -> blue; - true -> red - end, - Scale = S#state.scale, - X = lists:min([FromPos, ToPos]) + (6 * Scale), - Y = S#state.y_pos, - write_text(Label, X, Y, Colour, S), - S. - -draw_all_actors(State) -> - Scale = State#state.scale, - Fun = fun(A, X) -> - draw_actor(A, X, State), - X + (?incr_x * Scale) - end, - lists:foldl(Fun, ?initial_x * Scale, State#state.actors), - State. - -%% Returns: {NeedsRefreshBool, {ActorPos, NewsS, NewActors}} -ensure_actor(Name, S) -> - do_ensure_actor(Name, S, S#state.actors, 0). - -do_ensure_actor(Name, S, [H | _], N) when H#actor.name =:= Name -> - Pos = (?initial_x + (N * ?incr_x)) * S#state.scale, - {false, {Name, Pos, S}}; -do_ensure_actor(Name, S, [_ | T], N) -> - do_ensure_actor(Name, S, T, N + 1); -do_ensure_actor(Name, S, [], N) -> - %% A brand new actor, let's see if it does fit - Pos = (?initial_x + (N * ?incr_x)) * S#state.scale, - MaxActors = S#state.max_actors, - if - is_integer(MaxActors), N > MaxActors -> - %% Failed on max_actors limit, put into unknown - %% Assume that unknown always is in actor list - ensure_actor(?unknown, S); - Pos > (S#state.canvas_width - ((?initial_x - 15) * S#state.scale)) -> - %% New actor does not fit in canvas, refresh needed - A = create_actor(Name), - draw_actor(A, Pos, S), - {true, {Name, Pos, S#state{actors = S#state.actors ++ [A]}}}; - true -> - %% New actor fits in canvas. Draw the new actor. - A = create_actor(Name), - draw_actor(A, Pos, S), - {false, {Name, Pos, S#state{actors = S#state.actors ++ [A]}}} - end. - -draw_actor(A, LineX, S) -> - Scale = S#state.scale, - TextX = LineX - (5 * Scale), - TextY = ?initial_y * Scale, - LineTopY = TextY + ((?incr_y / 2) * Scale), - LineBotY = S#state.canvas_height - ((?incr_y / 2) * Scale), - Colour = case A#actor.name of - ?unknown -> orange; - _ -> red - end, - write_text(A#actor.string, TextX, TextY, Colour, S), - LineOpt = [{coords, [{LineX, LineTopY}, {LineX, LineBotY}]}, - {width, 1}, {fg, Colour}], - gs:line(S#state.canvas, LineOpt). - -toggle_search_for_actor(ActorName,S) -> - case S#state.display_mode of - all -> - io:format("~p: search for: ~p ++ ~p~n", [?MODULE, [], [ActorName]]), - %% Search for this actor - Key = S#state.first_event, - Actors = [ActorName], - Mode = {search_actors, forward, Key, Actors}, - change_display_mode(Mode, S); - {search_actors, Dir, Key, Actors}-> - Actors2 = - case lists:member(ActorName, Actors) of - true -> - io:format("~p: search for: ~p -- ~p~n", [?MODULE, Actors, [ActorName]]), - %% Remove actor from search list - Actors -- [ActorName]; - false -> - io:format("~p: search for: ~p ++ ~p~n", [?MODULE, Actors, [ActorName]]), - %% Add actor from search list - [ActorName | Actors] - end, - Mode2 = {search_actors, Dir, Key, Actors2}, - change_display_mode(Mode2, S) - end. - -move_actor(From, To, Actors, S) -> - Pos = #actor.name, - ToName = To#actor.name, - FromName = From#actor.name, - ToIx = actor_index(ToName, Pos, Actors), - FromIx = actor_index(FromName, Pos, Actors), - if - FromIx =/= 0, ToIx =/= 0, ToIx > FromIx -> - Actors2 = lists:keydelete(FromName, Pos, Actors), - Actors3 = insert_actor_after(From, To, Actors2), - S2 = S#state{actors = Actors3}, - refresh_main_window(S2); - FromIx =/= 0, ToIx =/= 0 -> - Actors2 = lists:keydelete(FromName, Pos, Actors), - Actors3 = insert_actor_before(From, To, Actors2), - S2 = S#state{actors = Actors3}, - refresh_main_window(S2); - true -> - %% Ignore - S - end. - -insert_actor_after(From, To, [H | T]) -> - case To#actor.name =:= H#actor.name of - true -> [H, From | T]; - false -> [H | insert_actor_after(From, To, T)] - end; -insert_actor_after(_From, _To, []) -> - []. - -insert_actor_before(From, To, [H | T]) -> - case To#actor.name =:= H#actor.name of - true -> [From, H | T]; - false -> [H | insert_actor_before(From, To, T)] - end; -insert_actor_before(_From, _To, []) -> - []. - -actor_index(_Key, _Pos, []) -> - 0; -actor_index(Key, Pos, [H | T]) -> - case Key =:= element(Pos, H) of - false -> actor_index(Key, Pos, T) + 1; - true -> 1 - end. - -y_to_n(Y, S) -> - Y2 = ((Y / S#state.scale) - ?initial_y + (?incr_y / 2)), - N = round(Y2 / ?incr_y - 0.2), - MaxN = queue_length(S#state.events), - if - N =< 0 -> actor; - N > MaxN -> actor; - true -> {event, N} - end. - -x_to_n(X, S) -> - Scale = S#state.scale, - Len = length(S#state.actors), - X2 = X - (?initial_x * Scale), - N = X2 / (?incr_x * Scale), - N2 = trunc(N + 1.5), - if - N2 > Len -> Len; - N2 < 1 -> 1; - true -> N2 - end. - -write_text(Text, X, Y, Colour, S) -> - Opt = [{coords, [{X, Y - (?incr_y * S#state.scale / 2)}]}, - {font, S#state.font}, {fg, Colour}, {text, Text}], - gs:text(S#state.canvas, Opt). - -create_contents_window(Event, S) -> - Options = [{viewer_pid, self()}, - {event, Event}, - {event_order, S#state.event_order}, - {active_filter, S#state.active_filter} - | S#state.filters], - case et_gs_contents_viewer:start_link(Options) of - {ok, _Pid} -> - S; - {error, Reason} -> - ok = error_logger:format("~p(~p): create_contents_window(~p) ->~n ~p~n", - [?MODULE, self(), Options, Reason]), - S - end. - -%%%---------------------------------------------------------------------- -%%% String padding of actors -%%%---------------------------------------------------------------------- - -create_actor(Name) -> - String = name_to_string(Name), - PaddedString = pad_string(String, 8), - #actor{name = Name, string = PaddedString}. - -name_to_string(Name) -> - case catch io_lib:format("~s", [Name]) of - {'EXIT', _} -> lists:flatten(io_lib:format("~w", [Name])); - GoodString -> lists:flatten(GoodString) - end. - -pad_string(Atom, MinLen) when is_atom(Atom) -> - pad_string(atom_to_list(Atom), MinLen); -pad_string(String, MinLen) when is_integer(MinLen), MinLen >= 0 -> - Len = length(String), - case Len >= MinLen of - true -> - String; - false -> - String ++ lists:duplicate(MinLen - Len, $ ) - end. - -%%%---------------------------------------------------------------------- -%%% Queue management -%%%---------------------------------------------------------------------- - -queue_new() -> - {0, [], []}. - -queue_in(X, {Size, In, Out}) -> - {Size + 1, [X | In], Out}. - -%% queue_out(Q) -> -%% case Q of -%% {Size, In, [H | Out]} -> {{value, H}, {Size - 1, In, Out}}; -%% {Size, [], []} -> {empty, {Size, [], []}}; -%% {Size, In, _} -> queue_out({Size, [], lists:reverse(In)}) -%% end. - -queue_to_list({_Size, [], Out}) -> - Out; -queue_to_list({_Size, In, Out}) -> - Out ++ lists:reverse(In). - -queue_length({Size, _In, _Out}) -> - Size. - -list_to_queue(List) when is_list(List) -> - {length(List), [], List}. diff --git a/lib/et/src/et_viewer.erl b/lib/et/src/et_viewer.erl index d9bd01f8d0..ead5639da6 100644 --- a/lib/et/src/et_viewer.erl +++ b/lib/et/src/et_viewer.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2000-2010. All Rights Reserved. +%% Copyright Ericsson AB 2000-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -76,7 +76,7 @@ start() -> %% start(Options) -> {ok, ViewerPid} | {error, Reason} %%---------------------------------------------------------------------- -start(GUI) when GUI =:= wx; GUI =:= gs; GUI =:= default -> +start(GUI) when GUI =:= wx; GUI =:= default -> start_link([{trace_global, true}], GUI); start(Options) -> start_link([{parent_pid, undefined} | Options], default). @@ -139,7 +139,7 @@ start(Options, GUI) -> %% and returns false | true | {true, NewEvent}. %%---------------------------------------------------------------------- -start_link(GUI) when GUI =:= wx; GUI =:= gs; GUI =:= default -> +start_link(GUI) when GUI =:= wx; GUI =:= default -> start_link([{trace_global, true}], GUI); start_link(Options) -> start_link(Options, default). @@ -148,22 +148,11 @@ start_link(Options, GUI) -> case GUI of wx -> et_wx_viewer:start_link(Options); - gs -> - et_gs_viewer:start_link(Options); default -> start_link(Options, which_gui()) end. - -which_gui() -> - try - wx:new(), - wx:destroy(), - wx - catch _:_ -> - gs - end. - +which_gui() -> wx. get_collector_pid(ViewerPid) -> call(ViewerPid, get_collector_pid). diff --git a/lib/et/src/modules.mk b/lib/et/src/modules.mk index 8d6c0902fb..b2d2f0b481 100644 --- a/lib/et/src/modules.mk +++ b/lib/et/src/modules.mk @@ -1,7 +1,7 @@ #-*-makefile-*- ; force emacs to enter makefile-mode # %CopyrightBegin% # -# Copyright Ericsson AB 2001-2010. All Rights Reserved. +# Copyright Ericsson AB 2001-2013. All Rights Reserved. # # The contents of this file are subject to the Erlang Public License, # Version 1.1, (the "License"); you may not use this file except in @@ -19,8 +19,6 @@ MODULES = \ et \ et_collector \ - et_gs_contents_viewer \ - et_gs_viewer \ et_selector \ et_viewer \ et_wx_contents_viewer \ diff --git a/lib/hipe/tools/Makefile b/lib/hipe/tools/Makefile index 3ce8ad5dd7..ed80eb075b 100644 --- a/lib/hipe/tools/Makefile +++ b/lib/hipe/tools/Makefile @@ -42,7 +42,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/hipe-$(VSN) # ---------------------------------------------------- # Target Specs # ---------------------------------------------------- -MODULES = hipe_tool hipe_profile hipe_jit +MODULES = hipe_profile hipe_jit # hipe_timer HRL_FILES= @@ -110,5 +110,4 @@ realclean: clean # ---------------------------------------------------- $(EBIN)/hipe_ceach.beam: ../main/hipe.hrl -$(EBIN)/hipe_tool.beam: ../main/hipe.hrl diff --git a/lib/hipe/tools/hipe_tool.erl b/lib/hipe/tools/hipe_tool.erl deleted file mode 100644 index efcf073efa..0000000000 --- a/lib/hipe/tools/hipe_tool.erl +++ /dev/null @@ -1,525 +0,0 @@ -%% -*- erlang-indent-level: 2 -*- -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2002-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Copyright (c) 2002 by Erik Johansson. -%% ==================================================================== -%% Module : hipe_tool -%% Purpose : -%% Notes : -%% History : * 2002-03-13 Erik Johansson ([email protected]): Created. -%% ==================================================================== -%% Exports : -%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - --module(hipe_tool). --compile([{nowarn_deprecated_function,{gs,button,3}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,editor,3}}, - {nowarn_deprecated_function,{gs,label,3}}, - {nowarn_deprecated_function,{gs,listbox,3}}, - {nowarn_deprecated_function,{gs,menu,3}}, - {nowarn_deprecated_function,{gs,menubar,3}}, - {nowarn_deprecated_function,{gs,menubutton,3}}, - {nowarn_deprecated_function,{gs,menuitem,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - --export([start/0]). - -%%--------------------------------------------------------------------- - --include("../main/hipe.hrl"). - -%%--------------------------------------------------------------------- - --define(WINDOW_WIDTH, 920). --define(WINDOW_HEIGHT, 460). --define(DEFAULT_BG_COLOR, {217,217,217}). --define(POLL_INTERVAL, 5000). --define(FONT, {screen, 12}). --define(HEADER_FONT, {screen, [bold], 12}). --define(NORMAL_FG_COLOR, {0,0,0}). - -%%--------------------------------------------------------------------- - --type fa() :: {atom(), arity()}. % {Fun,Arity} --type fa_address() :: {atom(), arity(), non_neg_integer()}. % {F,A,Address} - -%%--------------------------------------------------------------------- - --record(state, {win_created = false :: boolean(), - mindex = 0 :: integer(), - mod :: atom(), - funs = [] :: [fa()], - mods = [] :: [atom()], - options = [o2] :: comp_options(), - compiling = false :: 'false' | pid() - }). - -%%--------------------------------------------------------------------- - --spec start() -> pid(). - -start() -> - spawn(fun () -> init() end). - -init() -> - process_flag(trap_exit, true), - gs:start(), - S = init_window(#state{}), - loop(S). - --spec loop(#state{}) -> no_return(). - -loop(State) -> - receive - {gs, code_listbox, click, Data, [Idx, Txt | _]} -> - NewState = update_module_box(State,Idx,Data,Txt), - loop(NewState); - {gs, module_listbox, click, Data, [Idx, _Txt | _]} -> - NewState = update_fun(State,Idx,Data), - loop(NewState); - {gs, compmod, click, _, _} -> - loop(compile(State)); - {gs, prof, click, [], ["Turn off\nProfiling"]} -> - hipe_profile:prof_module_off(State#state.mod), - loop(update_module_box(State,State#state.mindex,State#state.mods,"")); - {gs, prof, click, [], _} -> - hipe_profile:prof_module(State#state.mod), - loop(update_module_box(State,State#state.mindex,State#state.mods,"")); - {gs, win, configure, _, _} -> - gs:config(win, [{width, ?WINDOW_WIDTH}, {height, ?WINDOW_HEIGHT}]), - loop(State); - - show_window when State#state.win_created =:= true -> - gs:config(win, [raise]), - loop(State); - show_window when State#state.win_created =:= false -> - loop((init_window(State))#state{win_created = true}); - - {gs, _Id, click, close_menu, _Args} -> - gs:destroy(win), - loop(State#state{win_created = false}); - {gs, _Id, keypress, _Data, [c, _, 0, 1 | _]} -> - gs:destroy(win), - loop(State#state{win_created = false}); - {gs, _Id, keypress, _Data, ['C', _, 1, 1 | _]} -> - gs:destroy(win), - loop(State#state{win_created = false}); - {gs, _Id, keypress, _Data, _Args} -> - loop(State); - {gs, _, destroy, _, _} -> - loop(State#state{win_created = false}); - - {compilation_done, _Res, Sender} -> - case State#state.compiling of - Sender -> - catch gs:config(compmod, [{enable, true}]), - update_text(compiling, ""), - loop(update_module_box(State, - State#state.mindex, - State#state.mods, "")); - _ -> - loop(State) - end; - - {'EXIT', _Pid, _Reason} -> - exit(normal); - _Other -> - io:format("HiPE window received message ~p ~n", [_Other]), - loop(State) - after - ?POLL_INTERVAL -> - loop(update_code_listbox(State)) - end. - --spec init_window(#state{}) -> #state{}. - -init_window(State) -> - create_window(State), - gs:config(win, [{map,true}]), - update_code_listbox(State#state{win_created = true}). - --spec create_window(#state{}) -> 'ok'. - -create_window(State) -> - gs:window(win, gs:start(), [{width, ?WINDOW_WIDTH}, - {height, ?WINDOW_HEIGHT}, - {bg, ?DEFAULT_BG_COLOR}, - {title, "[HiPE] Code list"}, - {configure, true}, - {destroy, true}, - {cursor, arrow}, - {keypress, true} - ]), - create_menu(), - Xpos = 4, - Ypos1 = 60, - Width = (?WINDOW_WIDTH - (Xpos*4)) div 3, - create_labels([{mods,Ypos1-20,"Loaded Modules"}], Xpos + 1 + 3), - Xpos2 = Xpos*2+Width, - create_labels([{mod,Ypos1-20,"Module:"++atom_to_list(State#state.mod)}, - {ver,Ypos1,""}, - {time,Ypos1+20,""}, - {native,Ypos1+40,""}, - {compiling,Ypos1+60,""}], Xpos2), - create_labels([{function,Ypos1-20,"Function:"}, - {nativefun,Ypos1,""}], Xpos*3+Width*2), - Ypos = 240, - Height1 = ?WINDOW_HEIGHT - Ypos1 - Xpos, - Height = ?WINDOW_HEIGHT - Ypos - Xpos, - gs:listbox(code_listbox, win, [{x, Xpos}, - {y, Ypos1}, - {width, Width}, - {height, Height1}, - {bg, {255,255,255}}, - {vscroll, right}, - {hscroll, true}, - {click, true}]), - gs:listbox(module_listbox, win, [{x, Xpos*2+Width}, - {y, Ypos}, - {width, Width}, - {height, Height}, - {bg, {255,255,255}}, - {vscroll, right}, - {hscroll, true}, - {click, true}]), - gs:listbox(profile_listbox, win, [{x, Xpos*3+Width*2}, - {y, Ypos1+40}, - {width, Width}, - {height, Height-60}, - {bg, {255,255,255}}, - {vscroll, right}, - {hscroll, true}, - {click, true}]), - gs:button(compmod,win,[{label,{text,"Compile\nModule"}}, - {justify,center}, - {x,Xpos*2+Width*1}, - {height,60}, - {y,Ypos-80}]), - gs:button(prof,win,[{label,{text,"Profile\nModule"}}, - {justify,center}, - {x,Xpos*2+Width*1+100}, - {height,60}, - {y,Ypos-80}]), - gs:button(clearprof,win,[{label, {text,"Clear\nProfile"}}, - {justify, center}, - {x, Xpos*2+Width*1+200}, - {height, 60}, - {y, Ypos-80}]), - gs:editor(edoc,win,[{x, Xpos*3+Width*2}, {y, Ypos}, - {width, Width}, {height, Height}, - {insert, {'end',"Edit this text!"}}, - {vscroll, right}, - {hscroll, true}, - {wrap, none}]), - ok. - --spec create_menu() -> 'ok'. - -create_menu() -> - gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR}]), - create_sub_menus([{mbutt, fmenu, " File", - [{" Close Ctrl-C ",close_menu}]}, - {mbuttc,cmenu, " Compile ", - [{" Compile Module", comp_mod}]}, - {mbuttp,pmenu, " Profile ", - [{" Profile Module", prof_mod}]}, - {mbutte,emenu, " Edoc", [separator]}, - {mbutta,amenu, " Analyze ", [separator]}, - {mbuttb,bmenu, " Benchmark ", [separator]}, - {mbuttj,jmenu, " Jit ", [separator]}]), - ok. - -create_menuitems(Parent, [{Text,Data}|Rest]) -> - gs:menuitem(Parent, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}, - {label, {text, Text}}, - {data, Data}, - {underline, 1} - ]), - create_menuitems(Parent, Rest); -create_menuitems(Parent, [separator|Rest]) -> - gs:menuitem(Parent, [{itemtype, separator}]), - create_menuitems(Parent, Rest); -create_menuitems(_, []) -> ok. - -create_sub_menus([{Parent, Name, Text, Items}|Rest]) -> - BG = {bg, ?DEFAULT_BG_COLOR}, - FG = {fg, {178, 34, 34}}, % firebrick - Label = {label, {text, Text}}, - gs:menubutton(Parent, menubar, [BG, FG, Label, {underline, 1}]), - gs:menu(Name, Parent, [BG, FG]), - create_menuitems(Name, Items), - create_sub_menus(Rest); -create_sub_menus([]) -> ok. - -create_labels([{Name,Y,Text}|Rest], Xpos) -> - gs:label(Name, win, [{width, (?WINDOW_WIDTH - 16) div 3}, - {height, 20}, - {x, Xpos + 1 + 3}, - {y, Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, ?NORMAL_FG_COLOR}, - {font, ?HEADER_FONT}, - {align, w}, - {label, {text, Text}} - ]), - create_labels(Rest,Xpos); -create_labels([],_) -> ok. - --spec update_code_listbox(#state{}) -> #state{}. - -update_code_listbox(State) -> - Mods = lists:sort(mods()), - case State#state.win_created of - false -> - State; - true -> - case Mods =:= State#state.mods of - true -> State; - false -> - update_text(mods, - "Loaded Modules ("++ - integer_to_list(length(Mods))++")"), - catch gs:config(code_listbox, [{data, Mods}, - {items, Mods}, - {selection, 0}]), - update_module_box(State#state{mods = Mods}, 0, Mods, "") - end - end. - --spec update_fun(#state{}, integer(), [mfa()]) -> #state{}. - -update_fun(State, Idx, Data) -> - case State#state.win_created of - false -> - State; - true -> - MFA = {M,F,A} = get_selection(Idx, Data, {?MODULE,start,0}), - update_text(function, "Function: "++mfa_to_string(MFA)), - case in_native(F, A, native_code(M)) of - true -> update_text(nativefun, "Native"); - false -> update_text(nativefun, "Emulated") - end, - State - end. - -get_selection(Idx, Data, Default) -> - try lists:nth(Idx+1, Data) catch _:_ -> Default end. - --spec update_module_box(#state{}, integer(), [atom()], string()) -> #state{}. - -update_module_box(State, Idx, Data, _Txt) -> - case State#state.win_created of - false -> - State; - true -> - Mod = get_selection(Idx, Data, hipe_tool), - %% io:format("~w\n", [Mod:module_info()]), - Info = Mod:module_info(), - Funs = lists:usort(funs(Mod)), - MFAs = mfas(Mod, Funs), - ModText = atom_to_list(Mod), - update_text(mod, "Module:"++ModText), - update_text(compmod, "Compile\nModule\n"++ModText), - Options = get_compile(Info), - update_text(ver, get_version(Options)), - update_text(time, get_time(Options)), - NativeCode = native_code(Mod), - - Prof = is_profiled(Mod), - if Prof -> update_text(prof, "Turn off\nProfiling"); - true -> update_text(prof, "Profile\n"++ModText) - end, - - Mode = get_mode(Funs, NativeCode), - - update_text(native, Mode), - Items = fun_names(Mod, Funs, NativeCode, Prof), - - Selection = {selection, 0}, - catch gs:config(module_listbox, [{data, MFAs}, - {items, Items}, - Selection]), - ProfData = [mfa_to_string(element(1, X)) ++ " " ++ - integer_to_list(element(2,X)) - || X <- hipe_profile:res(), element(2, X) > 0], - catch gs:config(profile_listbox, [{data, ProfData}, - {items, ProfData}, - Selection]), - get_edoc(Mod), - update_fun(State#state{mindex = Idx, mod = Mod, funs = Funs}, 0, MFAs) - end. - -update_text(Lab, Text) -> - catch gs:config(Lab, [{label, {text, Text}}]). - -%%--------------------------------------------------------------------- -%% @doc Returns a list of all loaded modules. -%%--------------------------------------------------------------------- - --spec mods() -> [atom()]. - -mods() -> - [Mod || {Mod,_File} <- code:all_loaded()]. - --spec funs(module()) -> [fa()]. - -funs(Mod) -> - Mod:module_info(functions). - --spec native_code(module()) -> [fa_address()]. - -native_code(Mod) -> - Mod:module_info(native_addresses). - --spec mfas(atom(), [fa()]) -> [mfa()]. - -mfas(Mod, Funs) -> - [{Mod,F,A} || {F,A} <- Funs]. - --spec fun_names(atom(), [fa()], [fa_address()], boolean()) -> [string()]. - -fun_names(M, Funs, NativeCode, Prof) -> - [atom_to_list(F) ++ "/" ++ integer_to_list(A) - ++ - (case in_native(F, A, NativeCode) of - true -> " [native] "; - false -> "" - end) - ++ - if Prof -> - (catch integer_to_list(hipe_bifs:call_count_get({M,F,A}))); - true -> "" - end - || {F,A} <- Funs]. - --spec in_native(atom(), arity(), [fa_address()]) -> boolean(). - -in_native(F, A, NativeCode) -> - lists:any(fun({Fun,Arity,_}) -> - (Fun =:= F andalso Arity =:= A) - end, - NativeCode). - --spec mfa_to_string(mfa()) -> [char(),...]. - -mfa_to_string({M,F,A}) -> - atom_to_list(M) ++ ":" ++ atom_to_list(F) ++ "/" ++ integer_to_list(A). - -get_mode(Funs, NativeCode) -> - case NativeCode of - [] -> "Emulated"; - InNative when is_list(InNative) -> - if length(InNative) =:= length(Funs) -> - "Native"; - true -> "Mixed" - end - end. - -get_time(Comp) -> - case lists:keyfind(time, 1, Comp) of - {_, {Y,Month,D,H,Min,S}} -> - integer_to_list(Y) ++ - "-" ++ integer_to_list(Month) ++ - "-" ++ integer_to_list(D) ++ " " ++ - integer_to_list(H) ++ ":" ++ integer_to_list(Min) ++ - ":" ++ integer_to_list(S); - false -> "" - end. - -get_version(Comp) -> - case lists:keyfind(version, 1, Comp) of - {_, V} when is_list(V) -> V; - false -> "" - end. - -get_cwd(Options) -> - case lists:keyfind(cwd, 1, Options) of - {_, V} when is_atom(V) -> atom_to_list(V); - {_, V} -> V; - false -> "" - end. - -get_options(Comp) -> - case lists:keyfind(options, 1, Comp) of - {_, V} when is_list(V) -> V; - false -> "" - end. - -get_compile(Info) -> - case lists:keyfind(compile, 1, Info) of - {_, O} when is_list(O) -> O; - false -> [] - end. - --spec is_profiled(atom()) -> boolean(). - -is_profiled(Mod) -> - case hipe_bifs:call_count_get({Mod,module_info,0}) of - false -> false; - C when is_integer(C) -> true - end. - --spec compile(#state{}) -> #state{}. - -compile(State) -> - catch gs:config(compmod, [{enable, false}]), - update_text(compiling, "Compiling..."), - Parent = self(), - P = spawn(fun() -> c(Parent, State#state.mod, State#state.options) end), - State#state{compiling = P}. - --spec c(pid(), atom(), comp_options()) -> 'ok'. - -c(Parent, Mod, Options) -> - Res = hipe:c(Mod, Options), - Parent ! {compilation_done,Res,self()}, - ok. - -get_edoc(Mod) -> - Info = Mod:module_info(), - Comp = get_compile(Info), - Options = get_options(Comp), - Dir = get_cwd(Options), - File = - case Dir of - "" -> atom_to_list(Mod) ++ ".erl"; - _ -> Dir ++"/" ++ atom_to_list(Mod) ++ ".erl" - end, - %% io:format("Get ~s\n", [File]), - Text = try edoc(File, [{xml_export,xmerl_text}, no_output]) - catch _:_ -> "error" - end, - gs:config(edoc, {enable, true}), - gs:config(edoc, clear), - gs:config(edoc, {insert, {insert, Text}}), - gs:config(edoc, {enable, false}), - ok. - -edoc(Name, Opts) -> - Doc = edoc:get_doc(Name, Opts), - %% Comments = edoc:read_comments(Name, Opts), - %% Text = edoc:forms(Forms, Comments, Name, Opts), - edoc:layout(Doc, Opts), - ok. diff --git a/lib/megaco/doc/src/definitions/term.defs b/lib/megaco/doc/src/definitions/term.defs index 57379eaa5d..16212923ea 100644 --- a/lib/megaco/doc/src/definitions/term.defs +++ b/lib/megaco/doc/src/definitions/term.defs @@ -1,7 +1,6 @@ [{"agent","agent","An entity that terminates a management protocol in the Network Element.","mbj"}, {"API","API","Application Programming Interface. The interface towards an application. Usually this is a set of functions available, but can also be a set of messages sent to or from an application.","mbj"}, {"application","application","A collection of resources which is required to offer a specific service.","mbj"}, -{"appmon","Application Monitor","A graphical node and application process tree viewer. See also appmon.","mbj"}, {"Appmon","Appmon","Application name for the Application Monitor within Erlang/OTP. A graphical node and process viewer.","mbj"}, {"app callback","application callback module","A module which is called when the application is started, and when it has stopped. Every application has one application callback module.","mbj"}, {"AC","application controller","A process which coordinates all operations on applications.","mbj"}, @@ -136,7 +135,6 @@ the module Erlang in the application kernel","kenneth"}, {"pattern matching","pattern matching","A basic mechanism in Erlang for assigning values to variables and for controlling the flow of a program.","kenneth"}, {"permanent child","permanent child","A supervised process which always is restarted when it dies.","mbj"}, {"Pid","Pid","Process Identifier. A data type in Erlang for storing process references. The process identity of the process displayed in the line.","kenneth"}, -{"Pman","Pman","Module and application name for the Process Trace Tool.","olin"}, {"point","point","A unit used to indicate the size of a typeface. Equal to 1/72 inches.","jocke"}, {"pointer","pointer","A pointer tells where data is stored. Memory pointers are not used in Erlang.","kent"}, {"port","port","A data type in Erlang. Ports provide the basic mechanism for communication with the external world.","peterl"}, @@ -198,7 +196,6 @@ the module Erlang in the application kernel","kenneth"}, {"Table Visualizer","Table Visualizer","A tool which enables the user to examine ETS and Mnesia tables.","olin"}, {"temporary child","temporary child","A supervised process which is never restarted when it dies.","mbj"}, {"term","term","The super type of all Erlang types.","kenneth"}, -{"Toolbar","Toolbar","A tool that provides an simplistic interface to the other various Erlang/OTP tools","olin"}, {"tools","tools","An application within Erlang/OTP which contains the tools which are not applications themselves.","olin"}, {"transaction","transaction","Transactions groups a set of database accesses into an atomic unit. All transactions has the ACID (atomicity, concistency, isolation and durability) properties.","hakan"}, {"transient child","transient child","A supervised process which is restarted if it dies non-normally.","mbj"}, diff --git a/lib/observer/doc/src/Makefile b/lib/observer/doc/src/Makefile index 0f564d3299..b43aeccd73 100644 --- a/lib/observer/doc/src/Makefile +++ b/lib/observer/doc/src/Makefile @@ -68,10 +68,6 @@ ONLY_HTML_FILE = \ GIF_FILES = \ et_processes.gif \ et_modsprocs.gif \ - etop_main.gif \ - etop_5.gif \ - etop_lines.gif \ - etop_opt.gif \ note.gif # ---------------------------------------------------- diff --git a/lib/observer/doc/src/etop.xml b/lib/observer/doc/src/etop.xml index 99d3b15811..9f3cdd6de8 100644 --- a/lib/observer/doc/src/etop.xml +++ b/lib/observer/doc/src/etop.xml @@ -38,21 +38,19 @@ <description> <p><c>etop</c> should be started with the provided scripts - <c>etop</c> and <c>getop</c> for text based and graphical - presentation respectively. This will start a hidden erlang node + <c>etop</c>. This will start a hidden erlang node which connects to the node to be measured. The measured node is given with the <c>-node</c> option. If the measured node has a different cookie than the default cookie for the user who invokes the script, the cookie must be explicitly given witht the <c>-setcookie</c> option.</p> - <p>Under Windows the batch files <c>etop.bat</c> and - <c>getop.bat</c> can be used.</p> + <p>Under Windows the batch file <c>etop.bat</c> can be used.</p> <p>The following configuration parameters exist for the - <c>etop</c> tool. When executing the <c>etop</c> or <c>getop</c> - scripts, these parameters can be given as command line options, - e.g. <c>getop -node testnode@myhost -setcookie MyCookie</c>.</p> + <c>etop</c> tool. When executing the <c>etop</c> script, + these parameters can be given as command line options, + e.g. <c>etop -node testnode@myhost -setcookie MyCookie</c>.</p> <taglist> <tag>node</tag> <item>The measured node. @@ -103,11 +101,6 @@ Value: <c>on | off</c> <br></br> Default: <c>on</c></item> </taglist> - <p>All interaction with <c>etop</c> when running the graphical - presentation should happen via the menus. For the text based - presentation the functions described below can be used. - </p> - <p>See the <seealso marker="etop_ug">user's guide</seealso> for more information about the <c>etop</c> tool.</p> @@ -118,7 +111,7 @@ Default: <c>on</c></item> <fsummary>Start etop</fsummary> <desc> <p>This function starts <c>etop</c>. - Note that etop is preferably started with the etop and getop scripts</p> + Note that etop is preferably started with the etop script.</p> </desc> </func> <func> diff --git a/lib/observer/doc/src/etop_5.gif b/lib/observer/doc/src/etop_5.gif Binary files differdeleted file mode 100644 index 9650176366..0000000000 --- a/lib/observer/doc/src/etop_5.gif +++ /dev/null diff --git a/lib/observer/doc/src/etop_lines.gif b/lib/observer/doc/src/etop_lines.gif Binary files differdeleted file mode 100644 index 10620a1155..0000000000 --- a/lib/observer/doc/src/etop_lines.gif +++ /dev/null diff --git a/lib/observer/doc/src/etop_main.gif b/lib/observer/doc/src/etop_main.gif Binary files differdeleted file mode 100644 index 699cb986c8..0000000000 --- a/lib/observer/doc/src/etop_main.gif +++ /dev/null diff --git a/lib/observer/doc/src/etop_opt.gif b/lib/observer/doc/src/etop_opt.gif Binary files differdeleted file mode 100644 index e420bff7f6..0000000000 --- a/lib/observer/doc/src/etop_opt.gif +++ /dev/null diff --git a/lib/observer/doc/src/etop_ug.xml b/lib/observer/doc/src/etop_ug.xml index 8291e417e7..c57df1d324 100644 --- a/lib/observer/doc/src/etop_ug.xml +++ b/lib/observer/doc/src/etop_ug.xml @@ -39,9 +39,7 @@ <section> <title>Output</title> - <p>The output from <c>etop</c> can be graphical or text based. - </p> - <p>Text based it looks like this:</p> + <p>The output from <c>etop</c> looks like this:</p> <code type="none"><![CDATA[ ======================================================================================== tiger@durin 13:40:32 @@ -63,10 +61,6 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func <127.137.0> net_kernel:do_spawn_ 0 553 5840 0 dbg:do_relay_1/1 ======================================================================================== ]]></code> - <p>And graphically it looks like this:</p> - <image file="etop_main.gif"> - <icaption>Graphical presentation of etop</icaption> - </image> <p>The header includes some system information: </p> <taglist> @@ -102,9 +96,7 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func <section> <title>Start</title> - <p>To start etop with the graphical presentation, use the script - <c>getop</c> or the batch file <c>getop.bat</c>, e.g. <c>getop -node tiger@durin</c></p> - <p>To start etop with the text based presentation use the script + <p>To start etop use the script <c>etop</c> or the batch file <c>etop.bat</c>, e.g. <c>etop -node tiger@durin</c>, </p> </section> @@ -115,30 +107,12 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func <c>-OptName Value</c> to the command line, e.g. <c>etop -node tiger@durin -setcookie mycookie -lines 15</c>. </p> <p>The parameters <c>lines</c>, <c>interval</c>, <c>accumulate</c> - and <c>sort</c> can be changed during runtime. Use the - <em>Options</em> menu with the graphical presentation or the - function <c>etop:config/2</c> with the text based presentation. + and <c>sort</c> can be changed during runtime by the + function <c>etop:config/2</c>. </p> <p>A list of all valid configuration parameters can be found in the reference manual for <c>etop</c>. </p> - <p>Note that it is even possible to change which information to - sort by by clicking the header line of the table in the graphical - presentation. - </p> - - <section> - <title>Example: Change configuration with graphical presentation</title> - <image file="etop_opt.gif"> - <icaption>Select the option to change from the Options menu.</icaption> - </image> - <image file="etop_lines.gif"> - <icaption>Enter the new value in the popup window and click "Ok"</icaption> - </image> - <image file="etop_5.gif"> - <icaption>The interface is updated with the new configuration</icaption> - </image> - </section> <section> <title>Example: Change configuration with text based presentation</title> @@ -187,18 +161,14 @@ Pid Name or Initial Func Time Reds Memory MsgQ Current Func <section> <title>Print to file</title> <p>At any time, the current <c>etop</c> display can be dumped to a - text file. Use <em>Dump to file</em> on the <em>File</em> menu - with the graphical presentation or the function <c>etop:dump/1</c> - with the text based presentation. + text file with the function <c>etop:dump/1</c>. </p> </section> <section> <title>Stop</title> - <p>To stop <c>etop</c>, use <em>Exit</em> on the <em>File</em> - menu for the graphical presentation, or the function - <c>etop:stop/0</c> with the text based presentation. - </p> + <p>Use the function <c>etop:stop/0</c> to stop <c>etop</c>. + </p> </section> </chapter> diff --git a/lib/observer/priv/bin/getop b/lib/observer/priv/bin/getop deleted file mode 100755 index 5cd9bf3d76..0000000000 --- a/lib/observer/priv/bin/getop +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -NAME="etop" -erl -sname $NAME -noinput -hidden -s etop -s erlang halt $@ diff --git a/lib/observer/priv/bin/getop.bat b/lib/observer/priv/bin/getop.bat deleted file mode 100644 index 8b6f108f06..0000000000 --- a/lib/observer/priv/bin/getop.bat +++ /dev/null @@ -1,2 +0,0 @@ -@ECHO OFF -CALL werl -sname etop -noinput -hidden -s etop -s erlang halt %* diff --git a/lib/observer/src/Makefile b/lib/observer/src/Makefile index 42f5c19935..646892663f 100644 --- a/lib/observer/src/Makefile +++ b/lib/observer/src/Makefile @@ -38,7 +38,6 @@ MODULES= \ crashdump_viewer \ crashdump_viewer_html \ etop \ - etop_gui \ etop_tr \ etop_txt \ observer \ @@ -72,13 +71,12 @@ PRIVDIR= ../priv WEBTOOLFILES= $(PRIVDIR)/crashdump_viewer.tool $(PRIVDIR)/erlang_observer.png BINDIR= $(PRIVDIR)/bin ifeq ($(findstring win32,$(TARGET)),win32) -WIN32_EXECUTABLES= $(BINDIR)/etop.bat $(BINDIR)/getop.bat $(BINDIR)/cdv.bat +WIN32_EXECUTABLES= $(BINDIR)/etop.bat $(BINDIR)/cdv.bat else WIN32_EXECUTABLES= endif EXECUTABLES= \ $(BINDIR)/etop \ - $(BINDIR)/getop \ $(BINDIR)/cdv \ $(WIN32_EXECUTABLES) CDVDIR= $(PRIVDIR)/crashdump_viewer diff --git a/lib/observer/src/etop.erl b/lib/observer/src/etop.erl index 2610060eae..96a18cf450 100644 --- a/lib/observer/src/etop.erl +++ b/lib/observer/src/etop.erl @@ -44,9 +44,6 @@ help() -> " sort runtime | reductions | memory | msg_q~n" " What information to sort by~n" " Default: runtime (reductions if tracing=off)~n" - " output graphical | text~n" - " How to present results~n" - " Default: graphical~n" " tracing on | off etop uses the erlang trace facility, and thus~n" " no other tracing is possible on the node while~n" " etop is running, unless this option is set to~n" @@ -317,7 +314,7 @@ handle_args([_| R], C) -> handle_args([], C) -> C. -output(graphical) -> etop_gui; +output(graphical) -> exit({deprecated, "Use observer instead"}); output(text) -> etop_txt. diff --git a/lib/observer/src/etop_defs.hrl b/lib/observer/src/etop_defs.hrl index 664de61973..720fb50b5a 100644 --- a/lib/observer/src/etop_defs.hrl +++ b/lib/observer/src/etop_defs.hrl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2002-2009. All Rights Reserved. +%% Copyright Ericsson AB 2002-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -22,8 +22,8 @@ " procs~8w processes~8w code ~8w~n" " runq ~8w atom ~8w ets ~8w~n"). --record(opts, {node=node(), port = 8415, accum = false, intv = 5000, lines = 10, +-record(opts, {node=node(), port = 8415, accum = false, intv = 5000, lines = 10, width = 700, height = 340, sort = runtime, tracing = on, %% Other state information - out_mod=etop_gui, out_proc, server, host, tracer, store, + out_mod=etop_txt, out_proc, server, host, tracer, store, accum_tab, remote}). diff --git a/lib/observer/src/etop_gui.erl b/lib/observer/src/etop_gui.erl deleted file mode 100644 index 3971646abc..0000000000 --- a/lib/observer/src/etop_gui.erl +++ /dev/null @@ -1,374 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2002-2013. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(etop_gui). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,create,4}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,0}}]). - --author('[email protected]'). - --export([init/1,stop/1]). --export([formatmfa/1,to_list/1]).% For etop_txt - --include("etop.hrl"). --include("etop_defs.hrl"). - --import(etop, [loadinfo/1, meminfo/2, getopt/2]). - -%% Heights --define(BarH, 28). % height of menubar --define(LabelH, 90). % height of label with system info --define(GridLineH, 21). % height of one line in the table (grid) - -%% Column numbers for grid - click to sort --define(TimeCol, 3). --define(RedsCol, 4). --define(MemCol, 5). --define(MsgQCol, 6). - -%% Font --define(Normal, {screen,12}). --define(Bold, {screen,bold,12}). - - -%% ----------------------------------------------------------------------------- -stop(_) -> ok. - -init(Config) -> - S = gs:start(), - Width = getopt(width, Config), - TotLines = getopt(lines,Config)+1, - - %% Max number of processes shown in window at startup is 10 - %% If less than 10 lines is specified, window size fits number of lines - WinH = if TotLines > 11 -> 11*?GridLineH + ?BarH + ?LabelH; - true -> TotLines*?GridLineH + ?BarH + ?LabelH - end, - Win = gs:create(window, S, - [{title, "Erlang Top"}, - {map, true}, %% While debugging - {configure, true}, - {width, Width}, {height, WinH}]), - Bar = gs:create(menubar, Win, []), - - FileButt = gs:create(menubutton, Bar, [{label,{text, " File "}}]), - OptionsButt = gs:create(menubutton, Bar, [{label,{text, " Options "}}]), - File = gs:create(menu, FileButt, []), - Options = gs:create(menu, OptionsButt, []), - gse:named_menuitem(refresh, File, - [{label,{text," Refresh "}}]), - gse:named_menuitem(dump, File, - [{label,{text," Dump to file "}}]), - gse:named_menuitem(exit, File, - [{label,{text," Exit "}}]), - - gse:named_menuitem(accum, Options, - [{label,{text, " Accumulate "}}, - {itemtype, check}]), - gse:named_menuitem(intv, Options, - [{label,{text, " Update Interval "}}]), - gse:named_menuitem(lines, Options, - [{label,{text, " Number of Lines "}}]), - Sort = gse:named_menuitem(sort, Options, - [{label,{text, " Sort "}}, - {itemtype,cascade}]), - SortMenu = gse:create(menu, Sort, []), - gse:named_menuitem(runtime, SortMenu, - [{label,{text, " Time "}}, - {itemtype,radio},{group,gr1}]), - gse:named_menuitem(memory, SortMenu, - [{label,{text, " Memory "}}, - {itemtype,radio},{group,gr1}]), - gse:named_menuitem(reductions, SortMenu, - [{label,{text, " Reductions "}}, - {itemtype,radio},{group,gr1}]), - gse:named_menuitem(msg_q, SortMenu, - [{label,{text, " Message Queue "}}, - {itemtype,radio},{group,gr1}]), - - SysInfo = gs:create(label,Win,[{x, 0}, {y, ?BarH},{align,sw}, - {width, Width},{height,?LabelH}]), - - {GridH,VScroll} = calc_grid_h(WinH,TotLines), - Grid = gse:grid(Win, - [{x, 0}, {y, ?BarH+?LabelH}, - {width, Width}, - {height, GridH}, - {hscroll, false}, - {vscroll, VScroll}, - {columnwidths, calc_column_w(Width)}, - {rows, {1, TotLines}}, - {font,?Normal}]), - - %% Header line - GL1 = gse:gridline(Grid, [{{text, 1}, "PID"}, - {{text, 2}, "Name or Initial Function"}, - {{text, ?TimeCol}, "Time(us)"}, - {{text, ?RedsCol}, "Reds"}, - {{text, ?MemCol}, "Memory"}, - {{text, ?MsgQCol}, "MsgQ"}, - {{text, 7}, "Current Function"}, - {bg, lightblue}, - {row, 1}, - {click, true}]), - - config_sort(GL1,getopt(sort,Config)), - Info = do_update(Grid, SysInfo, Config), - - get_event(Info, Win, Grid, GL1, SysInfo, Config). - -calc_column_w(W) -> - %% W = [2x, 3x, 1x, 1x, 1x, 1x, 3x] = 12x - RW = W-9, % just to make nice small margins on each side of grid - X = RW div 12, - [2*X, 3*X, X, X, X, X, 3*X + (RW - 12*X)]. - -config_sort(GL1,Sort) -> - gs:config(Sort,[{select,true}]), - lists:foreach(fun(S) -> - gs:config(GL1,[{{font,S},?Normal}]) - end, - [?TimeCol,?MemCol,?RedsCol,?MsgQCol]), - case Sort of - runtime -> gs:config(GL1,{{font,?TimeCol},?Bold}); - memory -> gs:config(GL1,{{font,?MemCol},?Bold}); - reductions -> gs:config(GL1,{{font,?RedsCol},?Bold}); - msg_q -> gs:config(GL1,{{font,?MsgQCol},?Bold}) - end. - -config_lines(Win,Grid,TotLines) -> - OldGridH = gs:read(Grid,height), - NewLinesH = TotLines*?GridLineH, - if NewLinesH =< OldGridH -> - gs:config(Win,[{height,NewLinesH+?BarH+?LabelH}]), - gs:config(Grid,[{rows,{1,TotLines}}, - {height,NewLinesH}, - {vscroll,false}]); - true -> - gs:config(Grid,[{rows,{1,TotLines}},{vscroll,right}]) - end. - -calc_grid_h(WinH,TotLines) -> - LeftInWin = WinH - ?BarH - ?LabelH, - TotGrid = TotLines * ?GridLineH, - if LeftInWin >= TotGrid -> - {TotGrid,false}; - true -> - {LeftInWin,right} - end. - -set_win_h(Win,OrigH,TotLines) -> - TotH = TotLines*?GridLineH + ?BarH + ?LabelH, - if TotH >= OrigH -> OrigH; - true -> gs:config(Win,[{height,TotH}]), - TotH - end. - -get_event(Info, Win, Grid, GL1, SysInfo, Config) -> - receive - {gs, Win, configure,[],[W,H,_,_]} -> - TotLines = getopt(lines,Config)+1, - %% Will not make window higher than total number of lines - RealWinH = set_win_h(Win,H,TotLines), - {GridH,VScroll} = calc_grid_h(RealWinH,TotLines), - gs:config(Grid, [{width, W}, - {columnwidths, calc_column_w(W)}, - {height,GridH}, {vscroll,VScroll}]), - get_event(Info, Win, Grid, GL1, SysInfo, Config); - {gs, refresh, _, _, _} -> - Info1 = do_update(Grid, SysInfo, Config), - get_event(Info1, Win, Grid, GL1, SysInfo, Config); - {gs, dump, _, _, _} -> - case pop(Win,dump) of - {ok,File} -> etop:dump(File); - {error,cancel} -> ok - end, - get_event(Info, Win, Grid, GL1, SysInfo, Config); - {gs, Win, destroy, _, _} -> - normal; - {gs, exit, _, _, _} -> - ok; - {gs, accum, _, _, _} -> - Old = getopt(accum,Config), - etop:config(accumulate,not Old), - get_event(Info, Win, Grid, GL1, SysInfo, Config); - {gs,intv,_,_,_} -> - case pop(Win,interval) of - {ok,Intv} -> etop:config(interval,list_to_integer(Intv)); - {error,cancel} -> ok - end, - get_event(Info, Win, Grid, GL1, SysInfo, Config); - {gs,lines,_,_,_} -> - case pop(Win,lines) of - {ok,Lines} -> etop:config(lines,list_to_integer(Lines)); - {error,cancel} -> ok - end, - get_event(Info, Win, Grid, GL1, SysInfo, Config); - {gs,Sort,_,_,_} when Sort=:=runtime; - Sort=:=memory; - Sort=:=reductions; - Sort=:=msg_q -> - etop:config(sort,Sort), - get_event(Info, Win, Grid, GL1, SysInfo, Config); - {gs,GL1,click,_,[Col,1,_]} -> - case Col of - ?TimeCol -> etop:config(sort, runtime); - ?MemCol -> etop:config(sort, memory); - ?RedsCol -> etop:config(sort, reductions); - ?MsgQCol -> etop:config(sort, msg_q); - _other -> ignore - end, - get_event(Info, Win, Grid, GL1, SysInfo, Config); - {config,{Key,Value},Config1} -> - case Key of - lines -> config_lines(Win,Grid,Value+1); - sort -> config_sort(GL1,Value); - accumulate -> gs:config(accum,[{select,Value}]); - _ -> ok - end, - Info1 = do_update(Grid, SysInfo, Config1), - get_event(Info1, Win, Grid, GL1, SysInfo, Config1); - {dump,Fd} -> - etop_txt:do_update(Fd,Info,Config), - get_event(Info, Win, Grid, GL1, SysInfo, Config); - Msg -> - io:format("~p got unexpected msg ~p~n", [?MODULE, Msg]), - get_event(Info, Win, Grid, GL1, SysInfo, Config) - after getopt(intv,Config) -> - Info1 = do_update(Grid, SysInfo, Config), - get_event(Info1, Win, Grid, GL1, SysInfo, Config) - end. - -do_update(Grid, SysInfo, Config) -> - Info = etop:update(Config), - Lines = makegridlines(Info#etop_info.procinfo, Grid, 2), - clear_lines(Lines, getopt(lines,Config) + 1, Grid), - makesysinfo(getopt(node,Config),Info,SysInfo), - Info. - -%clear_lines(From, To, _Grid) when From > To -> ok; -clear_lines(From, To, Grid) -> - case gs:read(Grid, {obj_at_row, From}) of - undefined -> - ok; - GridLine -> - gs:destroy(GridLine), - clear_lines(From + 1, To, Grid) - end. - -formatmfa({M, F, A}) -> - io_lib:format("~w:~w/~w",[M, F, A]); -formatmfa(Other) -> - %% E.g. when running hipe - the current_function for some - %% processes will be 'undefined' - io_lib:format("~w",[Other]). - - -makegridlines([#etop_proc_info{pid=Pid, - mem=Mem, - reds=Reds, - name=Name, - runtime=Time, - cf=MFA, - mq=MQ} - |T], Grid, Count) -> - update_gl(Grid, Count, [{{text, 1}, pid_to_list(Pid)}, - {{text, 2}, to_list(Name)}, - {{text, ?TimeCol}, - if is_integer(Time)->integer_to_list(Time); - true -> Time - end}, - {{text, ?RedsCol}, integer_to_list(Reds)}, - {{text, ?MemCol}, integer_to_list(Mem)}, - {{text, ?MsgQCol}, integer_to_list(MQ)}, - {{text, 7}, formatmfa(MFA)}, - {row, Count}, {click, false}]), - makegridlines(T, Grid, Count + 1); -makegridlines([],_Grid,Count) -> - Count. - -update_gl(Grid, Row, GL) -> - case gs:read(Grid, {obj_at_row, Row}) of - undefined -> - gse:gridline(Grid,[{row, Row}|GL]); - GridLine -> - gs:config(GridLine,GL) - end. - -to_list(Name) when is_atom(Name) -> atom_to_list(Name); -to_list({_M,_F,_A}=MFA) -> formatmfa(MFA). - - -makesysinfo(Node,Info,SysInfo) -> - {Cpu,NProcs,RQ,Clock} = loadinfo(Info), - case Info#etop_info.memi of - undefined -> - Str = "No memory information is available."; - Memi -> - [Tot,Procs,Atom,Bin,Code,Ets] = - meminfo(Memi, [total,processes,atom,binary,code,ets]), - Str = io_lib:fwrite(?SYSFORM, - [Node,Clock, - Cpu,Tot,Bin, - NProcs,Procs,Code, - RQ,Atom,Ets]) - end, - gs:config(SysInfo,[{label,{text,Str}},{font,?Normal}]). - - -pop(Win,Key) -> - Pop = gs:create(window,Win,[{title,"Config"}, - {width,160},{height,100}]), - gs:create(label,Pop,[{label,{text,txt(Key)}}, - {width,160}]), - gs:create(entry,entry,Pop,[{x,10},{y,30},{width,130}, - {keypress,true}]), - gs:create(button,ok,Pop,[{width,45},{y,60},{x,10}, - {label,{text,"Ok"}}]), - gs:create(button,cancel,Pop,[{width,60},{y,60},{x,80}, - {label,{text,"Cancel"}}]), - gs:config(Pop,{map,true}), - pop_loop(Pop). - -pop_loop(Pop) -> - receive - {gs,entry,keypress,_,['Return'|_]} -> - Str = gs:read(entry,text), - gs:destroy(Pop), - {ok,Str}; - {gs,entry,keypress,_,_} -> % all other keypresses - pop_loop(Pop); - {gs,ok,click,_,_} -> - Str = gs:read(entry,text), - gs:destroy(Pop), - {ok,Str}; - {gs,cancel,click,_,_} -> - gs:destroy(Pop), - {error,cancel}; - X -> - io:format("Got X=~w~n",[X]), - pop_loop(Pop) - end. - -txt(interval) -> "Enter new interval:"; -txt(lines) -> "Enter number of lines:"; -txt(dump) -> "Enter file name:". diff --git a/lib/observer/src/etop_txt.erl b/lib/observer/src/etop_txt.erl index d0612f15b4..f048ff17ca 100644 --- a/lib/observer/src/etop_txt.erl +++ b/lib/observer/src/etop_txt.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2002-2009. All Rights Reserved. +%% Copyright Ericsson AB 2002-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -27,7 +27,6 @@ -include("etop_defs.hrl"). -import(etop,[loadinfo/1,meminfo/2]). --import(etop_gui,[formatmfa/1,to_list/1]). -define(PROCFORM,"~-15w~-20s~8w~8w~8w~8w ~-20s~n"). @@ -99,3 +98,13 @@ writepinfo(Fd,[#etop_proc_info{pid=Pid, writepinfo(_Fd,[]) -> ok. + +formatmfa({M, F, A}) -> + io_lib:format("~w:~w/~w",[M, F, A]); +formatmfa(Other) -> + %% E.g. when running hipe - the current_function for some + %% processes will be 'undefined' + io_lib:format("~w",[Other]). + +to_list(Name) when is_atom(Name) -> atom_to_list(Name); +to_list({_M,_F,_A}=MFA) -> formatmfa(MFA). diff --git a/lib/observer/src/observer.app.src b/lib/observer/src/observer.app.src index e881cb3c97..6d5259624c 100644 --- a/lib/observer/src/observer.app.src +++ b/lib/observer/src/observer.app.src @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2002-2012. All Rights Reserved. +%% Copyright Ericsson AB 2002-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -22,7 +22,6 @@ {modules, [crashdump_viewer, crashdump_viewer_html, etop, - etop_gui, etop_tr, etop_txt, observer, diff --git a/lib/pman/AUTHORS b/lib/pman/AUTHORS deleted file mode 100644 index 5a354526b4..0000000000 --- a/lib/pman/AUTHORS +++ /dev/null @@ -1,9 +0,0 @@ -pman was first implemented for the old X windows interface "pxw" by -Claes Wikstr�m and has since then been rewritten a couple of times by -among others Peter Olin. - -Original Authors and Contributors: - -Claes Wikstr�m -Peter Olin -Gunilla Arendt
\ No newline at end of file diff --git a/lib/pman/Makefile b/lib/pman/Makefile deleted file mode 100644 index 3600504d07..0000000000 --- a/lib/pman/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1996-2009. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -# -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Common Macros -# ---------------------------------------------------- - -SUB_DIRECTORIES = src priv doc/src - -SPECIAL_TARGETS = - -# ---------------------------------------------------- -# Default Subdir Targets -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_subdir.mk - diff --git a/lib/pman/doc/html/.gitignore b/lib/pman/doc/html/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/pman/doc/html/.gitignore +++ /dev/null diff --git a/lib/pman/doc/man3/.gitignore b/lib/pman/doc/man3/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/pman/doc/man3/.gitignore +++ /dev/null diff --git a/lib/pman/doc/pdf/.gitignore b/lib/pman/doc/pdf/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/pman/doc/pdf/.gitignore +++ /dev/null diff --git a/lib/pman/doc/src/Makefile b/lib/pman/doc/src/Makefile deleted file mode 100644 index d9e0317f05..0000000000 --- a/lib/pman/doc/src/Makefile +++ /dev/null @@ -1,116 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1997-2012. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -# -# -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Application version -# ---------------------------------------------------- -include ../../vsn.mk -VSN=$(PMAN_VSN) -APPLICATION=pman - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN) - -# ---------------------------------------------------- -# Target Specs -# ---------------------------------------------------- -XML_APPLICATION_FILES = ref_man.xml -XML_REF3_FILES = pman.xml - -XML_PART_FILES = part.xml part_notes.xml -XML_CHAPTER_FILES = pman_chapter.xml notes.xml - -BOOK_FILES = book.xml - -XML_FILES = \ - $(BOOK_FILES) $(XML_CHAPTER_FILES) \ - $(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES) - -GIF_FILES = \ - main_window.gif \ - trace.gif \ - options.gif - -# ---------------------------------------------------- - -HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \ - $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html) - -INFO_FILE = ../../info - -MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3) - -HTML_REF_MAN_FILE = $(HTMLDIR)/index.html - -TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf - - -# ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- -XML_FLAGS += - -# ---------------------------------------------------- -# Targets -# ---------------------------------------------------- -$(HTMLDIR)/%.gif: %.gif - $(INSTALL_DATA) $< $@ - -docs: pdf html man - -$(TOP_PDF_FILE): $(XML_FILES) - -pdf: $(TOP_PDF_FILE) - -html: gifs $(HTML_REF_MAN_FILE) - -man: $(MAN3_FILES) - -gifs: $(GIF_FILES:%=$(HTMLDIR)/%) - -debug opt: - -clean clean_docs: - rm -rf $(HTMLDIR)/* - rm -f $(MAN3DIR)/* - rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo) - rm -f errs core *~ - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_docs_spec: docs - $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DIR) "$(RELSYSDIR)/doc/html" - $(INSTALL_DATA) $(HTMLDIR)/* \ - "$(RELSYSDIR)/doc/html" - $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)" - $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3" - $(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3" - - -release_spec: diff --git a/lib/pman/doc/src/book.xml b/lib/pman/doc/src/book.xml deleted file mode 100644 index 809015016b..0000000000 --- a/lib/pman/doc/src/book.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE book SYSTEM "book.dtd"> - -<book xmlns:xi="http://www.w3.org/2001/XInclude"> - <header titlestyle="normal"> - <copyright> - <year>1997</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Pman</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev></rev> - </header> - <pagetext>Pman</pagetext> - <preamble> - </preamble> - <parts lift="no"> - <xi:include href="part.xml"/> - </parts> - <applications> - <xi:include href="ref_man.xml"/> - </applications> - <releasenotes> - <xi:include href="notes.xml"/> - </releasenotes> -</book> - diff --git a/lib/pman/doc/src/fascicules.xml b/lib/pman/doc/src/fascicules.xml deleted file mode 100644 index 37feca543f..0000000000 --- a/lib/pman/doc/src/fascicules.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE fascicules SYSTEM "fascicules.dtd"> - -<fascicules> - <fascicule file="part" href="part_frame.html" entry="no"> - User's Guide - </fascicule> - <fascicule file="ref_man" href="ref_man_frame.html" entry="yes"> - Reference Manual - </fascicule> - <fascicule file="part_notes" href="part_notes_frame.html" entry="no"> - Release Notes - </fascicule> - <fascicule file="" href="../../../../doc/print.html" entry="no"> - Off-Print - </fascicule> -</fascicules> - diff --git a/lib/pman/doc/src/main_window.gif b/lib/pman/doc/src/main_window.gif Binary files differdeleted file mode 100644 index e12754631c..0000000000 --- a/lib/pman/doc/src/main_window.gif +++ /dev/null diff --git a/lib/pman/doc/src/main_window.ps b/lib/pman/doc/src/main_window.ps deleted file mode 100644 index c66620c677..0000000000 --- a/lib/pman/doc/src/main_window.ps +++ /dev/null @@ -1,1573 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./main_window.tmp.eps) -%%CreationDate: (Tue Jun 12 18:03:36 2001) -%%BoundingBox: 0 22 377 234 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 22 377 234 -userdict begin -%%BeginData: -DisplayImage -0 22 -377.000000 212.000000 -12 -757 426 -1 -0 -0 -16 -ffffff -000000 -b24d7a -dcadc2 -57253b -0000ff -d9d9d9 -c3c3c3 -bebebe -828282 -000000 -000000 -000000 -000000 -000000 -000000 -03ff03ff03ff0311040003ff03ff03b70400031c04000301021a0400030002ff02ff02b6 -04000300021a04010301021a0400030002ff02ff02b604000300021a04010301021a0400 -030002ff02ff02b604000300021a0401030102020418030004ff04ff04b7030004170202 -040103010202040003ff03ff03e902020401030102020400030002150400030002ff02ff -029e04000300021504000300021504000300020204010301020204000300021504000300 -02ff02ff029e040003000215040003000215040003000202040103010202040003000215 -0400030002ff02ff029e0400030002150400030002150400030002020401030102020400 -030002150400030002ff02ff029e040003000215040003000202030f0202040003000202 -0401030102020400030002150400030002ff0272000302ff022704000300021504000300 -02020300020d040002020400030002020401030102020400030002150400030002d10006 -0202000102060001020600010206000102050000020a00050225000102380001021b0004 -020d00010208000102ee0400030002150400030002020300020d04000202040003000202 -0401030102020400030002150400030002d1000102020002020100020204000202050002 -0206000202040000020900010203000102240001023800010219000102040000020c0001 -0208000102ee0400030002150400030002020300020d0400020204000300020204010301 -02020400030002150400030002d100010203000102010002020400020205000002000001 -02050002020400000208000102050001025e00010218000002070000020b000102f90400 -030002150400030002020300020d04000202040003000202040103010202040003000215 -0400030002d1000102030001020100000200000002030003020500000200000102050000 -020000010203000002030001020100010207000302040000020300030203000102000003 -020400000201000102040003020100010203000002030001020700040202000102000003 -020800040202000402040004020300000203000302010000020300040201000102000003 -020300010201000102040000020200040203000402d30400030002150400030002020300 -020d04000202040003000202040103010202040003000202030f02020400030002d10001 -020300010201000002000001020200000200000102040001020000010205000002000002 -020200000203000102010001020700010200000002040000020200010201000102020002 -020200000204000002010001020300010201000102000001020200020202000002070001 -020200010201000202020001020800010203000102020001020200010202000102020000 -020100010202000002010000020200010205000202020001020200010202000002040000 -02020000020200010201000102d7040003000208030302080400030002020300020d0400 -02020400030002020401030102020400030002020300020d040002020400030002d10001 -020200010202000002000001020200000200000102040000020200010204000002010001 -020200000207000102070001020000010202000002020001020300010201000102030001 -020200000202000102020001020300010200000002020000020000000202000002060001 -020400010200000102030001020800010202000102040001020000010204000102000000 -020200000202000102010000020100010206000102030001020200010202000102020000 -020700010201000102d704000300020803000201040002080400030002020300020d0400 -02020400030002020401030102020400030002020300020d040002020400030002d10005 -020300000201000102000000020100010203000102020001020400000202000102010000 -020700010207000102000001020200000202000102030001020100010203000102020000 -020200010202000102030001020000010201000002000000020100010206000102040001 -020000010203000102080001020200010204000102000001020400010200000002010000 -020200010202000002010001020600010203000102020001020200010202000002070001 -0201000302d504000300020803000201040002080400030002020300020d040002020400 -030002020401030102020400030002020300040e02020400030002d10001020700000201 -000102000000020100010203000102020002020300000202000202000000020700010207 -000102010000020100010202000702010001020400000201000102020001020200070200 -000102000001020000000201000002070001020400010200000102030001020800010202 -000102040001020000010204000102000000020100000201000202010001020100010206 -000102030001020200010203000002010001020400040203000302d30400030002080300 -040202080400030002020300020d04000202040003000202040103010202040003000215 -0400030002d1000102070000020100010200000002010001020300070203000002030001 -020000000207000102070001020100010200000002030001020700010204000102000000 -020300010202000102070000020000000201000102000000020700010204000102000001 -020300010208000102020001020400010200000102040001020000000201000002010000 -020000000201000002020001020600010203000102020001020300010200000002030002 -020100010205000202d20400030002150400030002020300020d04000202040003000202 -0401030102020400030002150400030002d1000102070000020200010202000102020001 -020400010203000002040002020800010205000102020001020000000203000102070001 -020400010200000002030001020200010207000002000000020200000200000002070001 -020400010200000102030001020800010202000102040001020000010204000102010000 -020000020201000202030001020600010203000102020001020300010200000002030001 -020200010206000102d20400030002150400030002020300020d04000202040003000202 -0401030102020400030002150400030002d1000102070000020200010202000102020000 -020600010202000002040002020300010203000102030001020400010205000102030000 -020100010205000102040001020300010203000002010002020200010209000102020001 -020100010203000102080001020300010202000102020001020200010202000102030000 -020700010202000002010001020300010202000102040001020400010202000102010000 -0203000102d20400030002150400030002020300020d0400020204000300020204010301 -02020400030002150400030002d100010207000002070001020100010206000102020000 -020500010203000102040005020500010207000402010001020500010204000102050004 -0201000102030001020a0004020200010203000102080001020400040204000402050003 -020900040201000102030001020200010204000102050003020000010200000502d30400 -030002150400030002020300020d04000202040003000202040103010202040003000215 -0400030002ff02ff029e0400030002150400030002020300020d04000202040003000202 -0401030102020400030002150400030002ff02ff029e0400030002150400030002020300 -040e02020400030002020401030102020400030002150400030002ff02ff029e04000300 -02150400030002150400030002020401030102020400030002150400030002ff02ff029e -0400030002150400030002150400030002020401030102020400030002150400030002ff -02ff029e04000300021504000300021504000300020204010300040403000416030004ff -04ff049f030004160300041603000404030500ff00ff00e80304040003010202040000ff -00ff00e70900030002020401030102020400000106ff06ff06e409010300020204010301 -02020400000106ff06ff06e40901030002020401030102020400000106ff06ff06e40901 -030002020401030102020400000106ff06ff06e409010300020204010301020204000001 -06ff06ff06e409010300020204010301020204000001060b01040604010006030102061f -01000602010006040100062601040633010006020100060c010006ff06ff060201000602 -010006090102061309010300020204010301020204000001060b0100060f0100061f0100 -06020100062e01000635010106010100060c010006ff06ff0602010006020100060b0100 -061309010300020204010301020204000001060b01000606010206050100060301020618 -010006020100060201020603010206020100060201000619010006030100060001010603 -010206030102060301020618010106010100060201020603010106000100060201020603 -010206ff06f501000602010006020102060501000602010006000101060c090103000202 -04010301020204000001060b010006080100060501000602010006020100061801000600 -010006050100060201000602010006010100060201000619010006030101060101000601 -010006020100060101000602010006010100060201000617010006000100060001000601 -01000602010006010100060101010601010006020100060101000602010006ff06f40100 -060201000601010006020100060401000602010106010100060b09010300020204010301 -020204000001060b01030605010006050100060201000602010006180100060001000605 -010006020100060201000601010006000100060001000619010006030100060901000601 -010006050100060201000617010006000100060001000601010006020100060101000602 -010006010100060201000601010006ff06f8010406010100060201000604010006020100 -06020100060b09010300020204010301020204000001060b010006080100060501000602 -010406180100060001000605010006020104060101000600010006000100061901000603 -010006060103060101000605010406170100060101010601010006020100060101000602 -0100060101040602010206ff06f501000602010006010104060401000602010006020100 -060b09010300020204010301020204000001060b0100060801000605010006020100061d -010006060100060201000605010006000100060001000619010006030100060501000602 -01000601010006050100061b010006010101060101000602010006010100060201000601 -01000609010006ff06f401000602010006010100060801000602010006020100060b0901 -0300020204010301020204000001060b0100060801000605010006020100060201000619 -010006060100060201000602010006010100060001000600010006190100060301000605 -010006020100060101000602010006010100060201000617010006020100060101000602 -010006010100060101010601010006020100060101000602010006ff06f4010006020100 -0601010006020100060401000602010106010100060b0901030002020401030102020400 -0001060b0100060801000605010006030102061a01000606010006030102060301000600 -0100061a0100060301000606010306020102060301020618010006020100060201020603 -010106000100060201020603010206ff06f5010006020100060201020605010006020100 -06000101060c0901030002020401030102020400000106ff06ff06d30100060f09010300 -020204010301020204000001060a0106062a0106062a010606ff06ff06470106060e0100 -060f09010300020204010301020204000001060a0106062a0106062a010606ff06ff0647 -0106060e0100060f0901030002020401030102020400000106ff06ff06e4090103000202 -0401030102020400000106ff06ff06e40901030002020401030102020400000106ff06ff -06e40901030002020401030102020400000109ff09ff09e6030002020401030102020400 -000009ff09ff09e703000202040103010202040006ff06ff06e803000202040103010202 -040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202 -040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202 -040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202 -040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202 -040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202 -040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202 -040006ff06ff06e803000202040103010202040006ff06ff06e803000202040103010202 -040006ff06ff06e8030002020401030102020400060005ff05ff05d40912030002020401 -030102020400060005000849050108d50501089005010858050108670501085709110000 -030002020401030102020400060005000849050108d50501089005010858050108670501 -085709010706090007060001030002020401030102020400060005000849050108d50501 -089005010858050108670501085709010705000009000706000103000202040103010202 -040006000500080105030805050008060500083405010802050208270500080a05040818 -050008060500087405010801050008020500088905010800050008030500085105010801 -0503080d0500085205010802050208050500084a09010705000009010705000103000202 -0401030102020400060005000801050008020500080c0500083405010801050008020500 -08260500080a0500081c0500087c05010801050108010500088905010800050008030500 -085105010801050008020500080c05000852050108010500080205000850090107040001 -090107050001030002020401030102020400060005000801050008020500080205020803 -050108000500083405010801050008020500080105000802050008010500080005010802 -050008000501080305020802050008000501080205040808050008050500080205000801 -050008000501080305020802050408020502080305020802050008000501086605010801 -050108010500080205020802050108000500080305020875050108000501080105010802 -0502080305010800050008020502083d0501080105000802050008020502080305010800 -050008020502084c050108010500080605020802050408020502083c0901070400010600 -090107040001030002020401030102020400060005000801050008020500080405000802 -050008010501083405010801050008050500080205000801050108010500080105010801 -05000801050008020500080105010801050008030500080a050008050500080205000801 -050108010500080105000802050008030500080605000802050008020500080105010801 -050008650501080105000800050008000500080105000802050008010500080005000800 -050008010500080205000874050108000501080105010801050008020500080105000801 -05010801050008020500083c050108010500080205000801050008020500080105000801 -05010801050008020500084b05010802050008070500080605000801050008020500083b -090107030001060109010704000103000202040103010202040006000500080105030805 -050008020500080205000834050108010500080505000802050008010500080505000805 -050008020500080105000802050008030500080a05030802050008020500080105000802 -050008010500080705000806050008020500080205000801050008020500086505010801 -050008000500080005000805050008010500080005000800050008010500080205000874 -050108000500080005010800050008010500080505000802050008010500084005010801 -05030802050008020500080105000802050008010500084f050108030501080505000805 -05000802050008020500083b090107030001060209010703000103000202040103010202 -040006000500080105000808050008020500080205000834050108010500080505000802 -0500080105000805050008050504080105000802050008030500080a0500080505000802 -050008010500080205000801050008070500080605000802050008020500080105000802 -050008650501080105000801050108020503080105000800050008000500080105040874 -050108000500080005010800050008020502080205000802050008020502083d05010801 -05000801050008020504080105000802050008020502084c050108050500080405000804 -050008030504083b09010702000106030901070300010300020204010301020204000600 -050008010500080805000802050008020500083405010801050008020500080105000802 -0500080105000805050008050500080505000802050008030500080a0500080505000802 -050008010500080205000801050008070500080605000802050008020500080105000802 -050008650501080105000801050108010500080205000801050008000500080005000801 -050008780501080005000803050008050500080105000802050008050500083c05010801 -05000802050008010500080505000802050008050500084b050108010500080205000804 -05000803050008040500083f090107020001060409010702000103000202040103010202 -040006000500080105000808050008020500080105010834050108010500080205000801 -05000801050108010500080505000805050008020500080105000802050008030500080a -050008050500080105010801050008020500080105000802050008030500080605000802 -050008020500080105000802050008650501080105000802050008010500080205000801 -050008000500080005000801050008020500087405010800050008030500080105000802 -050008010500080105010801050008020500083c05010801050008020500080105000802 -050008010500080105010801050008020500084b05010801050008020500080405000802 -05000805050008020500083b090107010001060509010702000103000202040103010202 -040006000500080105000808050008030501080005000834050108020502080305010800 -050008010500080505000806050208020500080205000804050108080500080605010800 -050008010500080205000802050208050501080405000803050208020500080205000865 -050108010500080205000802050308010500080005000800050008020502087505010800 -05000803050008020502080305010800050008020502083d050108010500080205000802 -0502080305010800050008020502084c050108020502080505000802050408020502083c -0901070100010606090107010001030002020401030102020400060005000849050108d5 -050108900501081305000843050108670501085709010700000106070901070100010300 -02020401030102020400060005000849050108d5050108900501080f0500080205000843 -050108670501085709010700000106080901070000010300020204010301020204000600 -05000849050108d5050108900501081005020844050108670501085709010001090b0700 -0001030002020401030102020400060005000849050108d5050108900501085805010867 -0501085709010000090d0001030002020401030102020400060005000849050108d50501 -08900501085805010867050108570901070e000103000202040103010202040006000500 -0849050108d5050108900501085805010867050108570901001003000202040103010202 -0400060005000849050108d5050108900501085805010867050108570901000d09000001 -030002020401030102020400060005ff05ff05d409010001060a09010001030002020401 -030102020400060001ff01ff01d409010001060a09010001030002020401030102020400 -060001000849010108d50101089001010858010108670101085709010001060a09010001 -030002020401030102020400060001000849010108d50101089001010858010108670101 -085709010001060a09010001030002020401030102020400060001000805010008230100 -081d010108440100088f0101089001010858010108670101085709010001060a09010001 -030002020401030102020400060001000804010008040101080b0101080b010108020100 -081c010108040100080c010008040100080b0102081b010008030100088a010108040100 -080c01000804010008760101080301010852010108020102080301020806010008520101 -080201020803010208020104084209010001060a09010001030002020401030102020400 -060001000803010008040100080101000809010008010100080901000801010008020100 -081b010108180100080d0100081a010008030101088a0101081801000876010108020100 -080101000851010108010100080201000801010008020100080401010852010108010100 -0802010008010100080201000801010008020100084209010001060a0901000103000202 -040103010202040006000100080201000805010008010100080901000801010008090100 -0801010008030100081a0101080201020802010008000101080301020802010408030101 -0805010008030102080301020802010008000101080501000802010008000100088a0101 -080201020802010008000101080301020802010408740101080201000801010008510101 -080101000802010008010100080701000800010008520101080101000805010008020100 -08050100084209010001060a090100010300020204010301020204000600010008010100 -080601000801010008090100080101000809010008010100080401000819010108040100 -080201010801010008040100080401000805010108050100080201000802010008010100 -0802010008010101080101000803010008050100088a0101080401000802010108010100 -080401000804010008760101080201000801010008510101080101000802010008010100 -08060100080101000852010108010100080501000802010008040100084309010001060a -090100010300020204010301020204000600010008000100080701000801010008090100 -080101000809010008010100080501000818010108040100080201000802010008040100 -08040100080d010008020100080201000801010008020100080101000802010008030100 -08050100088a010108040100080201000802010008040100080401000876010108020100 -080101000851010108020103080101030802010008020100085201010801010308030103 -08040100084309010001060a090100010300020204010301020204000600010008010100 -080601000801010008090100080101000809010008010100080401000819010108040100 -08020100080201000804010008040100080d010008020100080201000801010008020100 -08010100080201000802010008060100088a010108040100080201000802010008040100 -080401000876010108020100080101000851010108050100080101000802010008010100 -080201000852010108010100080201000805010008040100084309010001060a09010001 -030002020401030102020400060001000802010008050100080101000809010008010100 -080901000801010008030100081a01010804010008020100080201000804010008040100 -080d01000802010008020100080101000802010008010100080201000802010008060100 -088a01010804010008020100080201000804010008040100087601010802010008010100 -085101010805010008010100080201000801010508510101080101000802010008050100 -08030100084409010001060a090100010300020204010301020204000600010008030100 -080401000801010008030101080301000801010008030101080301000801010008020100 -081b01010804010008020100080201000804010008040100080501010805010008020100 -08020100080101000802010008010101080101000801010008070100088a010108040100 -080201000802010008040100080401000876010108020100080101000851010108010100 -080201000801010008020100080501000852010108010100080201000801010008020100 -08030100084409010001060a090100010300020204010301020204000600010008040100 -080401010804010108040101080401010804010108020100081c01010804010008020100 -080201000804010008050101080301010805010008030102080301020802010008000101 -080201000805010408880101080401000802010008020100080401000805010108740101 -080301010852010108020102080301020806010008520101080201020803010208040100 -084409010001060a09010001030002020401030102020400060001000805010008230100 -081d010108390100089a0101089001010858010108670101085709010001060a09010001 -030002020401030102020400060001000849010108390100089a01010890010108580101 -08670101085709010001060a090100010300020204010301020204000600010008490101 -08390100089a0101089001010858010108670101085709010001060a0901000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -0001060a09010001030002020401030102020400060001000849010108d5010108900101 -0858010108670101085709010001060a0901000103000202040103010202040006000100 -0849010108d50101089001010858010108670101085709010001060a0901000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -0001060a09010001030002020401030102020400060001ff01ff01d409010001060a0901 -0001030002020401030102020400060001ff01ff01d409010001060a0901000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -0001060a09010001030002020401030102020400060001000849010108d5010108900101 -0858010108670101085709010001060a0901000103000202040103010202040006000100 -0805010008230100081d0101089101000842010108900101085801010867010108570901 -0001060a09010001030002020401030102020400060001000804010008040101080a0102 -080b010108020100081c010108100102081a0100081101020814010008170102081b0100 -08010104083b010108100102081a01000811010208140100083501010803010108520101 -08020102080301020803010208030102084c010108030100080401020803010208060100 -083b09010001060a09010001030002020401030102020400060001000803010008040100 -080101000808010008020100080901000801010008020100081b010108120100082f0100 -0814010008190100081a010008020100083f010108120100082f01000814010008350101 -080201000801010008510101080101000802010008010100080201000801010008020100 -0801010008020100084b0101080201010803010008020100080101000802010008040101 -083b09010001060a09010001030002020401030102020400060001000802010008050100 -08010100080c0100080901000801010008030100081a0101080201020802010008000101 -0805010008090100080001010802010008000101080301020802010108000100080c0100 -080301020803010208030101080001000802010208020100080001010804010108050100 -080301020803010208020100080001010805010008020100083f01010802010208020100 -080001010805010008090100080001010802010008000101080301020802010108000100 -080c01000803010208030102080301010800010008020102080201000800010108280101 -0802010008010100085101010801010008020100080101000809010008050100084b0101 -08010100080001000803010008050100080201000803010008000100083b09010001060a -0901000103000202040103010202040006000100080101000806010008010100080c0100 -080901000801010008040100081901010801010008020100080101010801010008040100 -0809010108010100080101010801010008040100080201000800010008000100080b0100 -080201000802010008010100080201000801010008010101080101000802010008010101 -080101000803010108050100080201000802010008010100080201000801010108010100 -0803010008030103083c0101080101000802010008010101080101000804010008090101 -08010100080101010801010008040100080201000800010008000100080b010008020100 -080201000801010008020100080101000801010108010100080201000801010108010100 -082701010802010008010100085101010801010008020100080101000809010008050100 -084b0101080301000803010008050100080201000802010008010100083b09010001060a -0901000103000202040103010202040006000100080001000807010008010100080b0100 -080a01000801010008050100081801010801010008020100080101000808010008090100 -080201000801010008080100080201000800010008000100080b01000802010008020100 -080501000801010008020100080101000802010008010100080f01000802010008020100 -080101000802010008010100080201000803010008070100083b01010801010008020100 -080101000808010008090100080201000801010008080100080201000800010008000100 -080b01000802010008020100080501000801010008020100080101000802010008010100 -082b010108020100080101000851010108020102080201030805010008050100084c0101 -0803010008030103080301020802010008020100083b09010001060a0901000103000202 -040103010202040006000100080101000806010008010100080a0100080b010008010100 -080401000819010108010104080101000808010008090100080201000801010008080100 -080201000800010008000100080b01000802010008020100080201030801010008020100 -0801010408010100080f0100080201000802010008010100080201000801010008020100 -0802010008080100083b0101080101040801010008080100080901000802010008010100 -08080100080201000800010008000100080b010008020100080201000802010308010100 -080201000801010408010100082b01010802010008010100085101010801010008020100 -08010100080201000803010008050100084d010108030100080301000802010008010100 -080201000801010008020100083b09010001060a09010001030002020401030102020400 -0600010008020100080501000801010008090100080c01000801010008030100081a0101 -080101000805010008080100080901000802010008010100080801000802010008000100 -08000100080b010008020100080201000801010008020100080101000802010008010100 -08050100080f010008020100080201000801010008020100080101000802010008020100 -0804010008020100083b0101080101000805010008080100080901000802010008010100 -08080100080201000800010008000100080b010008020100080201000801010008020100 -08010100080201000801010008050100082b010108020100080101000851010108010100 -0802010008010100080201000802010008050100084e0101080301000803010008020100 -080101000802010008010105083a09010001060a09010001030002020401030102020400 -060001000803010008040100080101000803010108020100080701010803010008010100 -08020100081b010108010100080201000801010008080100080901010801010008010100 -08080100080201000800010008000100080b010008020100080201000801010008020100 -080101000801010108010100080201000801010008070101080501000802010008020100 -08010100080201000801010108010100080101000805010008020100083b010108010100 -080201000801010008080100080901010801010008010100080801000802010008000100 -08000100080b010008020100080201000801010008020100080101000801010108010100 -0802010008010100082b0101080201000801010008510101080101000802010008010100 -080201000801010008050100084f01010803010008030100080201000801010008020100 -08050100083b09010001060a090100010300020204010301020204000600010008040100 -080401010804010108020104080301010804010108020100081c01010802010208020100 -0808010008090100080001010802010008080100080201000800010008000100080b0100 -080301020803010308020101080001000802010208020100080701010805010008030102 -0803010208020100080001010802010008060102083c0101080201020802010008080100 -08090100080001010802010008080100080201000800010008000100080b010008030102 -0803010308020101080001000802010208020100082b0101080301010852010108020102 -080301020802010408010104084b010108010104080201020803010208060100083b0901 -0001060a09010001030002020401030102020400060001000805010008230100081d0101 -08150105080101000819010508470100084d010108150105080101000819010508510101 -0858010108670101085709010001060a0901000103000202040103010202040006000100 -08490101081d010008670100084d0101081d010008710101085801010867010108570901 -0001060a090100010300020204010301020204000600010008490101081d010008670100 -084d0101081d0100087101010858010108670101085709010001060a0901000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -0001060a09010001030002020401030102020400060001000849010108d5010108900101 -0858010108670101085709010001060a0901000103000202040103010202040006000100 -0849010108d50101089001010858010108670101085709010001060a0901000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -0001060a09010001030002020401030102020400060001ff01ff01d409010001060a0901 -0001030002020401030102020400060001ff01ff01d409010001060a0901000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -0001060a09010001030002020401030102020400060001000849010108d5010108900101 -0858010108670101085709010001060a0901000103000202040103010202040006000100 -0805010008230100081d010108670100086c010108900101085801010867010108570901 -0001060a09010001030002020401030102020400060001000804010008040101080d0100 -080a010108020100081c0101083b0100080b0102081b01000805010008650101082c0102 -086001010803010108520101080301000804010208030102085301010801010408030100 -08040102084309010001060a090100010300020204010301020204000600010008030100 -0804010008010100080b0101080901000801010008020100081b0101083b0100080d0100 -081a01000805010108650101082e01000860010108020100080101000851010108020101 -080301000802010008010100080201000852010108010100080601010803010008020100 -084209010001060a09010001030002020401030102020400060001000802010008050100 -08010100080a010008000100080901000801010008030100081a01010802010108000100 -080201020802010008000101080a01020802010008020100080201020802010008000101 -080201040803010108050100080301020803010208020100080001010805010008040100 -080001000865010108020102080201000800010108020100080001010803010208020100 -08000101080c010008030102080301010800010008020101080001000802010208020100 -08000101083d010108020100080101000851010108010100080001000803010008090100 -085201010801010008050100080001000803010008020100084209010001060a09010001 -030002020401030102020400060001000801010008060100080101000809010008010100 -080901000801010008040100081901010801010008010101080101000802010008010101 -080101000808010008020100080101000802010008010100080201000801010108010100 -080301000805010108050100080201000802010008010100080201000801010108010100 -080301000804010008010100086501010801010008020100080101010801010008010101 -0801010008010100080201000801010108010100080b0100080201000802010008010100 -08010101080101000801010108010100080201000801010108010100083c010108020100 -080101000851010108030100080301000809010008520101080101030804010008030100 -08020100084209010001060a090100010300020204010301020204000600010008000100 -080701000801010008080100080201000809010008010100080501000818010108010100 -080201000801010008020100080101000802010008080100080201000801010008020100 -0801010008020100080101000802010008030100080d0100080201000802010008010100 -080201000801010008020100080301000803010008020100086501010801010008020100 -0801010008050100080501000802010008010100080f0100080201000802010008010100 -080201000801010008020100080101000802010008010100084001010802010008010100 -085101010803010008030103080501000853010108050100080301000804010308420901 -0001060a0901000103000202040103010202040006000100080101000806010008010100 -080801000802010008090100080101000804010008190101080101000802010008010104 -080101000802010008080104080201000800010008020104080101000802010008030100 -080d01000802010008020100080101000802010008010100080201000802010008040100 -0802010008650101080101040801010008050100080501000802010008010100080f0100 -080201000802010008010100080201000801010008020100080101040801010008400101 -080201000801010008510101080301000803010008020100080301000854010108050100 -0803010008070100084209010001060a0901000103000202040103010202040006000100 -08020100080501000801010008080105080801000801010008030100081a010108010100 -080201000801010008050100080201000808010008060100080001000802010008050100 -0802010008030100080d0100080201000802010008010100080201000801010008020100 -080201000804010508640101080101000805010008050100080501000802010008010100 -080f01000802010008020100080101000802010008010100080201000801010008050100 -084001010802010008010100085101010803010008030100080201000802010008550101 -08010100080201000803010008070100084209010001060a090100010300020204010301 -020204000600010008030100080401000801010008030101080601000803010108030100 -0801010008020100081b0101080101000801010108010100080201000801010008020100 -080801000802010008030100080301000802010008010100080201000803010008050101 -080501000802010008020100080101000802010008010101080101000801010008090100 -0865010108010100080201000801010008050100080501000802010008010100080f0100 -080201000802010008010100080101010801010008010101080101000802010008010100 -084001010802010008010100085101010803010008030100080201000801010008560101 -0801010008020100080301000803010008020100084209010001060a0901000103000202 -040103010202040006000100080401000804010108040101080601000803010108040101 -08020100081c010108020101080001000802010208020100080201000809010208040100 -080401020802010008020100080401010803010108050100080301020803010208020100 -080001010802010008090100086501010802010208020100080501000806010208020100 -080f01000803010208030101080001000802010108000100080201020802010008400101 -080301010852010108010104080201020802010408520101080201020802010408020102 -084309010001060a09010001030002020401030102020400060001000805010008230100 -081d010108050100080e01050840010008770101082301050813010008050100084a0101 -0858010108670101085709010001060a0901000103000202040103010202040006000100 -084901010801010008020100085501000877010108390100080201000801010008020100 -084a01010858010108670101085709010001060a09010001030002020401030102020400 -0600010008490101080201020856010008770101083a010208030102084b010108580101 -08670101085709010001060a090100010300020204010301020204000600010008490101 -08d50101089001010858010108670101085709010001060a090100010300020204010301 -02020400060001000849010108d50101089001010858010108670101085709010001060a -09010001030002020401030102020400060001000849010108d501010890010108580101 -08670101085709010001060a090100010300020204010301020204000600010008490101 -08d50101089001010858010108670101085709010001060a090100010300020204010301 -02020400060001ff01ff01d409010001060a090100010300020204010301020204000600 -00ff00ff00d409010001060a090100010300020204010301020204000600000008490001 -08d50001089000010858000108670001085709010001060a090100010300020204010301 -02020400060000000849000108d50001089000010858000108670001085709010001060a -09010001030002020401030102020400060000000805000008230000081d0001086e0000 -08650001089000010858000108670001085709010001060a090100010300020204010301 -0202040006000000080400000804000108090004080a000108020000081c0001084f0002 -081b000008020002085f000108170002080500000812000008060000082e000008120002 -080300020805000108030001085200010805000008020002080400010853000108030000 -080400020803000208060000083b09010001060a09010001030002020401030102020400 -0600000008030000080400000801000008080000080d00000801000008020000081b0001 -08510000081a00000802000008020000085e000108190000081900000836000008140000 -080500000805000108020000080100000851000108040001080100000802000008020000 -0801000008520001080200010803000008020000080100000802000008040001083b0901 -0001060a0901000103000202040103010202040006000000080200000805000008010000 -08080000080d00000801000008030000081a000108020001080000000802000208020000 -08000001080a000208030002080200000800000108020000080200000802000208020000 -080000010804000108050000080300020803000208020000080000010805000008020000 -086200010802000208020000080000010802000008000001080500000803000208030002 -080300020802000408020002080300020802000008000001080a00020803000208020000 -080000010802000408010000080000010803000208050000080500000803000308020000 -080100000851000108030000080000000805000008020000080100000852000108010000 -080000000803000008050000080200000803000008000000083b09010001060a09010001 -0300020204010301020204000600000008010000080600000801000008080003080a0000 -080100000804000008190001080100000801000108010000080200000801000108010000 -080800000802000008010000080200000801000108010000080100000802000008010000 -080200000801000108010000080300010805000008020000080200000801000008020000 -080100010801000008030000080300000862000108010000080200000801000108010000 -080100010801000008040000080500000802000008020000080100000802000008030000 -080600000802000008020000080100010801000008080000080200000801000008020000 -080100010801000008030000080300010801000008010000080200000804000008050000 -080200000801000108020000080100000851000108020000080100000805000008020000 -0801000008520001080300000803000008050000080200000802000008010000083b0901 -0001060a0901000103000202040103010202040006000000080000000807000008010000 -080c00000809000008010000080500000818000108010000080200000801000008020000 -080100000802000008080000080500000802000008010000080500000802000008010000 -0802000008010000080f0000080200000802000008010000080200000801000008020000 -0803000008030003085f0001080500000801000008020000080100000802000008040000 -080500000802000008090000080300000806000008020000080200000801000008020000 -080800000805000008020000080100000802000008030000080300000805000008020000 -080400000805000008020000080100010802000008010000085100010801000008020000 -080300010803000008010000085200010803000008030003080300020802000008020000 -083b09010001060a09010001030002020401030102020400060000000801000008060000 -08010000080c000008090000080100000804000008190001080100000802000008010004 -080100000802000008090002080200040801000008060000080000000802000408010000 -080f00000802000008020000080100000802000008010000080200000802000008040000 -08020000085e000108020003080100000802000008010000080200000804000008050000 -080200000806000308030000080600000802000008020000080100000802000008080000 -080500000802000008010000080200000803000008030000080500000802000008040000 -080500000802000408020000080100000851000108010000080200000805000008020000 -080100000852000108030000080300000802000008010000080200000801000008020000 -083b09010001060a09010001030002020401030102020400060000000802000008050000 -080100000808000008020000080900000801000008030000081a00010801000008020000 -080100000805000008020000080c00000801000008050000080600000800000008020000 -08050000080f000008020000080200000801000008020000080100000802000008020000 -0804000008020000085e0001080100000802000008010000080200000801000008020000 -080400000805000008020000080500000802000008030000080600000802000008020000 -080100000802000008080000080500000802000008010000080200000803000008030000 -080500000802000008040000080500000802000008010001080200000801000008510001 -080100050804000008020000080100000852000108030000080300000802000008010000 -0802000008010005083a09010001060a0901000103000202040103010202040006000000 -080300000804000008010000080300010802000008020000080300010803000008010000 -08020000081b000108010000080100010801000008020000080100000802000008080000 -080200000801000008020000080100000807000008030000080200000801000008070001 -080500000802000008020000080100000802000008010001080100000801000008050000 -08020000085e000108010000080200000801000108010000080100010801000008040000 -080500000802000008020000080100000802000008030000080600000802000008020000 -080100000802000008080000080200000801000008020000080100000802000008030000 -080300000805000008020000080400000805000008020000080100010802000008010000 -085100010805000008010000080200000802000008010000085200010803000008030000 -08020000080100000802000008050000083b09010001060a090100010300020204010301 -020204000600000008040000080400010804000108030002080400010804000108020000 -081c00010802000108000000080200020802000008020000080900020803000208020000 -080700000804000208020000080700010805000008030002080300020802000008000001 -0802000008060002085f0001080200030801000008000001080200000800000108050000 -080500000803000208030003080400010804000008030002080200000802000008090002 -080300020802000008020000080400010801000008060002080500000805000008030003 -080300010852000108050000080200020804000108530001080100040802000208030002 -08060000083b09010001060a090100010300020204010301020204000600000008050000 -08230000081d000108050000080e000508470000087000010808000008050000083c0005 -083c00010858000108670001085709010001060a09010001030002020401030102020400 -06000000084900010801000008020000085c0000087000010808000008050000087f0001 -0858000108670001085709010001060a0901000103000202040103010202040006000000 -0849000108020002085d0000087000010808000008050000087f00010858000108670001 -085709010001060a09010001030002020401030102020400060000000849000108d50001 -089000010858000108670001085709010001060a09010001030002020401030102020400 -060000000849000108d50001089000010858000108670001085709010001060a09010001 -030002020401030102020400060000000849000108d50001089000010858000108670001 -085709010001060a09010001030002020401030102020400060000000849000108d50001 -089000010858000108670001085709010001060a09010001030002020401030102020400 -060000ff00ff00d409010001060a09010001030002020401030102020400060001ff01ff -01d409010001060a09010001030002020401030102020400060001000849010108d50101 -089001010858010108670101085709010001060a09010001030002020401030102020400 -060001000849010108d50101089001010858010108670101085709010001060a09010001 -030002020401030102020400060001000805010008230100081d010108c90100080a0101 -089001010858010108670101085709010001060a09010001030002020401030102020400 -060001000804010008040101080a0102080b010108020100081c01010817010208050100 -0812010008060100082e01000829010008110102081b0100080201020804010108900101 -08030101085201010803010008040102085a010108020102080301020804010108430901 -0001060a0901000103000202040103010202040006000100080301000804010008010100 -0808010008020100080901000801010008020100081b0101081901000819010008360100 -083e0100081a010008020100080201000803010108900101080201000801010008510101 -080201010803010008020100085901010801010008020100080101000802010008020100 -08010100084209010001060a090100010300020204010301020204000600010008020100 -080501000801010008080100080d01000801010008030100081a01010802010208020100 -080001010802010008000101080501000803010208030102080301020802010408020102 -080301020802010008000101080901010800010008030102080301020802010408020102 -080201000800010108040101080201010800010008030102080301020802010008000101 -080c01000803010208030102080201000800010108050100080601000803010108900101 -080201000801010008510101080101000800010008070100085901010805010008050100 -0802010008010100084209010001060a0901000103000202040103010202040006000100 -08010100080601000801010008080100080d010008010100080401000819010108010100 -080201000801010108010100080101010801010008040100080501000802010008020100 -080101000802010008030100080601000802010008020100080101010801010008080100 -080001000800010008010100080201000801010008020100080301000803010008020100 -080101010801010008030101080201000800010008000100080101000802010008040100 -0802010108010100080b0100080201000802010008010100080201000801010108010100 -080301000807010008030101089001010802010008010100085101010803010008070100 -0859010108050100080501000802010008010100084209010001060a0901000103000202 -04010301020204000600010008000100080701000801010008080103080a010008010100 -080501000818010108050100080101000802010008010100080201000804010008050100 -080201000809010008030100080601000802010008020100080101000802010008080100 -0800010008000100080501000801010008070100080301000802010008010100080c0100 -080001000800010008050100080401000802010008020100080b01000802010008020100 -080101000802010008010100080201000803010008060100080401010890010108020100 -08010100085101010803010008060100085a010108030101080501000803010008010100 -084209010001060a09010001030002020401030102020400060001000801010008060100 -080101000808010008020100080901000801010008040100081901010802010308010100 -080201000801010008020100080401000805010008020100080601030803010008060100 -080201000802010008010100080201000808010008000100080001000802010308020102 -080401000803010408010100080c01000800010008000100080201030804010008020100 -08020100080b010008020100080201000801010008020100080101000802010008020100 -0806010008050101089001010802010008010100085101010803010008050100085b0101 -08050100080301000804010008010100084209010001060a090100010300020204010301 -020204000600010008020100080501000801010008080100080201000809010008010100 -08030100081a010108010100080201000801010008020100080101000802010008040100 -080501000802010008050100080201000803010008060100080201000802010008010100 -080201000808010008000100080001000801010008020100080501000803010008030100 -08050100080c010008000100080001000801010008020100080401000802010008020100 -080b01000802010008020100080101000802010008010100080201000802010008050100 -08060101089001010802010008010100085101010803010008040100085c010108050100 -080201000805010008010100084209010001060a09010001030002020401030102020400 -060001000803010008040100080101000803010108020100080201000803010108030100 -0801010008020100081b0101080101000802010008010101080101000801010108010100 -080401000805010008020100080201000801010008020100080301000806010008020100 -080201000801010008020100080801000800010008000100080101000802010008010100 -080201000803010008030100080201000801010008070101080201000800010008000100 -0801010008020100080401000802010008020100080b0100080201000802010008010100 -080201000801010108010100080101000805010008070101089001010802010008010100 -085101010803010008030100085d01010801010008020100080101000806010008010100 -084209010001060a09010001030002020401030102020400060001000804010008040101 -0804010108030102080401010804010108020100081c0101080201030801010008000101 -080201000800010108050100080501000803010208030103080401010804010008030102 -080201000802010008080100080001000800010008020103080201020805010108020102 -080201000807010108020100080001000800010008020103080401000802010008020100 -080b01000803010208030102080201000800010108020100080501040803010108900101 -080301010852010108010104080101040859010108020102080201040803010108430901 -0001060a09010001030002020401030102020400060001000805010008230100081d0101 -0808010008050100083c0105084d01050816010008150101089001010858010108670101 -085709010001060a09010001030002020401030102020400060001000849010108080100 -0805010008ad010008150101089001010858010108670101085709010001060a09010001 -0300020204010301020204000600010008490101080801000805010008ad010008150101 -089001010858010108670101085709010001060a09010001030002020401030102020400 -060001000849010108d50101089001010858010108670101085709010001060a09010001 -030002020401030102020400060001000849010108d50101089001010858010108670101 -085709010001060a09010001030002020401030102020400060001000849010108d50101 -089001010858010108670101085709010001060a09010001030002020401030102020400 -060001000849010108d50101089001010858010108670101085709010001060a09010001 -030002020401030102020400060001ff01ff01d409010001060a09010001030002020401 -030102020400060001ff01ff01d409010001060a09010001030002020401030102020400 -060001000849010108d50101089001010858010108670101085709010001060a09010001 -030002020401030102020400060001000849010108d50101089001010858010108670101 -085709010001060a09010001030002020401030102020400060001000805010008230100 -081d010108bb010008180101089001010858010108670101085709010001060a09010001 -03000202040103010202040006000100080401000804010108090104080a010108020100 -081c010108170102080501000812010008060100082e0100081901020821010008040100 -0807010008050100081101010890010108030101085201010805010008020102085a0101 -080201020803010208030102084309010001060a09010001030002020401030102020400 -060001000803010008040100080101000808010008020100080901000801010008020100 -081b0101081901000819010008360100081b010008270100080601000805010108110101 -089001010802010008010100085101010804010108010100080201000859010108010100 -0802010008010100080201000801010008020100084209010001060a0901000103000202 -040103010202040006000100080201000805010008010100080c01000809010008010100 -08030100081a010108020102080201000800010108020100080001010805010008030102 -080301020803010208020104080201020803010208020100080001010809010108000100 -080301020803010208020104080201020802010008000101080401010805010008030102 -080301020802010008000101080a01020802010408040100080401000800010008110101 -089001010802010008010100085101010803010008000100080501000859010108050100 -080101000802010008010100084609010001060a09010001030002020401030102020400 -06000100080101000806010008010100080b0100080a0100080101000804010008190101 -080101000802010008010101080101000801010108010100080401000805010008020100 -080201000801010008020100080301000806010008020100080201000801010108010100 -080801000800010008000100080101000802010008010100080201000803010008030100 -080201000801010108010100080301010805010008020100080201000801010008020100 -0801010108010100080b0100080401000805010008040100080101000811010108900101 -080201000801010008510101080201000801010008050100085901010805010008010100 -0802010008010100084609010001090c0001030002020401030102020400060001000800 -01000807010008010100080b0100080a0100080101000805010008180101080501000801 -010008020100080101000802010008040100080501000802010008090100080301000806 -010008020100080201000801010008020100080801000800010008000100080501000801 -010008070100080301000802010008010100080f01000802010008020100080101000802 -01000801010008020100080b010008040100080501000803010008020100081101010890 -0101080201000801010008510101080101000802010008040100085a0101080401000803 -010208020103084309010000090d00010300020204010301020204000600010008010100 -0806010008010100080b0100080a01000801010008040100081901010802010308010100 -080201000801010008020100080401000805010008020100080601030803010008060100 -080201000802010008010100080201000808010008000100080001000802010308020102 -080401000803010408010100080f01000802010008020100080101000802010008010100 -08020100080b010008040100080401000804010008020100081101010890010108020100 -0801010008510101080101000802010008030100085b0101080301000803010008020100 -080101000802010008420901070e00010300020204010301020204000600010008020100 -0805010008010100080a0100080b01000801010008030100081a01010801010008020100 -080101000802010008010100080201000804010008050100080201000805010008020100 -080301000806010008020100080201000801010008020100080801000800010008000100 -080101000802010008050100080301000803010008050100080f01000802010008020100 -08010100080201000801010008020100080b010008040100080401000804010508100101 -089001010802010008010100085101010801010508010100085c01010802010008040100 -08020100080101000802010008420901070e000103000202040103010202040006000100 -080301000804010008010100080301010804010008050101080301000801010008020100 -081b01010801010008020100080101010801010008010101080101000804010008050100 -080201000802010008010100080201000803010008060100080201000802010008010100 -080201000808010008000100080001000801010008020100080101000802010008030100 -080301000802010008010100080701010805010008020100080201000801010008020100 -0801010108010100080b0100080401000803010008090100081101010890010108020100 -08010100085101010805010008010100085d010108010100080501000802010008010100 -0802010008420901070e0001030002020401030102020400060001000804010008040101 -0804010108040100080501010804010108020100081c0101080201030801010008000101 -080201000800010108050100080501000803010208030103080401010804010008030102 -080201000802010008080100080001000800010008020103080201020805010108020102 -08020100080701010805010008030102080301020802010008000101080c010008050101 -080101000809010008110101089001010803010108520101080501000801010408590101 -08010104080201020803010208430901070e000103000202040103010202040006000100 -0805010008230100081d01010808010008050100083c01050847010008040105082d0101 -08900101085801010867010108570901070e000103000202040103010202040006000100 -084901010808010008050100088a01000838010108900101085801010867010108570901 -070e000103000202040103010202040006000100084901010808010008050100088a0100 -0838010108900101085801010867010108570901070e0001030002020401030102020400 -060001000849010108d5010108900101085801010867010108570901070e000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -070e0001030002020401030102020400060001000849010108d501010890010108580101 -0867010108570901070e0001030002020401030102020400060001000849010108d50101 -08900101085801010867010108570901070e0001030002020401030102020400060001ff -01ff01d40901070e0001030002020401030102020400060001ff01ff01d40901070e0001 -030002020401030102020400060001000849010108d50101089001010858010108670101 -08570901070e0001030002020401030102020400060001000849010108d5010108900101 -085801010867010108570901070e00010300020204010301020204000600010008050100 -08230100081d0101086e01000865010108900101085801010867010108570901070e0001 -030002020401030102020400060001000804010008040101080a0102080b010108020100 -081c0101084f0102081b010008020102085f010108010100082201020867010108030101 -085201010801010408030101080601000852010108030100080401020803010208060100 -083b0901070e000103000202040103010202040006000100080301000804010008010100 -0808010008020100080901000801010008020100081b010108510100081a010008020100 -08020100085e010108010100082401000867010108020100080101000851010108010100 -080601000801010008040101085201010802010108030100080201000801010008020100 -08040101083b0901070e0001030002020401030102020400060001000802010008050100 -080101000808010008020100080901000801010008030100081a01010802010108000100 -080201020802010008000101080a01020803010208020100080001010802010008020100 -080201020802010008000101080401010805010008030102080301020802010008000101 -080501000802010008620101080101000801010008030102080201000800010108020100 -080001010803010208050100080a010208020100080201000801010008000101084b0101 -080201000801010008510101080101000806010008010100080301000800010008520101 -08010100080001000803010008050100080201000803010008000100083b0901070e0001 -030002020401030102020400060001000801010008060100080101000808010008020100 -080901000801010008040100081901010801010008010101080101000802010008010101 -080101000808010008020100080101000802010008010101080101000801010008020100 -080101000802010008010101080101000803010108050100080201000802010008010100 -080201000801010108010100080301000803010008620101080101000800010008030100 -080201000801010108010100080101010801010008010100080201000804010008090100 -0802010008010100080201000801010108010100084a0101080201000801010008510101 -080101030803010008010100080201000801010008520101080301000803010008050100 -080201000802010008010100083b0901070e000103000202040103010202040006000100 -08000100080701000801010008090102080a010008010100080501000818010108010100 -080201000801010008020100080101000802010008080100080501000802010008010100 -0805010008020100080101000802010008010100080f0100080201000802010008010100 -0802010008010100080201000803010008030103085f0101080101010804010008020100 -080101000805010008020100080101000802010008040100080901000805010008020100 -0801010008020100084a0101080201000801010008510101080501000802010008010100 -0801010008020100085201010803010008030103080301020802010008020100083b0901 -070e00010300020204010301020204000600010008010100080601000801010008080100 -080201000809010008010100080401000819010108010100080201000801010408010100 -0802010008090102080201040801010008060100080001000802010408010100080f0100 -080201000802010008010100080201000801010008020100080201000804010008020100 -085e010108010101080401040801010008050100080201000801010408040100080a0102 -08020100080201000801010008020100084a010108020100080101000851010108050100 -080201000801010008010100080201000852010108030100080301000802010008010100 -080201000801010008020100083b0901070e000103000202040103010202040006000100 -0802010008050100080101000808010008020100080901000801010008030100081a0101 -0801010008020100080101000805010008020100080c0100080101000805010008060100 -080001000802010008050100080f01000802010008020100080101000802010008010100 -08020100080201000804010008020100085e010108010100080001000803010008050100 -08050100080201000801010008080100080d010008010100080201000801010008020100 -084a01010802010008010100085101010801010008020100080201000801010008010105 -08510101080301000803010008020100080101000802010008010105083a0901070e0001 -030002020401030102020400060001000803010008040100080101000803010108020100 -0802010008030101080301000801010008020100081b0101080101000801010108010100 -080201000801010008020100080801000802010008010100080201000801010008070100 -080301000802010008010100080701010805010008020100080201000801010008020100 -0801010108010100080101000805010008020100085e0101080101000801010008020100 -080201000801010008050100080201000801010008020100080401000809010008020100 -08010100080101010801010108010100084a010108020100080101000851010108010100 -080201000802010008010100080501000852010108030100080301000802010008010100 -0802010008050100083b0901070e00010300020204010301020204000600010008040100 -080401010804010108030102080401010804010108020100081c01010802010108000100 -080201020802010008020100080901020803010208020100080701000804010208020100 -0807010108050100080301020803010208020100080001010802010008060102085f0101 -0801010008020100080201020802010008050100080201000802010208050100080a0102 -08030101080001000801010008000101084b010108030101085201010802010208040101 -080601000852010108010104080201020803010208060100083b0901070e000103000202 -0401030102020400060001000805010008230100081d010108050100080e010508470100 -08700101082a0105080f0100084e0101085801010867010108570901070e000103000202 -040103010202040006000100084901010801010008020100085c01000870010108400100 -084e0101085801010867010108570901070e000103000202040103010202040006000100 -0849010108020102085d01000870010108400100084e0101085801010867010108570901 -070e0001030002020401030102020400060001000849010108d501010890010108580101 -0867010108570901070e0001030002020401030102020400060001000849010108d50101 -08900101085801010867010108570901070e000103000202040103010202040006000100 -0849010108d5010108900101085801010867010108570901070e00010300020204010301 -02020400060001000849010108d5010108900101085801010867010108570901070e0001 -030002020401030102020400060001ff01ff01d40901070e000103000202040103010202 -0400060001ff01ff01d40901070e00010300020204010301020204000600010008490101 -08d5010108900101085801010867010108570901070e0001030002020401030102020400 -060001000849010108d5010108900101085801010867010108570901070e000103000202 -0401030102020400060001000805010008230100081d0101086e01000865010108900101 -085801010867010108570901070e00010300020204010301020204000600010008040100 -08040101080a0102080b010108020100081c0101084f0102081b010008020102085f0101 -0890010108030101085201010802010208030102085a0101080201020803010208030102 -08430901070e000103000202040103010202040006000100080301000804010008010100 -0808010008020100080901000801010008020100081b010108510100081a010008020100 -08020100085e010108900101080201000801010008510101080101000802010008010100 -080201000859010108010100080201000801010008020100080101000802010008420901 -070e00010300020204010301020204000600010008020100080501000801010008080100 -08020100080901000801010008030100081a010108020101080001000802010208020100 -08000101080a010208030102080201000800010108020100080201000802010208020100 -080001010804010108050100080301020803010208020100080001010805010008020100 -086201010801010008000101080301020802010008020100087b01010802010008010100 -085101010805010008050100085901010805010008010100080201000801010008460901 -070e00010300020204010301020204000600010008010100080601000801010008080100 -080201000809010008010100080401000819010108010100080101010801010008020100 -080101010801010008080100080201000801010008020100080101010801010008010100 -080201000801010008020100080101010801010008030101080501000802010008020100 -080101000802010008010101080101000803010008030100086201010801010108010100 -08010100080201000801010008020100087b010108020100080101000851010108050100 -08050100085901010805010008010100080201000801010008460901070e000103000202 -040103010202040006000100080001000807010008010100080901030809010008010100 -080501000818010108010100080201000801010008020100080101000802010008080100 -0805010008020100080101000805010008020100080101000802010008010100080f0100 -0802010008020100080101000802010008010100080201000803010008030103085f0101 -0801010008050100080201000802010008000100087c0101080201000801010008510101 -0804010008050100085a010108040100080301020802010308430901070e000103000202 -040103010202040006000100080101000806010008010100080c01000809010008010100 -080401000819010108010100080201000801010408010100080201000809010208020104 -0801010008060100080001000802010408010100080f0100080201000802010008010100 -080201000801010008020100080201000804010008020100085e01010801010008050104 -08030100087d01010802010008010100085101010803010008050100085b010108030100 -0803010008020100080101000802010008420901070e0001030002020401030102020400 -06000100080201000805010008010100080c0100080901000801010008030100081a0101 -0801010008020100080101000805010008020100080c0100080101000805010008060100 -080001000802010008050100080f01000802010008020100080101000802010008010100 -08020100080201000804010008020100085e010108010100080501000806010008000100 -087c01010802010008010100085101010802010008050100085c01010802010008040100 -08020100080101000802010008420901070e000103000202040103010202040006000100 -080301000804010008010100080301010802010008020100080301010803010008010100 -08020100081b010108010100080101010801010008020100080101000802010008080100 -080201000801010008020100080101000807010008030100080201000801010008070101 -080501000802010008020100080101000802010008010101080101000801010008050100 -08020100085e01010801010008050100080201000801010008020100087b010108020100 -08010100085101010801010008050100085d010108010100080501000802010008010100 -0802010008420901070e0001030002020401030102020400060001000804010008040101 -0804010108030102080401010804010108020100081c0101080201010800010008020102 -080201000802010008090102080301020802010008070100080401020802010008070101 -08050100080301020803010208020100080001010802010008060102085f010108010100 -080601020802010008020100087b01010803010108520101080101040801010408590101 -08010104080201020803010208430901070e000103000202040103010202040006000100 -0805010008230100081d010108050100080e010508470100087001010890010108580101 -0867010108570901070e0001030002020401030102020400060001000849010108010100 -08020100085c01000870010108900101085801010867010108570901070e000103000202 -0401030102020400060001000849010108020102085d0100087001010890010108580101 -0867010108570901070e0001030002020401030102020400060001000849010108d50101 -08900101085801010867010108570901070e000103000202040103010202040006000100 -0849010108d5010108900101085801010867010108570901070e00010300020204010301 -02020400060001000849010108d5010108900101085801010867010108570901070e0001 -030002020401030102020400060001000849010108d50101089001010858010108670101 -08570901070e0001030002020401030102020400060001ff01ff01d40901070e00010300 -02020401030102020400060001ff01ff01d40901070e0001030002020401030102020400 -060001000849010108d5010108900101085801010867010108570901070e000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -070e00010300020204010301020204000600010008050100082a010008160101086e0100 -0865010108900101085801010867010108570901070e0001030002020401030102020400 -060001000804010008040101080b010008050101080b01010802010008150101084f0102 -081b010008020102085f01010809010208090100080d0102086701010803010108520101 -0802010208030102085a010108020102080201040801010408420901070e000103000202 -040103010202040006000100080301000804010008010100080901010804010008010100 -0809010008010100080201000814010108510100081a01000802010008020100085e0101 -080b010008090100080f0100086701010802010008010100085101010801010008020100 -080101000802010008590101080101000802010008010100080201000801010008460901 -070e00010300020204010301020204000600010008020100080501000801010008080100 -080001000804010008010100080901000801010008030100081301010802010108000100 -080201020802010008000101080a01020803010208020100080001010802010008020100 -080201020802010008000101080401010805010008030102080301020802010008000101 -080501000802010008620101080201010800010008040100080301020802010008000101 -0803010208050100080901000800010108030102080201010800010008030102080a0102 -080301020802010008000101080201000802010008020102080201000800010108130101 -080201000801010008510101080101000802010008010100080201000859010108050100 -080501000801010008460901070e00010300020204010301020204000600010008010100 -0806010008010100080a0100080401000801010008090100080101000804010008120101 -080101000801010108010100080201000801010108010100080801000802010008010100 -080201000801010108010100080101000802010008010100080201000801010108010100 -080301010805010008020100080201000801010008020100080101010801010008030100 -080301000862010108010100080101010804010008020100080201000801010108010100 -080101000802010008040100080901010801010008010100080201000801010008000100 -080001000801010008020100080801000802010008010100080201000801010108010100 -080101000802010008010100080201000801010108010100081201010802010008010100 -085101010801010008020100080101000802010008590101080501000804010008020103 -08430901070e000103000202040103010202040006000100080001000807010008010100 -080a01000804010008010100080901000801010008050100081101010801010008020100 -080101000802010008010100080201000808010008050100080201000801010008050100 -08020100080101000802010008010100080f010008020100080201000801010008020100 -08010100080201000803010008030103085f010108010100080201000804010008020100 -080201000801010008020100080501000804010008090100080201000805010008010100 -080001000800010008010100080201000808010008050100080201000801010008050100 -080201000801010008020100080101000816010108020100080101000851010108020102 -08030102085a010108030101080501000806010008420901070e00010300020204010301 -0202040006000100080101000806010008010100080a0100080401000801010008090100 -080101000804010008120101080101000802010008010104080101000802010008090102 -080201040801010008060100080001000802010408010100080f01000802010008020100 -08010100080201000801010008020100080201000804010008020100085e010108010100 -080201000804010008020100080201000801010008020100080201030804010008090100 -080201000802010308010100080001000800010008010104080901020802010408010100 -080601000800010008020104080101000816010108020100080101000851010108010100 -0802010008010100080201000859010108050100080401000806010008420901070e0001 -03000202040103010202040006000100080201000805010008010100080a010008040100 -080101000809010008010100080301000813010108010100080201000801010008050100 -08020100080c0100080101000805010008060100080001000802010008050100080f0100 -080201000802010008010100080201000801010008020100080201000804010008020100 -085e01010801010008020100080401000802010008020100080101000802010008010100 -080201000804010008090100080201000801010008020100080101000800010008000100 -080101000810010008010100080501000806010008000100080201000805010008160101 -080201000801010008510101080101000802010008010100080201000859010108050100 -08030100080301000802010008420901070e000103000202040103010202040006000100 -080301000804010008010100080301010804010008040100080101000803010108030100 -080101000802010008140101080101000801010108010100080201000801010008020100 -080801000802010008010100080201000801010008070100080301000802010008010100 -080701010805010008020100080201000801010008020100080101010801010008010100 -0805010008020100085e0101080101000801010108040100080201000802010008010101 -080101000801010008020100080401000809010008020100080101000802010008010100 -080001000800010008010100080201000808010008020100080101000802010008010100 -080701000803010008020100080101000816010108020100080101000851010108010100 -080201000801010008020100085901010801010008020100080301000803010008020100 -08420901070e000103000202040103010202040006000100080401000804010108040101 -080201040803010108040101080401010802010008150101080201010800010008020102 -080201000802010008090102080301020802010008070100080401020802010008070101 -08050100080301020803010208020100080001010802010008060102085f010108020101 -080001000804010008030102080201000800010108030103080401000809010008020100 -0802010308010100080001000800010008020102080a0102080301020802010008070100 -08040102080201000816010108030101085201010802010208030102085a010108020102 -080401000804010208430901070e00010300020204010301020204000600010008050100 -082a01000816010108050100080e010508470100087001010805010008230105081c0105 -083c0101085801010867010108570901070e000103000202040103010202040006000100 -084901010801010008020100085c01000870010108010100080201000889010108580101 -0867010108570901070e0001030002020401030102020400060001000849010108020102 -085d01000870010108020102088a0101085801010867010108570901070e000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -070e0001030002020401030102020400060001000849010108d501010890010108580101 -0867010108570901070e0001030002020401030102020400060001000849010108d50101 -08900101085801010867010108570901070e000103000202040103010202040006000100 -0849010108d5010108900101085801010867010108570901070e00010300020204010301 -02020400060001ff01ff01d40901070e0001030002020401030102020400060001ff01ff -01d40901070e0001030002020401030102020400060001000849010108d5010108900101 -085801010867010108570901070e00010300020204010301020204000600010008490101 -08d5010108900101085801010867010108570901070e0001030002020401030102020400 -0600010008050100082a010008160101086e010008650101089001010858010108670101 -08570901070e0001030002020401030102020400060001000804010008040101080b0100 -08050100080c01010802010008150101084f0102081b010008020102085f010108110100 -087d01010803010108520101080301000805010008040102085301010802010208030102 -0804010108430901070e0001030002020401030102020400060001000803010008040100 -080101000809010108040101080b010008010100080201000814010108510100081a0100 -0802010008020100085e010108110100087d010108020100080101000851010108020101 -080401010803010008020100085201010801010008020100080101000802010008020100 -0801010008420901070e0001030002020401030102020400060001000802010008050100 -0801010008080100080001000803010008000100080b0100080101000803010008130101 -0802010108000100080201020802010008000101080a0102080301020802010008000101 -080201000802010008020102080201000800010108040101080501000803010208030102 -080201000800010108050100080201000862010108010100080001010803010208020104 -080901020802010008020100080101000800010108600101080201000801010008510101 -080101000800010008030100080001000803010008560101080501000805010008020100 -0801010008420901070e0001030002020401030102020400060001000801010008060100 -08010100080a010008050100080b01000801010008040100081201010801010008010101 -080101000802010008010101080101000808010008020100080101000802010008010101 -080101000801010008020100080101000802010008010101080101000803010108050100 -080201000802010008010100080201000801010108010100080301000803010008620101 -0801010108010100080101000802010008030100080a0100080201000801010008020100 -0801010108010100085f0101080201000801010008510101080301000805010008030100 -085601010805010008050100080201000801010008420901070e00010300020204010301 -0202040006000100080001000807010008010100080a010008050100080b010008010100 -080501000811010108010100080201000801010008020100080101000802010008080100 -0805010008020100080101000805010008020100080101000802010008010100080f0100 -0802010008020100080101000802010008010100080201000803010008030103085f0101 -0801010008020100080101000802010008030100080a0100080501000802010008010100 -08020100085f010108020100080101000851010108030100080501000803010308530101 -0803010108050100080301000801010008420901070e0001030002020401030102020400 -06000100080101000806010008010100080a010008050100080b01000801010008040100 -081201010801010008020100080101040801010008020100080901020802010408010100 -08060100080001000802010408010100080f010008020100080201000801010008020100 -0801010008020100080201000804010008020100085e0101080101000802010008010104 -08030100080b010208020100080201000801010008020100085f01010802010008010100 -085101010803010008050100080301000802010008520101080501000803010008040100 -0801010008420901070e0001030002020401030102020400060001000802010008050100 -08010100080a010008050100080b01000801010008030100081301010801010008020100 -080101000805010008020100080c01000801010008050100080601000800010008020100 -08050100080f010008020100080201000801010008020100080101000802010008020100 -0804010008020100085e010108010100080201000801010008070100080e010008010100 -080201000801010008020100085f01010802010008010100085101010803010008050100 -0803010008020100085201010805010008020100080501000801010008420901070e0001 -030002020401030102020400060001000803010008040100080101000803010108040100 -080501000805010108030100080101000802010008140101080101000801010108010100 -080201000801010008020100080801000802010008010100080201000801010008070100 -080301000802010008010100080701010805010008020100080201000801010008020100 -0801010108010100080101000805010008020100085e0101080101000802010008010100 -0802010008030100080a01000802010008010100080101010801010108010100085f0101 -080201000801010008510101080301000805010008030100080201000852010108010100 -0802010008010100080601000801010008420901070e0001030002020401030102020400 -060001000804010008040101080401010802010408010104080301010804010108020100 -081501010802010108000100080201020802010008020100080901020803010208020100 -080701000804010208020100080701010805010008030102080301020802010008000101 -0802010008060102085f0101080101000802010008020102080501010809010208030101 -080001000801010008000101086001010803010108520101080101040801010408020102 -0853010108020102080201040803010108430901070e0001030002020401030102020400 -0600010008050100082a01000816010108050100080e0105084701000870010108150105 -080f010008630101085801010867010108570901070e0001030002020401030102020400 -06000100084901010801010008020100085c010008700101082b01000863010108580101 -0867010108570901070e0001030002020401030102020400060001000849010108020102 -085d010008700101082b010008630101085801010867010108570901070e000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -070e0001030002020401030102020400060001000849010108d501010890010108580101 -0867010108570901070e0001030002020401030102020400060001000849010108d50101 -08900101085801010867010108570901070e000103000202040103010202040006000100 -0849010108d5010108900101085801010867010108570901070e00010300020204010301 -02020400060001ff01ff01d40901070e0001030002020401030102020400060001ff01ff -01d40901070e0001030002020401030102020400060001000849010108d5010108900101 -085801010867010108570901070e00010300020204010301020204000600010008490101 -08d5010108900101085801010867010108570901070e0001030002020401030102020400 -0600010008050100082a010008160101086e010008650101089001010858010108670101 -08570901070e0001030002020401030102020400060001000804010008040101080b0100 -08040102080b01010802010008150101084f0102081b010008020102085f010108110100 -080301000878010108030101085201010802010208030102085a01010802010208030102 -0804010008440901070e0001030002020401030102020400060001000803010008040100 -080101000809010108030100080201000809010008010100080201000814010108510100 -081a01000802010008020100085e01010811010008030100087801010802010008010100 -085101010801010008020100080101000802010008590101080101000802010008010100 -080201000802010108440901070e00010300020204010301020204000600010008020100 -080501000801010008080100080001000807010008090100080101000803010008130101 -0802010108000100080201020802010008000101080a0102080301020802010008000101 -080201000802010008020102080201000800010108040101080501000803010208030102 -080201000800010108050100080201000862010108020102080201000802010008010104 -080101000800010108750101080201000801010008510101080501000805010008590101 -0805010008050100080101000800010008440901070e0001030002020401030102020400 -06000100080101000806010008010100080a010008070100080901000801010008040100 -081201010801010008010101080101000802010008010101080101000808010008020100 -080101000802010008010101080101000801010008020100080101000802010008010101 -080101000803010108050100080201000802010008010100080201000801010108010100 -080301000803010008620101080101000802010008010100080201000803010008030101 -080101000874010108020100080101000851010108050100080501000859010108050100 -080501000803010008440901070e00010300020204010301020204000600010008000100 -0807010008010100080a010008060100080a010008010100080501000811010108010100 -080201000801010008020100080101000802010008080100080501000802010008010100 -0805010008020100080101000802010008010100080f0100080201000802010008010100 -0802010008010100080201000803010008030103085f0101080501000801010008020100 -080301000803010008020100087401010802010008010100085101010804010008050100 -085a010108040100080401010804010008440901070e0001030002020401030102020400 -06000100080101000806010008010100080a010008050100080b01000801010008040100 -081201010801010008020100080101040801010008020100080901020802010408010100 -08060100080001000802010408010100080f010008020100080201000801010008020100 -0801010008020100080201000804010008020100085e0101080201030801010008020100 -080301000803010008020100087401010802010008010100085101010803010008050100 -085b010108030100080701000803010008440901070e0001030002020401030102020400 -06000100080201000805010008010100080a010008040100080c01000801010008030100 -081301010801010008020100080101000805010008020100080c01000801010008050100 -08060100080001000802010008050100080f010008020100080201000801010008020100 -0801010008020100080201000804010008020100085e0101080101000802010008010100 -080201000803010008030100080201000874010108020100080101000851010108020100 -08050100085c010108020100080801000803010008440901070e00010300020204010301 -020204000600010008030100080401000801010008030101080401000803010008070101 -080301000801010008020100081401010801010008010101080101000802010008010100 -080201000808010008020100080101000802010008010100080701000803010008020100 -080101000807010108050100080201000802010008010100080201000801010108010100 -080101000805010008020100085e01010801010008020100080101000801010108030100 -0803010008020100087401010802010008010100085101010801010008050100085d0101 -0801010008050100080201000803010008440901070e0001030002020401030102020400 -060001000804010008040101080401010802010408010104080301010804010108020100 -081501010802010108000100080201020802010008020100080901020803010208020100 -080701000804010208020100080701010805010008030102080301020802010008000101 -0802010008060102085f0101080201030802010108000100080401010801010008020100 -087401010803010108520101080101040801010408590101080101040802010208020104 -08420901070e00010300020204010301020204000600010008050100082a010008160101 -08050100080e0105084701000870010108900101085801010867010108570901070e0001 -03000202040103010202040006000100084901010801010008020100085c010008700101 -08900101085801010867010108570901070e000103000202040103010202040006000100 -0849010108020102085d01000870010108900101085801010867010108570901070e0001 -030002020401030102020400060001000849010108d50101089001010858010108670101 -08570901070e0001030002020401030102020400060001000849010108d5010108900101 -085801010867010108570901070e00010300020204010301020204000600010008490101 -08d5010108900101085801010867010108570901070e0001030002020401030102020400 -060001000849010108d5010108900101085801010867010108570901070e000103000202 -0401030102020400060001ff01ff01d40901070e00010300020204010301020204000600 -01ff01ff01d40901070e0001030002020401030102020400060001000849010108d50101 -08900101085801010867010108570901070e000103000202040103010202040006000100 -0849010108d5010108900101085801010867010108570901070e00010300020204010301 -020204000600010008050100082a010008160101086e0100086501010890010108580101 -0867010108570901070e0001030002020401030102020400060001000804010008040101 -080b010008040102080b01010802010008150101084f0102081b010008020102085f0101 -08110100080a010008220102084b01010803010108520101080101040805010008050100 -0852010108020102080201040801010408420901070e0001030002020401030102020400 -060001000803010008040100080101000809010108030100080201000809010008010100 -080201000814010108510100081a01000802010008020100085e010108110100080a0100 -08240100084b010108020100080101000851010108010100080801010804010108520101 -080101000802010008010100080201000801010008460901070e00010300020204010301 -020204000600010008020100080501000801010008080100080001000807010008090100 -0801010008030100081301010802010108000100080201020802010008000101080a0102 -080301020802010008000101080201000802010008020102080201000800010108040101 -080501000803010208030102080201000800010108050100080201000862010108010100 -080001010803010208020104080801000801010008030102080201000800010108020100 -080001010803010208050100084b01010802010008010100085101010801010008070100 -0800010008030100080001000852010108050100080501000801010008460901070e0001 -03000202040103010202040006000100080101000806010008010100080a010008070100 -080901000801010008040100081201010801010008010101080101000802010008010101 -080101000808010008020100080101000802010008010101080101000801010008020100 -080101000802010008010101080101000803010108050100080201000802010008010100 -080201000801010108010100080301000803010008620101080101010801010008010100 -0802010008030100080a0100080001000803010008020100080101010801010008010101 -08010100080101000802010008040100084b010108020100080101000851010108010103 -080301000801010008020100080101000852010108050100080401000802010308430901 -070e000103000202040103010202040006000100080001000807010008010100080a0100 -08050101080a010008010100080501000811010108010100080201000801010008020100 -080101000802010008080100080501000802010008010100080501000802010008010100 -0802010008010100080f0100080201000802010008010100080201000801010008020100 -0803010008030103085f01010801010008020100080101000802010008030100080a0101 -0804010008020100080101000805010008020100080101000802010008040100084b0101 -080201000801010008510101080501000801010008020100080101000802010008520101 -08030101080501000806010008420901070e000103000202040103010202040006000100 -080101000806010008010100080a01000807010008090100080101000804010008120101 -080101000802010008010104080101000802010008090102080201040801010008060100 -080001000802010408010100080f01000802010008020100080101000802010008010100 -08020100080201000804010008020100085e010108010100080201000801010408030100 -080a0101080401040801010008050100080201000801010408040100084b010108020100 -080101000851010108050100080101000802010008010100080201000852010108050100 -080401000806010008420901070e00010300020204010301020204000600010008020100 -0805010008010100080a0100080701000809010008010100080301000813010108010100 -08020100080101000805010008020100080c010008010100080501000806010008000100 -0802010008050100080f0100080201000802010008010100080201000801010008020100 -080201000804010008020100085e010108010100080201000801010008070100080a0100 -08000100080301000805010008050100080201000801010008080100084b010108020100 -080101000851010108010100080201000801010508000105085101010805010008030100 -080301000802010008420901070e00010300020204010301020204000600010008030100 -080401000801010008030101080401000803010008020100080301010803010008010100 -080201000814010108010100080101010801010008020100080101000802010008080100 -080201000801010008020100080101000807010008030100080201000801010008070101 -080501000802010008020100080101000802010008010101080101000801010008050100 -08020100085e01010801010008020100080101000802010008030100080a010008010100 -0802010008020100080101000805010008020100080101000802010008040100084b0101 -080201000801010008510101080101000802010008050100080501000852010108010100 -0802010008030100080301000802010008420901070e0001030002020401030102020400 -060001000804010008040101080401010802010408020102080401010804010108020100 -081501010802010108000100080201020802010008020100080901020803010208020100 -080701000804010208020100080701010805010008030102080301020802010008000101 -0802010008060102085f0101080101000802010008020102080501010808010008020100 -080201020802010008050100080201000802010208050100084b01010803010108520101 -0802010208060100080501000852010108020102080401000804010208430901070e0001 -0300020204010301020204000600010008050100082a01000816010108050100080e0105 -08470100087001010815010508740101085801010867010108570901070e000103000202 -040103010202040006000100084901010801010008020100085c01000870010108900101 -085801010867010108570901070e00010300020204010301020204000600010008490101 -08020102085d01000870010108900101085801010867010108570901070e000103000202 -0401030102020400060001000849010108d5010108900101085801010867010108570901 -070e0001030002020401030102020400060001000849010108d501010890010108580101 -0867010108570901070e0001030002020401030102020400060001000849010108d50101 -08900101085801010867010108570901070e000103000202040103010202040006000100 -0849010108d5010108900101085801010867010108570901070e00010300020204010301 -02020400060001ff01ff01d40901070e0001030002020401030102020400060001ff01ff -01d40901070e0001030002020401030102020400060001000849010108d5010108900101 -0858010108670101085709010010030002020401030102020400060001000849010108d5 -0101089001010858010108670101085709010700000c0900000103000202040103010202 -04000600010008050100082a010008160101088301000850010108900101085801010867 -010108570901070000010608090107000001030002020401030102020400060001000804 -010008040101080b010008070100080a0101080201000815010108110100080a01000822 -0102080b01000806010008090100081501000807010008020102084a0101089001010803 -0101085201010805010008020102085a0101080201020802010408490901070100010607 -090107000001030002020401030102020400060001000803010008040100080101000809 -0101080601010809010008010100080201000814010108110100080a010008240100080b -010008110100081401010806010008020100080201000849010108900101080201000801 -010008510101080401010801010008020100085901010801010008020100080101000802 -010008490901070100010606090107010001030002020401030102020400060001000802 -010008050100080101000808010008000100080501000800010008090100080101000803 -010008130101080101000800010108030102080201040808010008010100080301020802 -010008000101080201000800010108030102080501000804010108020104080201020803 -010208020100080101000803010208020100080001010802010008000100080601000806 -010008490101089001010802010008010100085101010803010008000100080101000802 -010008590101080101000802010008050100084909010702000106050901070100010300 -0202040103010202040006000100080101000806010008010100080a0100080401000801 -010008090100080101000804010008120101080101010801010008010100080201000803 -0100080a0100080001000803010008020100080101010801010008010101080101000801 -010008020100080401000804010108040100080601000802010008020100080101000800 -010008030100080201000801010108010100080301000805010008070100084901010890 -010108020100080101000851010108020100080101000801010008020100085901010801 -01000802010008040100084a090107020001060409010702000103000202040103010202 -040006000100080001000807010008010100080a01000803010008020100080901000801 -010008050100081101010801010008020100080101000802010008030100080a01010804 -010008020100080101000805010008020100080101000802010008040100080b01000806 -01000802010008050101080401000802010008010100080701000805010008060100084a -010108900101080201000801010008510101080101000802010008020102085a01010802 -010208050100084a09010703000106030901070200010300020204010301020204000600 -0100080101000806010008010100080a0100080301000802010008090100080101000804 -01000812010108010100080201000801010408030100080a010108040104080101000805 -0100080201000801010408040100080b0100080601000802010008050101080401040801 -0100080701000804010008060100084b0101089001010802010008010100085101010801 -010008020100080101000802010008590101080101000802010008040100084a09010703 -000106020901070300010300020204010301020204000600010008020100080501000801 -0100080a0100080301050808010008010100080301000813010108010100080201000801 -010008070100080a01000800010008030100080501000805010008020100080101000808 -0100080b0100080601000802010008050100080001000803010008050100080701000804 -010008050100084c01010890010108020100080101000851010108010105080001000802 -010008590101080101000802010008030100084b09010704000106010901070300010300 -020204010301020204000600010008030100080401000801010008030101080401000807 -010008030101080301000801010008020100081401010801010008020100080101000802 -010008030100080a01000801010008020100080201000801010008050100080201000801 -010008020100080401000804010108040100080601000802010008020100080101000801 -0100080201000802010008010100080701000803010008050100084d0101089001010802 -010008010100085101010805010008010100080201000859010108010100080201000803 -0100084b0901070400010600090107040001030002020401030102020400060001000804 -010008040101080401010802010408050100080301010804010108020100081501010801 -010008020100080201020805010108080100080201000802010208020100080501000802 -010008020102080501000804010108050101080401000803010208020100080201000802 -010208020100080501040801010008050104084901010890010108030101085201010805 -010008020102085a01010802010208040100084b09010705000009020704000103000202 -04010301020204000600010008050100082a0100081601010815010508b9010108900101 -085801010867010108570901070500000901070500010300020204010301020204000600 -01000849010108d501010890010108580101086701010857090107060901070500010300 -02020401030102020400060001000849010108d501010890010108580101086701010857 -09010706090007060001030002020401030102020400060001000849010108d501010890 -010108580101086701010857090100100300020204010301020204000600010008490101 -08d5010108900101085801010867010108570900001103000202040103010202040009ff -09ff09d9060e03000202040103010202040009ff09ff09d80000060e0300020204010301 -020204000901070d0000070000ff00ff00a507100001070c0001060e0300020204010301 -020204000901070b00010900070000ff00ff00a4090007100003070a0001060e03000202 -040103010202040009010709000209010700000106ff06ff06a109010710000507080001 -060e030002020401030102020400090107070003060009010700000106ff06ff06a10901 -071000010601000307060001060e03000202040103010202040009010705000306020901 -0700000106ff06ff06a10901071000010603000307040001060e03000202040103010202 -0400090107030003060409010700000106ff06ff06a10901071000010605000307020001 -060e030002020401030102020400090107010003060609010700000106ff06ff06a10901 -071000010607000307000001060e03000202040103010202040009050608090107000001 -06ff06ff06a1090107100001060809030001060e03000202040103010202040009010701 -0903060609010700000106ff06ff06a10901071000010607090307000001060e03000202 -0401030102020400090107030903060409010700000106ff06ff06a10901071000010605 -090307020001060e030002020401030102020400090107050903060209010700000106ff -06ff06a10901071000010603090307040001060e03000202040103010202040009010707 -0903060009010700000106ff06ff06a10901071000010601090307060001060e03000202 -04010301020204000901070909040700000106ff06ff06a1090107100001090307080001 -060e0300020204010301020204000901070b09020700000109ff09ff09a3071000010901 -070a0001060e0300020204010301020204000901070d09000700000009ff09ff09a40710 -00000900070c0001060e030002020401030102020400090100ff00ff00d7060e03000202 -0401030102020400090000ff00ff00d8060e03000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff0615 -01000601010006ce030002020401030004040601000a0607010006020100060401000606 -010006100102061201000686000a06090100060c01000611010006020100060401000606 -0100060f01000602010006e0010006010100060801000602010006040100060601000605 -0100061f010106890300040403050601000909000607010006020100060c0100060f0100 -060201000611010006860009090006090100060c01000611010006020100060c0100060f -01010601010006e00100060101000608010006020100060c010006050100061e01000601 -010006880304040003010202040006010001060609010607010006020100060201020603 -010106000100060201020609010006050100060201000602010206020104060201020602 -010106000100060901000600010106020100060001010603010206030102060301020603 -010206030102060301020603010206310001060609010608010006000100060201000602 -010006010104060201020609010006020100060201020603010106000100060201020609 -01010601010006020102060201000602010006d101050607010006020100060201020603 -010106000100060201010600010006020102060201000600010106040101060a01000601 -010006880300020204010301020204000601000106060901060701000602010006040100 -060201000601010106010100060201000609010006040100060201000601010006020100 -060301000603010006020100060101000600010006000100060801010601010006010101 -060101000601010006020100060101000602010006010100060201000601010006020100 -060101000602010006010100060201000601010006020100063000010606090106080100 -060001000602010006020100060301000603010006020100060801000602010006040100 -060201000601010106010100060201000608010006000100060001000601010006020100 -060101000602010006d20100060101000608010006020100060401000602010006010101 -06010100060101010601010006020100060101010601010006030101060a010006010100 -068803000202040103010202040006010001060609010607010406040100060201000602 -01000601010006020100060a010106030100060101000601010006070100060301000602 -010006010100060001000600010006080100060201000601010006050100060201000601 -010006050100060201000601010006050100060501000602010006010100063400010606 -090106080100060001000602010006020100060301000603010006020100060101040601 -010406040100060201000602010006010100060201000608010006000100060001000601 -01000602010006010100060001000600010006d101000601010006090104060401000602 -010006020100060101000602010006010100060201000601010006020100061001000601 -010006880300020204010301020204000601000106060901060701000602010006040100 -060201000602010006010104060c01000602010006010100060201020604010006030104 -060101000600010006000100060801000602010006010100060501000602010006010100 -060501040602010206030102060201040602010206310001060609010607010006020100 -060101000602010006030100060301000602010006080100060201000604010006020100 -060201000601010406080100060101010601010406010100060001000600010006d00105 -060801000602010006040100060201000602010006010100060201000601010406010100 -060201000610010006010100068803000202040103010202040006010001060609010607 -01000602010006040100060201000602010006010100060c010006020100060301000600 -010006050100060301000603010006050100060001000600010006080100060201000601 -010006050100060201000601010006050100060901000605010006010100060901000630 -000106060901060701040601010006020100060301000603010006020100060801000602 -010006040100060201000602010006010100060c01000601010106010100060501000600 -01000600010006d101000601010006090100060201000604010006020100060201000601 -010006020100060101000605010006020100061001000601010006880300020204010301 -020204000601000106060901060701000602010006040100060201000601010106010100 -060201000608010006020100060301010602010006020100060301000603010006020100 -060101000600010006000100060801010601010006010100060501000602010006010100 -060201000601010006020100060101000602010006010100060201000601010006020100 -060101000602010006300001060609010607010006020100060101000601010106030100 -060301000602010006080100060201000604010006020100060101010601010006020100 -0608010006020100060101000602010006010100060001000600010006d1010006010100 -060901000602010006040100060201000601010106010100060101010601010006020100 -060101000602010006030101060a01000601010006880300020204010301020204000601 -000106060901060701000602010006040100060301010600010006020102060a01020605 -010006030102060501010602010206020100060001000600010006080100060001010602 -010006060102060301020603010206030102060301020603010206030102063100010606 -090106070100060201000602010106000100060401010602010206090100060201000604 -0100060301010600010006020102060901000602010006020102060301000600010006d2 -010006010100060901000602010006040100060301010600010006020101060001000602 -0102060201000602010006030101060b0101068903000202040103010202040006010001 -09080634010006250100066c0001090806ff06ff06060300020204010301020204000601 -00000909063101000600010006260100066c0000090906ff06ff06060300020204010301 -02020400063f01000627010006ff06ff067e03000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040006ff06ff06e803000202040103010202040006ff06ff06e8 -03000202040103010202040003ff03ff03e9020204010301021a0400030002ff02ff02b6 -04000300021a04010301021a0400030002ff02ff02b604000300021a04010301021a0400 -030002ff02ff02b604000300021a04010301041b030004ff04ff04b70300041c030004ff -04ff04f3 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 22 377 234 -%%EOF diff --git a/lib/pman/doc/src/note.gif b/lib/pman/doc/src/note.gif Binary files differdeleted file mode 100644 index 6fffe30419..0000000000 --- a/lib/pman/doc/src/note.gif +++ /dev/null diff --git a/lib/pman/doc/src/notes.xml b/lib/pman/doc/src/notes.xml deleted file mode 100644 index 4e9663c916..0000000000 --- a/lib/pman/doc/src/notes.xml +++ /dev/null @@ -1,211 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE chapter SYSTEM "chapter.dtd"> - -<chapter> - <header> - <copyright> - <year>2004</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Pman Release Notes</title> - <prepared>otp_appnotes</prepared> - <docno>nil</docno> - <date>nil</date> - <rev>nil</rev> - <file>notes.xml</file> - </header> - <p>This document describes the changes made to the Pman application.</p> - -<section><title>Pman 2.7.1.4</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Tuple funs (deprecated in R15B) are no longer supported.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-10170</p> - </item> - </list> - </section> - -</section> - -<section><title>Pman 2.7.1.3</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Misc build updates</p> - <p> - Own Id: OTP-10784</p> - </item> - </list> - </section> - -</section> - -<section><title>Pman 2.7.1.2</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p>The GS applications is now deprecated and will be - removed in the R16 release. The following GS-based - applications have been superseded by the Observer - application and will removed in R16: Appmon, Pman, - Tv.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-9907</p> - </item> - </list> - </section> - -</section> - -<section><title>Pman 2.7.1.1</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Miscellaneous documentation build updates</p> - <p> - Own Id: OTP-9813</p> - </item> - </list> - </section> - -</section> - -<section><title>Pman 2.7.1</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - The documentation is now built with open source tools - (xsltproc and fop) that exists on most platforms. One - visible change is that the frames are removed.</p> - <p> - Own Id: OTP-8201</p> - </item> - </list> - </section> - -</section> - -<section><title>Pman 2.7</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p>The copyright notices have been updated.</p> - <p> - Own Id: OTP-7851</p> - </item> - </list> - </section> - -</section> - - <section> - <title>Pman 2.6</title> - - <section> - <title>Improvements and New Features</title> - <list type="bulleted"> - <item> - <p>Some maintenance work to replace deprecated guard - expressions etc. somehow grew into a larger rewrite of - parts of the Pman code, fixing some of the more blatant - errors and removing unused code.</p> - <p>The default font has been changed, so now the entire text - on buttons etc. should be visible on most platforms.</p> - <p>Saving and restoring trace options to/from file now - works.</p> - <p>Selecting different sets of processes to hide/view should - now work in a more consistent and logical way.</p> - <p>It is now possible to select more than one module or - process to hide/show.</p> - <p>Own Id: OTP-6012 Aux Id: OTP-5987 </p> - </item> - </list> - </section> - </section> - - <section> - <title>Pman 2.5.3</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>Removed some dead code from <c>pman_process</c>.</p> - <p>Own Id: OTP-6550</p> - </item> - </list> - </section> - </section> - - <section> - <title>Pman 2.5.2</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>Some dead code reported by Dialyzer was eliminated.</p> - <p>A bug in <c>dbg</c> when tracing to wrap trace files - has been corrected. It failed to delete any already existing - wrap trace files with the same names when starting a new - wrap trace.</p> - <p>Own Id: OTP-5329</p> - </item> - <item> - <p>The graphic applications now search for HTML - documentation in the correct place.</p> - <p>Own Id: OTP-5381</p> - </item> - </list> - </section> - </section> - - <section> - <title>Pman 2.5.1</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>The Pman 'trace shell' functionality was broken, it has - now been fixed. Furthermore, Pman could not correctly - find the pid of the active shell if more than one shell - process was running on the node. This has also been - corrected.</p> - <p>Own Id: OTP-5191</p> - </item> - </list> - </section> - </section> -</chapter> - diff --git a/lib/pman/doc/src/options.gif b/lib/pman/doc/src/options.gif Binary files differdeleted file mode 100644 index 18377fbed1..0000000000 --- a/lib/pman/doc/src/options.gif +++ /dev/null diff --git a/lib/pman/doc/src/options.ps b/lib/pman/doc/src/options.ps deleted file mode 100644 index b5e2c6a391..0000000000 --- a/lib/pman/doc/src/options.ps +++ /dev/null @@ -1,829 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./options.tmp.eps) -%%CreationDate: (Tue Jun 12 18:04:30 2001) -%%BoundingBox: 0 53 250 318 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 53 250 318 -userdict begin -%%BeginData: -DisplayImage -0 53 -250.000000 265.000000 -12 -350 371 -1 -0 -0 -8 -ffffff -000000 -708090 -b03060 -d9d9d9 -808080 -a3a3a3 -000000 -03ff03ff03ff035f04000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400031b040c0392040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003000400030004000307040c03050400030a040003080404030b0402030d -0401030104010305040703200403030a040103010401031e040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000308040003020400030204000302 -040003050400030a0400030804010301040103090401030f040103010401030804010322 -040103010401030904010321040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003070400030204000302040003020400030504000303 -040203030400030804010302040103010403030104030301040303010401030104010300 -040103000403030704010302040103000401030004030302040303020403030604010303 -04010300040103000401030104030300040103010403030104010300040103020403030a -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000308 -040003020400030204000302040003050400030204040302040003080401030204010300 -040103010401030104010301040103010401030004010301040103000401030104010308 -040103020406030104010300040103010401030004010301040103050401030304010300 -040203000401030104010301040103000401030104010300040203000401030004010301 -040103080400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030704040302040003020400030504000301040603010400030804010302 -040103000401030104010301040103050401030004010301040103000401030104010308 -040103020402030504010300040103040401030104010305040103030401030004010301 -040103010401030104010300040103010401030004010301040103000402030c04000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030804000306 -040003020400030504000301040603010400030804010302040103000405030104010302 -040403000401030104010300040103010401030804010302040103030404030004010304 -040503050401030304010300040103010401030104010301040103000401030104010300 -040103010401030204020309040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003070400030604000302040003050400030104060301 -040003080401030204010300040103050401030104010301040103000401030104010300 -040103010401030804010302040103020401030104010300040103040401030904010303 -040103000401030104010301040103010401030004010301040103000401030104010303 -040203090400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003080400030604000302040003050400030204040302040003080401030104010301 -040103010401030104010301040103010401030004010300040203000401030104010300 -040003060401030204010302040103010401030004010301040103000401030104010306 -040103010401030104020300040103010401030004020300040103010401030004010301 -040103000401030104010308040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003070408030204000305040003030402030304000308 -040403030403030204010302040203000401030004010300040103000401030204010307 -040103020401030304020300040103000403030204030308040303020401030004010303 -04010300040103010403030104010301040103010403030a040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -0400030004000300040003000400030004000300040003080400030a040003050400030a -040003660401032904000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -0400030004000300040003070400030a040003050400030a040003660401032a04000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003000400030004000300040003000400030004000300040003080400030a -04000305040c036604010329040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003000400030004000307040c03a604000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -040003000400030004000300040003000400030004000300040003000400030004000300 -04000300040003000400030004000300040003ff03ff03d402ff02ff02bb00ff00ff00ba -050000ff005b050100ff00ff000e050000ff005b050100b104a80502000204a8000504a8 -0502000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a8 -000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a80502 -000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a80005 -04a8050200020407010404080100041601000404010004360100040601000433000504a8 -0502000204090100040a0100041c010004360100043b0005040801040434010004130100 -041a010004060100042b0502000204090100040301000400010104020100040001010403 -010204020100040001010403010204020104040201020402010004000101040301020403 -0102040a0102040201000400010104020104040201020403010204020100040001010403 -01020404010104170005040a01000436010004130100041a010004330502000204090100 -040301010401010004010101040101000401010004020100040101010401010004040100 -040401000403010004020100040101010401010004010100040201000401010004020100 -040801000402010004010101040101000403010004060100040201000402010004010101 -0401010004010100040201000403010104170005040a0100040301000400010104030102 -0403010204030102040a0102040201000402010004010104040101000400010104020100 -040201000401010404090102040201000400010104020104040201020403010204020100 -040001010403010204040101040f05020002040901000403010004020100040101000402 -010004010100040201000401010004080100040401000407010004010100040201000401 -010004050100040201000408010004020100040101000402010004030100040601000402 -01000402010004010100040201000401010004210005040a010004030101040101000401 -010004020100040101000402010004010100040201000408010004020100040101000402 -0100040301000403010104010100040101000402010004030100040a0100040201000401 -010104010100040301000406010004020100040201000401010104010100040101000402 -010004030101040f05020002040901000403010004020100040101000402010004010104 -040101000408010004040100040401030401010004020100040101000405010404080100 -040201000401010004020100040301000406010004020100040201000401010004020100 -04020102041e0005040a0100040301000409010004010100040501000402010004080100 -040201000401010004020100040301000403010004020100040101000402010004030100 -040a01000402010004010100040201000403010004060100040201000402010004010100 -040201000401010004190502000204090100040301000402010004010100040201000401 -010004050100040801000404010004030100040201000401010004020100040101000405 -0100040c0100040201000401010004020100040301000406010004020100040201000401 -01000402010004050100041d0005040a0100040301000406010304010100040501040408 -010004020100040101000402010004030100040301000402010004010100040201000403 -0100040a0100040201000401010004020100040301000406010004020100040201000401 -010004020100040201020416050200020409010004030100040201000401010004020100 -040101000402010004010100040801000404010004030100040201000401010004020100 -040101000402010004010100040201000408010004020100040101010401010004030100 -040601000402010004020100040101000402010004010100040201000403010104170005 -040a01000403010004050100040201000401010004050100040c01000402010004010100 -04020100040301000403010004020100040101000402010004030100040a010004020100 -040101000402010004030100040601000402010004020100040101000402010004050100 -041505020002040701040401010004020100040101000402010004020102040201000408 -0100040501010402010304010100040201000402010204030102040a0102040201000400 -01010405010104040100040301020402010004020100040201020404010104170005040a -010004030100040501000402010004010100040201000401010004020100040801000402 -01000401010004010101040301000403010104010100040101000401010104030100040a -010004020100040101010401010004030100040601000402010004020100040101000402 -0100040101000402010004030101040f050200020462010004440005040a010004030100 -040601030402010204030102040a01020403010104000100040401010401010004000101 -040301010400010004040101040901020402010004000101040501010404010004030102 -04020100040201000402010204040101040f050200020462010004440005044701000421 -0100043c0502000204620100044400050447010004210100043c0502000204a800050447 -010004210100043c0502000204a8000504a80502000204a8000504a80502000204a80005 -04a80502000204a8000504a80502000204a8000504a80502000204a8000504a805020002 -04a8000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8 -0502000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a8 -000504a8050200020408050a04070104040801000416010004040100045f000504a80502 -000204080509000004090100040a0100041c0100045f000504a805020002040805010306 -000104090100040301000400010104020100040001010403010204020100040001010403 -010204020104040901020402010004000101040a01020402010004000101040301020402 -0100040201000401010004000101041f000504a805020002040805010306000104090100 -040301010401010004010101040101000401010004020100040101010401010004040100 -04040100040a010004020100040101010401010004080100040201000401010104010100 -040101000402010004010100040201000401010104010100041e00050409050a04070104 -043d01000447050200020408050103060001040901000403010004020100040101000402 -01000401010004020100040101000408010004040100040a010004020100040101000402 -010004080100040501000402010004050100040101000400010004000100040101000402 -0100041e000504090509000004090100043f010004470502000204080501030600010409 -01000403010004020100040101000402010004010104040101000408010004040100040a -010004020100040101000402010004090102040201000402010004020103040101000400 -0100040001000401010004020100041e0005040905010306000104090100040301000400 -0101040301020403010204030102040a0102040301020402010004000101040301010400 -010004470502000204080501030600010409010004030100040201000401010004020100 -04010100040501000408010004040100040a0100040201000401010004020100040c0100 -040101000402010004010100040201000401010004000100040001000401010004020100 -041e00050409050103060001040901000403010104010100040101000402010004010100 -040201000401010004020100040801000402010004010100040201000401010104010100 -040101000401010104470502000204080501030600010409010004030100040201000401 -0100040201000401010004020100040101000408010004040100040a0100040201000401 -010004020100040801000402010004010101040101000401010004020100040101000400 -0100040001000401010004020100041e0005040905010306000104090100040301000409 -010004010100040501000402010004080100040501000402010004010100040201000401 -010004020100044705020002040805010306000104070104040101000402010004010100 -040201000402010204020100040801000405010104090102040201000402010004090102 -04020100040001010403010304020100040001000402010004020100041e000504090501 -030600010409010004030100040601030401010004050104040901020402010404010100 -040201000401010004020100044705020002040805010008045b01000437000504090501 -030600010409010004030100040501000402010004010100040501000410010004010100 -04050100040201000401010004020100044705020002040805000009045b010004370005 -040905010306000104090100040301000405010004020100040101000402010004010100 -040201000408010004020100040101000402010004010100040201000401010004010101 -044705020002046f01000437000504090501030600010409010004030100040601030402 -010204030102040a01020403010204020100040201000402010104000100044705020002 -04a8000504090501000804930502000204a8000504090500000904930502000204a80005 -04a80502000204a8000504a805020002041b0501048a000504a805020002041a0503040e -01000404010204030102046a000504a80502000204190505040d01000406010004050100 -046a000504a8050200020418050203010502040b0100040001000405010004050100040a -010204020100040001010403010204020100040201000401010004000101040301020439 -000504a8050200020417050203030502040a010004000100040501000405010004090100 -040201000401010104010100040101000402010004010100040201000401010104010100 -04010100040201000438000504a805020002041605020305050204090100040001000405 -010004050100040901000405010004020100040501000401010004000100040001000401 -01000402010004010100043c000504a80502000204150002030700020407010004020100 -0404010004050100040a0102040201000402010004020103040101000400010004000100 -0401010004020100040201020439000504a8050200020416000203050002040801040404 -010004050100040d01000401010004020100040101000402010004010100040001000400 -0100040101000402010004050100043800050409050a0407010404430100044105020002 -041700020303000204090100040201000404010004050100040901000402010004010101 -040101000401010004020100040101000400010004000100040101000402010004010100 -0402010004380005040905090000040901000488050200020418000203010002040a0100 -040201000404010004050100040a01020402010004000101040301030402010004000100 -040201000402010004020102043900050409050103060001040901000403010004000101 -040301020403010204030102040901000400010104030102040301020403010204030102 -04020100040201000402010204330502000204190005042e010004580005040905010306 -000104090100040301010401010004010100040201000401010004020100040101000402 -010004080101040101000401010004020100040101000402010004010100040201000404 -010004020100040201000401010004020100043205020002041a0003042f010004580005 -040905010306000104090100040301000409010004010100040501000402010004080100 -040501000402010004010100040501000402010004040100040201000402010004010100 -04020100043205020002041b000104300100045800050409050103060001040901000403 -010004060103040101000405010404080100040501040401010004050104040401000403 -0100040001000402010404320502000204a8000504090501030600010409010004030100 -04050100040201000401010004050100040c010004050100040501000405010004080100 -04030100040001000402010004360502000204a800050409050103060001040901000403 -010004050100040201000401010004020100040101000402010004080100040501000402 -010004010100040201000401010004020100040401000404010004030100040201000432 -0502000204a8000504090501030600010409010004030100040601030402010204030102 -0409010004060102040301020403010204050100040401000404010204330502000204a8 -000504090501000804930502000204a80005040905000009049305020002041b0001048a -000504a805020002041a0003040c01040404010004120100044301020416000504a80502 -000204190005040b0100041c0100044501000416000504a8050200020418000204010002 -040a01000406010204020100040001010403010204020104040901020402010004000101 -0403010204020100040201000401010004000101040a0102040201000400010104050100 -0402010004020100040e000504a805020002041700020403000204090100040801000402 -010104010100040101000402010004030100040a01000402010004010101040101000401 -010004020100040101000402010004010101040101000408010004020100040101010401 -0100040401000402010004020100040e000504a805020002041600020405000204080103 -04050100040201000405010004070100040a010004050100040201000405010004010100 -040001000400010004010100040201000408010004020100040101000402010004040100 -0403010004010100040e000504a805020002041505020407050204070100040801000402 -01000406010204040100040b010204020100040201000402010304010100040001000400 -010004010100040201000408010004020100040101000402010004040100040301000401 -0100040e000504a805020002041605020405050204080100040801000402010004090100 -04030100040e010004010100040201000401010004020100040101000400010004000100 -040101000402010004080100040201000401010004020100040401000404010004000100 -040e000504a8050200020417050204030502040901000408010004020100040501000402 -010004030100040a01000402010004010101040101000401010004020100040101000400 -010004000100040101000402010004080100040201000401010004020100040401000404 -0101040f00050409000a04070104042701010418010004060100043a0502000204180502 -04010502040a010004080100040201000406010204050101040901020402010004000101 -040301030402010004000100040201000402010004090102040201000402010004040100 -04050100040f00050409000905000409010004280100041a010004420502000204190505 -043c010004390100040f0005040900010406050104090100040301000400010104030102 -0403010204030102040b0100040301000402010004010100040001010403010204020104 -0402010204030102040201000400010104030102042505020002041a0503043d01000436 -010004000100041000050409000104060501040901000403010104010100040101000402 -010004010100040201000401010004020100040801040401010004020100040101010401 -010004010100040201000403010004060100040201000402010004010101040101000401 -010004020100042405020002041b0501043e010004370100041100050409000104060501 -040901000403010004090100040101000405010004020100040a01000403010004020100 -040101000402010004010100040701000406010004020100040201000401010004020100 -0401010004280502000204a8000504090001040605010409010004030100040601030401 -010004050104040a01000403010004020100040101000402010004010100040701000406 -0100040201000402010004010100040201000402010204250502000204a8000504090001 -04060501040901000403010004050100040201000401010004050100040e010004030100 -040201000401010004020100040101000407010004060100040201000402010004010100 -040201000405010004240502000204a80005040900010406050104090100040301000405 -01000402010004010100040201000401010004020100040a010004030100040101010401 -010004020100040101000402010004030100040601000402010004020100040101000402 -0100040101000402010004240502000204a8000504090001040605010409010004030100 -040601030402010204030102040b01000404010104000100040101000402010004020102 -04050101040401000403010204020100040201000402010204250502000204a800050409 -0001050804930502000204a8000504090000050904930502000204a8000504a805020002 -04a8000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8 -0502000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a8 -000504a80502000204a800050409000a040701040442010004420502000204a800050409 -00090500040901000444010004420502000204a800050409000104060501040901000403 -010004000101040301020403010204030102040a01020402010004020100040201020402 -0100040001010402010404020102043a0502000204a80005040900010406050104090100 -040301010401010004010100040201000401010004020100040101000402010004080100 -040201000401010004020100040101000402010004010101040101000403010004030100 -0402010004390502000204a8000504090001040605010409010004030100040901000401 -010004050100040201000408010004020100040101000402010004010100040201000401 -0100040201000403010004030100043d0502000204a80005040900010406050104090100 -040301000406010304010100040501040408010404020100040001000402010404010100 -040201000403010004040102043a0502000204a800050409000104060501040901000403 -010004050100040201000401010004050100040c01000406010004000100040201000405 -010004020100040301000407010004390502000204a80005040900010406050104090100 -040301000405010004020100040101000402010004010100040201000408010004020100 -040301000403010004020100040101000402010004030100040301000402010004390502 -00020408050a040701040408010004160100040401000420010204050100040901000429 -000504090001040605010409010004030100040601030402010204030102040a01020404 -01000404010204020100040201000404010104020102043a050200020408050900000409 -0100040a0100041c01000422010004100100042900050409000105080493050200020408 -050103060001040901000403010004000101040201000400010104030102040201000400 -01010403010204020104040901020402010004000101040c010004030102040201000400 -010104020100040101000426000504090000050904930502000204080501030600010409 -010004030101040101000401010104010100040101000402010004010101040101000404 -010004040100040a0100040201000401010104010100040b010004050100040201010401 -010004010100040001000427000504a80502000204080501030600010409010004030100 -0402010004010100040201000401010004020100040101000408010004040100040a0100 -040201000401010004020100040b01000405010004020100040201000401010104280005 -04a805020002040805010306000104090100040301000402010004010100040201000401 -0104040101000408010004040100040a0100040201000401010004020100040b01000405 -01000402010004020100040101010428000504a805020002040805010306000104090100 -0403010004020100040101000402010004010100040501000408010004040100040a0100 -040201000401010004020100040b01000405010004020100040201000401010004000100 -0427000504a8050200020408050103060001040901000403010004020100040101000402 -01000401010004020100040101000408010004040100040a010004020100040101000402 -0100040b010004050100040201000402010004010100040101000426000504a805020002 -040805010306000104070104040101000402010004010100040201000402010204020100 -0408010004050101040901020402010004020100040b0100040501000402010004020100 -04010100040201000425000504a8050200020408050100080494000504a8050200020408 -050000090494000504a80502000204a8000504a80502000204a8000504a80502000204a8 -000504a80502000204a8000504a80502000204a8000504a805020002041b0501048a0005 -04a805020002041a0503040e01000404010204030102040a01020405010004090100044a -000504a80502000204190505040d01000406010004050100040c010004100100044a0005 -04a8050200020418050203010502040b0100040001000405010004050100040c01000403 -010204020100040001010402010004010100040301020440000504a80502000204170502 -03030502040a0100040001000405010004050100040c0100040501000402010104010100 -04010100040001000403010004020100043f000504a80502000204160502030505020409 -0100040001000405010004050100040c0100040501000402010004020100040101010404 -01000443000504a805020002041500020307000204070100040201000404010004050100 -040c010004050100040201000402010004010101040501020440000504a8050200020416 -000203050002040801040404010004050100040c01000405010004020100040201000401 -01000400010004070100043f000504a80502000204170002030300020409010004020100 -0404010004050100040c0100040501000402010004020100040101000401010004020100 -04020100043f000504a8050200020418000203010002040a010004020100040401000405 -0100040c01000405010004020100040201000401010004020100040201020440000504a8 -05020002041900050488000504a805020002041a00030489000504a805020002041b0001 -048a000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8 -0502000204a8000504a80502000204a8000504a805020002041b0001048a000504a80502 -0002041a0003040c01040404010004120100040b01020405010004090100041b0102041d -000504a80502000204190005040b0100041c0100040d010004100100041d0100041d0005 -04a8050200020418000204010002040a0100040601020402010004000101040301020402 -0104040b01000403010204020100040001010402010004010100040a0102040201000400 -01010405010004020100040201000415000504a805020002041700020403000204090100 -040801000402010104010100040101000402010004030100040d01000405010004020101 -040101000401010004000100040a01000402010004010101040101000404010004020100 -040201000415000504a80502000204160002040500020408010304050100040201000405 -010004070100040d010004050100040201000402010004010101040b0100040201000401 -0100040201000404010004030100040101000415000504a8050200020415050204070502 -0407010004080100040201000406010204040100040d0100040501000402010004020100 -04010101040b010004020100040101000402010004040100040301000401010004150005 -04a80502000204160502040505020408010004080100040201000409010004030100040d -01000405010004020100040201000401010004000100040a010004020100040101000402 -01000404010004040100040001000415000504a805020002041705020403050204090100 -0408010004020100040501000402010004030100040d0100040501000402010004020100 -040101000401010004090100040201000401010004020100040401000404010104160005 -04a8050200020418050204010502040a010004080100040201000406010204050101040b -010004050100040201000402010004010100040201000409010204020100040201000404 -0100040501000416000504a80502000204190505047001000416000504a805020002041a -0503046e0100040001000417000504a805020002041b0501047001000418000504a80502 -000204a8000504a80502000204a8000504a80502000204a8000504a80502000204a80005 -04a80502000204a8000504a80502000204a8000504a80502000204a8000504a805020002 -04a8000504a80502000204a8000504a80502000204a8000504a80502000204a8000504a8 -0502000204a8000504a80502000204a8000505ab000205a8000405ac000105a9000305ad -000005aa00ff00ff00ff00ff001f04ff0457000504ff0457000504ff0457000504ff0457 -000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457 -000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457 -000504ff0457000504ff04570005040f01040434010004130100041a01000406010004d3 -0005041101000436010004130100041a010004db00050411010004030100040001010403 -01020403010204030102040a010204020100040201000401010404010100040001010402 -010004020100040101040409010204020100040001010402010404020102040301020402 -010004000101040301020404010104b70005041101000403010104010100040101000402 -010004010100040201000401010004020100040801000402010004010100040201000403 -01000403010104010100040101000402010004030100040a010004020100040101010401 -010004030100040601000402010004020100040101010401010004010100040201000403 -010104b70005041101000403010004090100040101000405010004020100040801000402 -01000401010004020100040301000403010004020100040101000402010004030100040a -010004020100040101000402010004030100040601000402010004020100040101000402 -01000401010004c100050411010004030100040601030401010004050104040801000402 -01000401010004020100040301000403010004020100040101000402010004030100040a -010004020100040101000402010004030100040601000402010004020100040101000402 -01000402010204be0005041101000403010004050100040201000401010004050100040c -010004020100040101000402010004030100040301000402010004010100040201000403 -0100040a0100040201000401010004020100040301000406010004020100040201000401 -0100040201000405010004bd000504110100040301000405010004020100040101000402 -010004010100040201000408010004020100040101000401010104030100040301010401 -0100040101000401010104030100040a0100040201000401010104010100040301000406 -01000402010004020100040101000402010004010100040201000403010104b700050411 -010004030100040601030402010204030102040a01020403010104000100040401010401 -010004000101040301010400010004040101040901020402010004000101040501010404 -0100040301020402010004020100040201020404010104b70005044e01000421010004e4 -0005044e01000421010004e40005044e01000421010004e4000504ff0457000504ff0457 -000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457 -000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457 -000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457 -000504ff0457000504ff045700050416050104ff043e000504150503040c010404190100 -040d010004ff0401000504140505040d0100042a010004ff040100050413050203010502 -040c01000403010004000101040901000402010004020102040201000400010104030101 -0400010004020102040201000402010004f300050412050203030502040b010004030101 -040101000408010004020100040401000402010104010100040101000401010104010100 -04020100040101000402010004f300050411050203050502040a01000403010004020100 -040801000400010004000100040401000402010004020100040101000402010004010100 -0402010004010100040001000400010004f3000504100002030700020409010004030100 -040201000408010004000100040001000404010004020100040201000401010004020100 -040101000402010004010100040001000400010004f300050411000203050002040a0100 -040301000402010004080100040001000400010004040100040201000402010004010100 -04020100040101000402010004010100040001000400010004f300050412000203030002 -040b01000403010004020100040801000400010004000100040401000402010004020100 -0401010004010101040101000402010004010100040001000400010004f3000504130002 -03010002040a010404010100040201000409010004000100040501000402010004020100 -040201010400010004020102040301000400010004f400050414000504ff043c00050415 -000304ff043d00050416000104ff043e000504ff0457000504ff0457000504ff04570005 -04ff0457000504ff0457000504ff040600470408000504ff040600460500040800050467 -058d0410000104430501040800050467058c000004100001044305010408000504670501 -048900010410000104430501040800050467050104890001041000010443050104080005 -04160001044e0501048900010410000104070602043805010408000504150003040c0104 -041201010404010004030102041905010489000104100001040706000401060004370501 -0408000504140005040d010004130100040d010004190501048900010410000104070600 -040106000402060004000601040306020402060004020600040206020403060204140501 -040800050413000204010002040c010004040102040b0100040401020405010004030102 -041205010489000104100001040706000401060004020601040106000401060004020600 -040106000402060004010600040206000401060004020600041305010408000504120002 -04030002040b010004030100040201000408010404040100040501000402010004020100 -041105010489000104100001040706030402060004050600040206000401060004000600 -0400060004010600040506000402060004130501040800050411000204050002040a0100 -0403010004020100040a0100040601000405010004020100040201000411050104890001 -041000010407060004020600040106000405060004020600040106000400060004000600 -040206020402060404130501040800050410050204070502040901000403010004020100 -040a01000406010004050100040201040411050104890001041000010407060004020600 -040106000405060004020600040106000400060004000600040506000401060004170501 -040800050411050204050502040a01000403010004020100040a01000406010004050100 -040201000415050104890001041000010407060004020600040106000405060004020600 -040106000400060004000600040106000402060004010600040206000403060104040601 -040406010501040800050412050204030502040b01000403010004020100040a01000406 -010004050100040201000402010004110501048900010410000104070603040206000406 -060204030600040006000403060204030602040406010404060104040601050104080005 -0413050204010502040c010004040102040b010004060100040501000403010204120501 -0489000104100001044305010408000504140505044c0501048900010410000104430501 -0408000504150503044d05010489000104100001044305010408000504160501044e0501 -048900010410000104430501040800050467050104890001041000010443050104080005 -04670501008b04100001044305010408000504670500008c041000010443050104080005 -04ff0406000105450408000504ff0406000005460408000504ff0457000504ff04570005 -04ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff04570005 -04ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff04570005 -04ff0457000504ff0457000504ff0457000505ff0557000405ff0558000305ff055900ff -00ff00ff00ff001f04ff0457000504ff0457000504ff0457000504ff0457000504ff0457 -000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457000504ff0457 -000504ff0457000504ff0457000504ff04570005044c003b044b003b04460005044c003a -0500044b003a050004460005044c000104370501044b00010437050104460005044c0001 -04370501044b00010437050104460005044c000104370501044b00010437050104460005 -044c000104370501044b00010437050104460005044c000104370501044b000104370501 -04460005044c000104370501044b00010437050104460005044c000104370501044b0001 -0437050104460005044c000104150102040201000402010004160501044b000104070102 -041f01020409050104460005044c00010414010004020100040101000401010004170501 -044b00010406010004020100042001000409050104460005044c00010414010004020100 -040101000400010004180501044b00010406010004020100040201020402010004000101 -0403010204030102040501000409050104460005044c0001041401000402010004010101 -04190501044b000104060100040501000402010004010101040101000401010004020100 -0401010004020100040401000409050104460005044c0001041401000402010004010100 -0400010004180501044b0001040601000409010004010100040201000401010004050100 -04020100040401000409050104460005044c000104140100040201000401010004010100 -04170501044b000104060100040601030401010004020100040101000405010404040100 -0409050104460005044c00010414010004020100040101000401010004170501044b0001 -040601000402010004010100040201000401010004020100040101000405010004080100 -0409050104460005044c00010414010004020100040101000402010004160501044b0001 -040601000402010004010100040201000401010004020100040101000402010004010100 -04020100040401000409050104460005044c000104150102040201000402010004160501 -044b00010407010204030103040101000402010004020102040301020405010004090501 -04460005044c000104370501044b00010437050104460005044c000104370501044b0001 -0437050104460005044c000104370501044b00010437050104460005044c000104370501 -044b00010437050104460005044c000104370501044b00010437050104460005044c0001 -04370501044b00010437050104460005044c000104370501044b00010437050104460005 -044c000104370501044b00010437050104460005044c000104370501044b000104370501 -04460005044c000104370501044b00010437050104460005044c00010539044b00010539 -04460005044c0000053a044b0000053a0446000504ff0457000504ff0457000504ff0457 -000504ff0457000504ff0457000504ff045700010500000204ff045700000501000204ff -0457 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 53 250 318 -%%EOF diff --git a/lib/pman/doc/src/part.xml b/lib/pman/doc/src/part.xml deleted file mode 100644 index 140d7bc3c8..0000000000 --- a/lib/pman/doc/src/part.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE part SYSTEM "part.dtd"> - -<part xmlns:xi="http://www.w3.org/2001/XInclude"> - <header> - <copyright> - <year>1996</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Pman User's Guide</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev></rev> - </header> - <description> - <p>The process manager <em>Pman</em> is a graphical tool used to - inspect the Erlang processes executing either locally or on remote - nodes. It is also possible to trace events in the individual processes.</p> - </description> - <xi:include href="pman_chapter.xml"/> -</part> - diff --git a/lib/pman/doc/src/part_notes.xml b/lib/pman/doc/src/part_notes.xml deleted file mode 100644 index e9465d7502..0000000000 --- a/lib/pman/doc/src/part_notes.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE part SYSTEM "part.dtd"> - -<part xmlns:xi="http://www.w3.org/2001/XInclude"> - <header> - <copyright> - <year>2004</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Pman Release Notes</title> - <prepared></prepared> - <docno></docno> - <date>2004-09-07</date> - <rev>1.0</rev> - <file>part_notes.sgml</file> - </header> - <description> - <p>The process manager <em>Pman</em> is a graphical tool used to - inspect the Erlang processes executing either locally or on remote - nodes. It is also possible to trace events in the individual - processes.</p> - </description> - <xi:include href="notes.xml"/> -</part> - diff --git a/lib/pman/doc/src/pman.xml b/lib/pman/doc/src/pman.xml deleted file mode 100644 index db1a43065c..0000000000 --- a/lib/pman/doc/src/pman.xml +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE erlref SYSTEM "erlref.dtd"> - -<erlref> - <header> - <copyright> - <year>1996</year> - <year>2013</year> - <holder>Ericsson AB, All Rights Reserved</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - The Initial Developer of the Original Code is Ericsson AB. - </legalnotice> - - <title>pman</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev></rev> - </header> - <module>pman</module> - <modulesummary>A graphical process manager.</modulesummary> - <description> - <warning> - <p> - The Pman application has been superseded by the Observer application. - Pman will be removed in R16. - </p> - </warning> - <p>A graphical tool used to inspect the Erlang processes executing either - locally or on remote nodes. It is also possible to trace events in - the individual processes.</p> - </description> - <funcs> - <func> - <name>start()</name> - <name>start(Excluded)</name> - <name>start_notimeout()</name> - <name>start_notimeout(Excluded)</name> - <fsummary>Start Pman.</fsummary> - <type> - <v>Excluded = [Module]</v> - <v> Module = atom()</v> - </type> - <desc> - <p>Starts Pman. It will use the previously saved trace settings - in <c>HOME/.erlang_tools/pman.opts</c>, where <c>HOME</c> is - the user's home directory, if such a file exists. Otherwise - standard trace settings will be used. The return value should - be ignored.</p> - <p><c>Excluded</c> is a list of module names. If the argument is - present, processes currently executing in any of these modules - will not be shown by Pman.</p> - <p><c>start/0,1</c> will fail unless the start-up succeeds - within 20 seconds, whereas <c>start_notimeout/0,1</c> will - wait indefinitely.</p> - </desc> - </func> - <func> - <name>proc(Process)</name> - <name>proc(A, B, C)</name> - <fsummary>Start a Pman trace window.</fsummary> - <type> - <v>Process = pid() | atom()</v> - <v>A = B = C = integer()</v> - </type> - <desc> - <p>Starts a Pman trace window for the specified process. - The return value should be ignored.</p> - <p>The process to trace is given either by its pid or by its - registered name. It is also possible to use <c>proc/3</c> - to trace the pid represented as <c><![CDATA[<A,B,C>]]></c>.</p> - </desc> - </func> - </funcs> -</erlref> - diff --git a/lib/pman/doc/src/pman_chapter.xml b/lib/pman/doc/src/pman_chapter.xml deleted file mode 100644 index d0b50c58f8..0000000000 --- a/lib/pman/doc/src/pman_chapter.xml +++ /dev/null @@ -1,377 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE chapter SYSTEM "chapter.dtd"> - -<chapter> - <header> - <copyright> - <year>1996</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Pman</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev></rev> - <file>pman_chapter.xml</file> - </header> - <marker id="here"></marker> - - <section> - <title>Introduction</title> - <warning> - <p> - The Pman application has been superseded by the Observer application. - Pman will be removed in R16. - </p> - </warning> - <p>The process manager Pman is a tool for viewing processes executing - locally or on remote nodes. Its main purpose is to locate - erroneous code by inspecting the state of the processes and by tracing - events. Bottlenecks, unread messages, and bad memory handling are - some of the problems that can be solved with Pman.</p> - <p>Processes may be inspected individually in a process trace - window. There the user may dynamically follow the execution of a - process by getting trace output for sent and received messages - as well as for called functions and some other process - events. Information about source code modules executed by the - processes is also accessible. Note that Pman has some effect on - the real time behavior of a running system.</p> - </section> - - <section> - <title>Getting Started with Pman</title> - <p>Start Pman by calling <c>pman:start()</c>. It will start - the <seealso marker="#main_win">Main Window</seealso>, showing an - overview of all processes running at the current node.</p> - <p>To trace a certain process, select it by clicking on its line and - then chose Trace->Selected Process, or simply double-click it. This - will open a <seealso marker="#trace_win">Trace Window</seealso>. - In the Trace Window, there is some information about the process - and traced events are added dynamically.</p> - <p>Which events to trace are selected in - the <seealso marker="#options_win">Options Window</seealso> which - is opened by choosing File->Options... in the Main Window or in a - Trace Window. Currently supported trace events are message sending, - message receiving, function calls and process events.</p> - <p>It is possible to by-pass the Main Window and open a Trace - Window directly for the process <c>Pid</c> by calling - <c>pman:proc(Pid)</c>.</p> - </section> - - <section> - <marker id="main_win"></marker> - <title>The Main Window</title> - <p>The Main Window shows all processes running at the displayed node. - The window is automatically updated every 5 seconds. - Select which node to display in the window by choosing the node name - from the Nodes menu.</p> - <image file="main_window.gif"> - <icaption>The Main Window.</icaption> - </image> - <p>A process can be selected by clicking on its line. The selected - process is highlighted. Use the arrow keys to move up and down in - the process overview.</p> - <p>The following information is displayed for each process:</p> - <list type="bulleted"> - <item>Pid - process identifier.</item> - <item>Current Function - the function (<c>Module:Function/Arity</c>) - the process is currently executing.</item> - <item>Name - registered name of the process, if any.</item> - <item>Msgs - number of messages in the process' mailbox.</item> - <item>Reds - number of reductions performed. Gives a rough estimate - of the process' work load.</item> - <item>Size - estimated size of the process, in words, calculated by - adding the stack size and the heap size.</item> - </list> - <p>At the bottom of the window the following functions and - information can be found:</p> - <taglist> - <tag><em>Hide System Processes</em></tag> - <item>This check button controls the display of what Pman consider - <em>system processes</em>, that is, processes Pman knows are part - of Erlang/OTP rather than the user's application. - If the button is selected, these system processes will not be - shown.</item> - <tag><em>Auto-Hide New</em></tag> - <item>This check button controls the treatment of newly created - processes. If it is selected, new processes will not be shown.</item> - <tag><em># Hidden</em></tag> - <item>This label displays the number of processes currently - executing that are not shown in the process overview.</item> - </taglist> - - <section> - <title>The File Menu</title> - <taglist> - <tag><em>Options...</em></tag> - <item>Open the <seealso marker="#options_win">Options Window</seealso> - which allows the user to set the trace options to use.</item> - <tag><em>Save Options</em></tag> - <item>Save the options set using the Options Window. The options are - stored to the file <c>HOME/.erlang_tools/pman.opts</c>, where - <c>HOME</c> is the user's home directory, and are automatically - loaded the next time Pman is started.</item> - <tag><em>Exit</em></tag> - <item>Stop Pman.</item> - </taglist> - </section> - - <section> - <title>The View Menu</title> - <p>This menu mainly contains buttons for controlling what to - display in the Main Window. Note that the View Menu overrides - the settings of the check buttons (Hide System processes, Auto-Hide - new) in the Main Window.</p> - <taglist> - <tag><em>Hide All Processes</em></tag> - <item>Hide all processes.</item> - <tag><em>Hide Modules...</em></tag> - <item>Opens a dialog window with all loaded modules. If the user - selects a window and clicks OK, the process overview will not - show any processes running code from those modules.</item> - <tag><em>Hide Selected Processs</em></tag> - <item>Hide the selected process.</item> - <tag><em>Module Info...</em></tag> - <item>Given a selected process currently executing a function in - the module <c>Module</c>, this menu button opens a window - showing information about the module as returned from - <c>Module:module_info()</c>.</item> - <tag><em>Refresh</em></tag> - <item>Updates the process overview.</item> - <tag><em>Show All Processes</em></tag> - <item>Show all processes, except system processes and/or new - processes if <em>Hide System Processes</em> and/or - <em>Auto-Hide New</em> is selected.</item> - <tag><em>Show Processes...</em></tag> - <item>Opens a dialog window with all hidden processes. If - the user selects a process and clicks OK, the process - overview will show that process.</item> - </taglist> - </section> - - <section> - <title>The Trace Menu</title> - <taglist> - <tag><em>Kill</em></tag> - <item>Terminates the selected process by calling - <c>exit(Pid,kill)</c>.</item> - <tag><em>Trace Selected Process</em></tag> - <item>Opens a Trace Window for the selected process. Tracing - will start immediately with the default trace flags set from - the Main Window.</item> - <tag><em>Shell Process</em></tag> - <item>Opens a Trace Window for the shell process of node Pman - was started at (not the displayed node). If the shell process - dies, the opened Trace Window will find the pid of - the automatically started new shell process, and continue to - trace that process.</item> - </taglist> - </section> - - <section> - <title>The Nodes Menu</title> - <p>The Nodes menu contains one entry for each known node. - By selecting a node from the Nodes menu, the process overview - window will change its view, and display the processes running - on that node.</p> - </section> - - <section> - <title>The Help Menu</title> - <taglist> - <tag><em>Help</em></tag> - <item>Selecting Help from the Help menu will cause the HTML - version of the Pman User's Guide (this document) to be - displayed. Currently this function requires Netscape to be up - and running.</item> - </taglist> - </section> - </section> - - <section> - <marker id="trace_win"></marker> - <title>The Trace Window</title> - <p>A Trace Window outputs trace information for a traced process. - A Trace Window automatically uses the trace options set in - the Main Window, but it is also possible to change the options for - each Trace Window individually.</p> - <image file="trace.gif"> - <icaption>The Trace Window.</icaption> - </image> - <p>There is no limit to how many Trace Windows can be open at the same - time. However, notice that if more processes are traced, - the performance degradation of the system will be more noticeable.</p> - <p>The following information is displayed, where applicable:</p> - <list type="bulleted"> - <item>initial call - the function (<c>Module:Function/Arity</c>) - the process started executing in.</item> - <item>current function - the function (<c>Module:Function/Arity</c>) - the process is currently executing.</item> - <item>messages - the messages in the mailbox.</item> - <item>dictionary - the contents of the process dictionary.</item> - <item>heap size - heap size in words.</item> - <item>stack size - stack size in words.</item> - <item>reductions - number of reductions performed. Gives a rough - estimate of the process' work load.</item> - <item>links - list of pids the process is linked to.</item> - <item>trap_exit - <c>true</c> if the process trap exit signals, - <c>false</c> otherwise.</item> - </list> - <p>In the Trace Window, trace output is continuously added. First in - each trace message is the pid of the traced process. - Note that if the inheritance flags for tracing are set, the trace - output for the spawned/linked processes will be shown in the same - window as the spawning/linking process.</p> - <p>Each trace message also has a mnemonic tag:</p> - <taglist> - <tag><em>!</em></tag> - <item>This tag indicates that a message has been sent. Following - the <c>To:</c> tag will be a pid/name of the receiver. Next, - following the <c>Msg:</c> tag will be the sent message.</item> - <tag><em>rec</em></tag> - <item>This tag indicates that a message has been received. - Following this will be the received message.</item> - <tag><em>call</em></tag> - <item>This tag indicates a call to a function. Following this will be - the actual call, with all the arguments.</item> - <tag><em>link</em></tag> - <item>This tag indicates that a link between the traced process and - another process has been created. Following this will be the pid - of the other process.</item> - <tag><em>spawn</em></tag> - <item>This tag indicates that the traced process has spawned another - process. Following this will be the pid of the spawned process.</item> - <tag><em>exit</em></tag> - <item>This tag indicates that traced process has exited. Following - this will be the exit reason.</item> - </taglist> - - <section> - <title>The File Menu</title> - <taglist> - <tag><em>Options...</em></tag> - <item>Opens the <seealso marker="#options_win">Options Window</seealso> - which allows the user to set the trace options to use for this - specific Trace Window.</item> - <tag><em>Save Buffer...</em></tag> - <item>Opens a dialog that prompts the user for a file name to - save the current Trace Window contents in.</item> - <tag><em>Close</em></tag> - <item>Stops tracing of the process, and closes the Trace Window.</item> - </taglist> - </section> - - <section> - <title>The View Menu</title> - <taglist> - <tag><em>Clear Buffer</em></tag> - <item>Clears the contents of the Trace Window.</item> - <tag><em>Module Info</em></tag> - <item>Opens a window showing information about the module - the process is currently executing code from, as returned from - <c>Module:module_info()</c>.</item> - </taglist> - </section> - - <section> - <title>The Trace Menu</title> - <taglist> - <tag><em>All Linked Processes</em></tag> - <item>Opens a Trace Window for each of the processes linked to the - process being traced in the current Trace Window.</item> - <tag><em>Linked Process -></em></tag> - <item>The Linked Process submenu has one entry for each process - linked to the process being traced in the current Trace Window. - Select one of the processes to open a new Trace Window for that - process.</item> - <tag><em>Kill</em></tag> - <item>Terminates the process being traced in the current Trace - Window by calling <c>exit(Pid,kill)</c>.</item> - </taglist> - </section> - - <section> - <title>The Help Menu</title> - <taglist> - <tag><em>Help</em></tag> - <item>Selecting Help from the Help menu will cause the HTML version - of the Pman User's Guide (this document) to be displayed. - Currently this function requires Netscape to be up and running.</item> - </taglist> - </section> - </section> - - <section> - <marker id="options_win"></marker> - <title>The Options Window</title> - <p>The Options Window allows the user to specify the amount of output, - and the destination of output for traced processes.</p> - <image file="options.gif"> - <icaption>The Options Window.</icaption> - </image> - <p>In the upper left corner of the Options Window, there are check - buttons for determining what to output in the Trace Window:</p> - <taglist> - <tag><em>Trace send</em></tag> - <item>Select this check button to display information about sent - messages.</item> - <tag><em>Trace receive</em></tag> - <item>Select this check button to display information about received - messages.</item> - <tag><em>Trace functions</em></tag> - <item>Select this check button to display information about - function calls.</item> - <tag><em>Trace events</em></tag> - <item>Select this check button to display information about process - events, such as spawn, link and exit.</item> - </taglist> - <p>In the upper right corner of the dialog, there are options for - controlling the behaviour of spawned or linked processes:</p> - <taglist> - <tag><em>Inherit on spawn</em></tag> - <item> - <p>The user may select if spawned processes shall also be traced. - And if so, if all spawned processes should be traced, or just - the first spawned process.</p> - <p>If a spawned process is traced, it will get the same trace - options that are set for the spawning process. And the output - will be shown in the same Trace Window as that of the spawning - process.</p> - <p>.</p> - </item> - <tag><em>Inherit on link</em></tag> - <item> - <p>The user may select if a process that is being linked to - shall be traced. And if so, if all linked processes shall be - traced, or just the first one linked to.</p> - <p>If a linked process is traced, it will get the same trace - options that are set for the linking process. And the output - will be shown in the same Trace Window as that of the linked - process.</p> - </item> - </taglist> - <p>In the lower part of the Options Dialog, the user may select - whether the trace information shall be output to a file, or appear in - the trace window.</p> - <p>Sending trace information to a file is more efficient than displaying - it in the Trace Window. Furthermore, if the amount of trace data is - large, it will not be lost if tracing to a file. The trace information - in the Trace Window has an upper limit (approx. 10,000 lines), after - which the output buffer will be cleared.</p> - </section> -</chapter> - diff --git a/lib/pman/doc/src/ref_man.xml b/lib/pman/doc/src/ref_man.xml deleted file mode 100644 index 3b526d86ef..0000000000 --- a/lib/pman/doc/src/ref_man.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE application SYSTEM "application.dtd"> - -<application xmlns:xi="http://www.w3.org/2001/XInclude"> - <header> - <copyright> - <year>1996</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Pman Reference Manual</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev></rev> - </header> - <description> - <p>The process manager <em>Pman</em> is a graphical tool used to - inspect the Erlang processes executing either locally or on remote - nodes. It is also possible to trace events in the individual processes.</p> - </description> - <xi:include href="pman.xml"/> -</application> - diff --git a/lib/pman/doc/src/toolbar.gif b/lib/pman/doc/src/toolbar.gif Binary files differdeleted file mode 100644 index 116e32ace8..0000000000 --- a/lib/pman/doc/src/toolbar.gif +++ /dev/null diff --git a/lib/pman/doc/src/trace.gif b/lib/pman/doc/src/trace.gif Binary files differdeleted file mode 100644 index 8b34ec7ea0..0000000000 --- a/lib/pman/doc/src/trace.gif +++ /dev/null diff --git a/lib/pman/doc/src/trace.ps b/lib/pman/doc/src/trace.ps deleted file mode 100644 index 0828d4ade1..0000000000 --- a/lib/pman/doc/src/trace.ps +++ /dev/null @@ -1,1312 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./trace.tmp.eps) -%%CreationDate: (Tue Jun 12 18:05:00 2001) -%%BoundingBox: 0 17 377 309 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 17 377 309 -userdict begin -%%BeginData: -DisplayImage -0 17 -377.000000 292.000000 -12 -562 436 -1 -0 -0 -8 -ffffff -000000 -b24d7a -dcadc2 -57253b -d9d9d9 -c3c3c3 -828282 -03ff03ff034e040003ff03f40400031c04000301021a0400030002ff02f304000300021a -04010301021a0400030002ff02f304000300021a04010301021a0400030002ff02f30400 -0300021a0401030102020418030004ff04f4030004170202040103010202040003ff03ff -032602020401030102020400030002150400030002ff02db040003000215040003000215 -0400030002020401030102020400030002150400030002ff02db04000300021504000300 -02150400030002020401030102020400030002150400030002ff02db0400030002150400 -030002150400030002020401030102020400030002150400030002ff02db040003000215 -040003000202030f02020400030002020401030102020400030002150400030002ff0263 -000302730400030002150400030002020300020d04000202040003000202040103010202 -04000300021504000300021f000602020001020600010206000102060001020500000209 -0004020100010211000102020001025a0002020a000502040004020c0002022f00010205 -00000212000102110001021b0004020d000102080001023a040003000215040003000202 -0300020d0400020204000300020204010301020204000300021504000300021f00010202 -000202010002020400020205000202060002020400000207000202020000020100010211 -000102020001025800010202000102080000020200020203000002020001020900010202 -0001022d00020204000002120001021100010219000102040000020c000102080001023a -0400030002150400030002020300020d0400020204000300020204010301020204000300 -021504000300021f00010203000102010002020400020205000002000001020500020204 -0000020700010206000102110001020200010258000102020001020d0001020800010208 -000102020001022d00020204000002120001021100010218000002070000020b00010245 -0400030002150400030002020300020d0400020204000300020204010301020204000300 -021504000300021f00010203000102010000020000000203000302050000020000010205 -000002000001020300000203000102010001020600010200000302050003020200010202 -000102080001020000020204000102000001020200040204000402030003020300040203 -0004020f00000201000102040001020c0001020800010207000102040001020000000211 -000402020001020000030209000002000001020300000204000402040002020000010204 -000302070004020200040204000402030000020300030201000002030004020100010200 -00030203000102010001020400000202000402030004021f040003000215040003000202 -0300020d04000202040003000202040103010202040003000202030f020204000300021f -000102030001020100000200000102020000020000010204000102000001020500000200 -000202020000020300010201000302040002020200010203000102010001020100010202 -000102080002020100010203000202030001020200010202000102060001020100010201 -000102060001021100010202000102040001020b00010209000102070001020400010201 -0001020e0001020200010201000202020001020800000200000202020000020300010202 -000102020001020100020203000102010001020700010203000102020001020200010202 -000102020000020100010202000002010000020200010205000202020001020200010202 -000002040000020200000202000102010001022304000300020803030208040003000202 -0300020d040002020400030002020401030102020400030002020300020d040002020400 -0300021f0001020200010202000002000001020200000200000102040000020200010204 -000002010001020200000208000402020001020300010202000102030001020000010202 -000102080001020300010202000102030001020400010200000102060001020300010200 -000102060001020f0001020400010204000102080002020a000102080001020400010203 -0001020b0001020400010200000102030001020800000201000102020000020200010204 -000102000001020300010202000102030001020600010202000102040001020000010204 -000102000000020200000202000102010000020100010206000102030001020200010202 -000102020000020700010201000102230400030002080300020104000208040003000202 -0300020d040002020400030002020401030102020400030002020300020d040002020400 -0300021f0005020300000201000102000000020100010203000102020001020400000202 -000102010000020a00030201000102030001020200010203000102000001020200010208 -000102030001020200010203000102040001020000010206000102030001020000030204 -0003020a00020206000102040001020b0001020800000209000102040001020500020208 -000102040001020000010203000102080000020200010201000002020001020400010200 -000102030001020200010203000102060001020200010204000102000001020400010200 -000002010000020200010202000002010001020600010203000102020001020200010202 -00000207000102010003022104000300020803000201040002080400030002020300020d -040002020400030002020401030102020400030002020300040e020204000300021f0001 -020700000201000102000000020100010203000102020002020300000202000202000000 -020c00020200000102030001020200070200000102020001020800010203000102020001 -020300010204000102000001020600070202000302040003020600020208000102040001 -020c000102060000020a0001020400010207000202060001020400010200000102030001 -020800000202000202000000020200010204000102000001020300010202000702060001 -020200010204000102000001020400010200000002010000020100020201000102010001 -02060001020300010202000102030000020100010204000402030003021f040003000208 -0300040202080400030002020300020d0400020204000300020204010301020204000300 -021504000300021f00010207000002010001020000000201000102030007020300000203 -000102000000020d00010200000102030001020200010206000102020001020800010203 -00010202000102030001020400010200000102060001020a000202050002020700020206 -000102040001020c000102050000020b0001020400010205000202080001020400010200 -000102030001020800000203000102000000020200010204000102000001020300010202 -0001020c0001020200010204000102000001020400010200000002010000020100000200 -000002010000020200010206000102030001020200010203000102000000020300020201 -000102050002021e0400030002150400030002020300020d040002020400030002020401 -0301020204000300021504000300021f0001020700000202000102020001020200010204 -00010203000002040002020d000102000001020300010202000102060001020200010208 -0001020300010202000102030001020400010200000102060001020b000102060001020a -00010205000102020001020d000102040000020d00010202000102040001020b00010204 -000102000001020300010208000002040002020200010204000102000001020300010202 -0001020c0001020200010204000102000001020400010201000002000002020100020203 -00010206000102030001020200010203000102000000020300010202000102060001021e -0400030002150400030002020300020d0400020204000300020204010301020204000300 -021504000300021f00010207000002020001020200010202000002060001020200000204 -000202030001020100000203000102010001020300010203000102030000020000010202 -000102080002020100010203000102040001020200010202000102020000020200010203 -000002000000020300010201000002030001020c00010203000102020001020300010202 -0000020200010204000102080001020200010202000102020001020e0001020200010201 -000102030001020800000204000202030001020200010202000102010002020300010203 -000002060001020300010202000102020001020200010202000102030000020700010202 -00000201000102030001020200010204000102040001020200010201000002030001021e -0400030002150400030002020300020d0400020204000300020204010301020204000300 -021504000300021f00010207000002070001020100010206000102020000020500010203 -000102010005020200010203000102050004020000010202000102080001020000020204 -00010205000402040004020400040200000502020005020f000002040002020500010202 -000402050006020300010204000202030000021100040202000102030001020800000205 -000102040004020400020200000102050004020600010204000402040004020500030209 -000402010001020300010202000102040001020500030200000102000005021f04000300 -02150400030002020300020d040002020400030002020401030102020400030002150400 -03000282000102ff02560400030002150400030002020300020d04000202040003000202 -040103010202040003000215040003000282000102ff0256040003000215040003000202 -0300040e0202040003000202040103010202040003000215040003000282000102ff0256 -0400030002150400030002150400030002020401030102020400030002150400030002ff -02db04000300021504000300021504000300020204010301020204000300021504000300 -02ff02db04000300021504000300021504000300020204010300040403000416030004ff -04dc030004160300041603000404030500ff00ff00250304040003010202040000ff00ff -00240700030002020401030102020400000105ff05ff0521070103000202040103010202 -0400000105ff05ff05210701030002020401030102020400000105ff05ff052107010300 -02020401030102020400000105ff05ff05210701030002020401030102020400000105ff -05ff052107010300020204010301020204000001050b01040504010005030102051f0100 -05020100050401000526010405ff05860100050201000509010205130701030002020401 -0301020204000001050b0100050f0100051f010005020100052e010005ff058801000502 -0100050b0100051307010300020204010301020204000001050b01000506010205050100 -050301020518010005020100050201020503010205020100050201000519010005030100 -0500010105030102050301020503010205ff056b01000502010005020102050501000502 -010005000101050c07010300020204010301020204000001050b01000508010005050100 -050201000502010005180100050001000505010005020100050201000501010005020100 -051901000503010105010100050101000502010005010100050201000501010005020100 -05ff056a0100050201000501010005020100050401000502010105010100050b07010300 -020204010301020204000001050b01030505010005050100050201000502010005180100 -050001000505010005020100050201000501010005000100050001000519010005030100 -0509010005010100050501000502010005ff056a01040501010005020100050401000502 -010005020100050b07010300020204010301020204000001050b01000508010005050100 -050201040518010005000100050501000502010405010100050001000500010005190100 -0503010005060103050101000505010405ff056a01000502010005010104050401000502 -010005020100050b07010300020204010301020204000001050b01000508010005050100 -05020100051d010005060100050201000505010005000100050001000519010005030100 -0505010005020100050101000505010005ff056e01000502010005010100050801000502 -010005020100050b07010300020204010301020204000001050b01000508010005050100 -050201000502010005190100050601000502010005020100050101000500010005000100 -051901000503010005050100050201000501010005020100050101000502010005ff056a -0100050201000501010005020100050401000502010105010100050b0701030002020401 -0301020204000001050b0100050801000505010005030102051a01000506010005030102 -0503010005000100051a01000503010005060103050201020503010205ff056b01000502 -010005020102050501000502010005000101050c07010300020204010301020204000001 -05ff05ff05100100050f07010300020204010301020204000001050a0106052a0106052a -010605ff05840106050e0100050f07010300020204010301020204000001050a0106052a -0106052a010605ff05840106050e0100050f0701030002020401030102020400000105ff -05ff05210701030002020401030102020400000105ff05ff052107010300020204010301 -02020400000105ff05ff05210701030002020401030102020400000107ff07ff07230300 -02020401030102020400000007ff07ff072403000202040103010202040005ff05ff0525 -03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525 -03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525 -03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525 -03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525 -03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525 -03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525 -03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0525 -03000202040103010202040005ff05ff052503000202040103010202040005ff05ff0515 -070f03000202040103010202040005ff05ff0515070f0300020204010301020204000504 -07ff07ff070e05010701060607000605030002020401030102020400050407ff07ff070d -00000501070106050000070006050300020204010301020204000504070105ff05ff050a -00010501070106050000070106040300020204010301020204000504070105cf010005ff -053900010501070106040001070106040300020204010301020204000504070105030100 -050c01000504010005060100050a0102051801020503010205170100050d010205030102 -051f010205120100051501000502010205ff053300010501070106040001050007010603 -030002020401030102020400050407010517010005140100051a01000505010005170100 -050f010005050100052101000512010005140100050201000502010005ff053200010501 -070106030001050107010603030002020401030102020400050407010501010205020100 -050001010503010205020104050201020503010205050100050a01020503010205050100 -0505010005040101050a0102050201000500010105030102050501000505010005040101 -050301020502010005020100050201020505010005020100050201000502010205020104 -050201020502010005000101050501000506010005ff0532000105010701060300010502 -070106020300020204010301020204000504070105030100050201010501010005040100 -050401000506010005020100050201000504010005090100050201000501010005020100 -050401000505010005040101050901000502010005010101050101000501010005020100 -050401000505010005040101050201000502010005010100050201000501010005020100 -050401000502010005020100050101000502010005030100050301000502010005010101 -05010100050301000507010005ff05320001050107010602000105030701060203000202 -040103010202040005040701050301000502010005020100050401000504010005060100 -050601000504010005090100050901000504010005050100051001000505010005020100 -050101000502010005040100050501000509010005020100050101000502010005050100 -050401000502010005020100050501000503010005030100050201000501010005070100 -0505010105ff053300010501070106020001050407010601030002020401030102020400 -050407010503010005020100050201000504010005040100050601000503010305040100 -050901000506010305040100050501000511010205020100050201000501010405040100 -050501000509010405020100050001000503010305040100050201000502010005020103 -05030100050301000502010005010100050601000508010005ff05320001050107010601 -000105050701060103000202040103010202040005040701050301000502010005020100 -050401000504010005060100050201000502010005040100050901000505010005020100 -050401000505010005140100050101000502010005010100050801000505010005090100 -050601000500010005020100050201000504010005020100050201000501010005020100 -05030100050301000502010005010100050601000508010005ff05320001050107010601 -000105060701060003000202040103010202040005040701050301000502010005020100 -050401000504010005060100050201000502010005040100050901000502010005010100 -050201000504010005050100050401010509010005020100050101000502010005010100 -050201000504010005050100050401010502010005020100050301000503010005020100 -050401000502010005010101050101000502010005030100050301000502010005010100 -05050100050501000502010005ff05320001050107010600000105070701060003000202 -040103010202040005040701050301000502010005020100050401000505010105040100 -0503010305040100050a010205030103050401000505010005040101050a010205020100 -050201000502010205050100050501000504010105030102050401000504010305040100 -050301010500010005020103050401010502010205020100050501000506010205ff0533 -0001050107010600000105080701030002020401030102020400050407010530010505ff -05d30001050107010001070b0300020204010301020204000504070105ff05ff050a0001 -050107010000070c0300020204010301020204000504070105ff05ff050a000105010701 -060d0300020204010301020204000504070105ff05ff050a000105010701000d03000202 -04010301020204000504070105ff05ff050a000105010701000d03000202040103010202 -04000504070105ff05ff050a0001050107010001050a0700030002020401030102020400 -0504070105ff05ff050a0001050107010001050a07000300020204010301020204000504 -070105ff05ff050a0001050107010001050a070003000202040103010202040005040701 -05ff05ff050a0001050107010001050a07000300020204010301020204000504070105ff -05ff050a0001050107010001050a07000300020204010301020204000504070105ff05ff -050a0001050107010001050a07000300020204010301020204000504070105ff05ff050a -0001050107010001050a07000300020204010301020204000504070105ff05ff050a0001 -050107010001050a07000300020204010301020204000504070105ff05ff050a00010501 -07010001050a07000300020204010301020204000504070105ff05ff050a000105010701 -0001050a07000300020204010301020204000504070105ff05ff050a0001050107010001 -070b0300020204010301020204000504070105ff05ff050a0001050107010000070c0300 -020204010301020204000504070105ff05ff050a000105010701060d0300020204010301 -020204000504070105eb010005ff051d000105010701060d030002020401030102020400 -05040701052c0100050d0101051801000506010005250100050d010205030102051f0102 -050a0102051b01000502010205ff0517000105010701060d030002020401030102020400 -05040701052c0100050c0100051a0100052d0100050f01000505010005210100050c0100 -051a0100050201000502010005ff0516000105010701060d030002020401030102020400 -050407010501010205020100050201000501010005000101050201000500010105030102 -050201000500010105020104050a01000503010005020100050101000500010105030102 -050201040502010205030102050201000500010105040101050a01020502010005000101 -050301020505010005050100050401010503010205020100050201000502010205050100 -050c010005030102050301020502010005000101050501000506010005ff051600010501 -0701060d0300020204010301020204000504070105000100050201000501010005020100 -050101010501010005010101050101000501010005020100050101010501010005030100 -050a01040501010005020100050101010501010005010100050201000503010005060100 -050201000502010005010101050101000503010105090100050201000501010105010100 -050101000502010005040100050501000504010105020100050201000501010005020100 -050101000502010005040100050c01000502010005020100050101000502010005010101 -05010100050301000507010005ff0516000105010701060d030002020401030102020400 -050407010500010005050100050201000501010005050100050501000502010005010100 -0502010005030100050c0100050301000502010005010100050201000501010005070100 -0506010005020100050201000501010005020100050f0100050501000502010005010100 -050201000504010005050100050901000502010005010100050201000505010005040100 -050c01000502010005020100050101000502010005010100050201000503010005060100 -05ff0517000105010701060d030002020401030102020400050407010500010005050100 -05020100050101000505010005050104050101000502010005030100050c010005030100 -050201000501010005020100050101000507010005060100050201000502010005010100 -050201000510010205020100050201000501010405040100050501000509010405020100 -050001000503010305040100050c01000502010005020100050101000502010005010100 -05020100050201000506010005ff0518000105010701060d030002020401030102020400 -050407010500010005050100050201000501010005050100050501000505010005020100 -05030100050c010005030100050201000501010005020100050101000507010005060100 -050201000502010005010100050201000513010005010100050201000501010005080100 -05050100050901000506010005000100050201000502010005040100050c010005020100 -0502010005010100050201000501010005020100050201000505010005ff051900010501 -0701060d0300020204010301020204000504070105000100050201000501010005010101 -05010100050501000505010005020100050101000502010005030100050c010005030100 -050101010501010005020100050101000502010005030100050601000502010005020100 -050101000502010005030101050901000502010005010100050201000501010005020100 -050401000505010005040101050201000502010005030100050301000502010005040100 -050c01000502010005020100050101000502010005010101050101000501010005050100 -05ff051a000105010701060d030002020401030102020400050407010501010205030101 -05000100050101000505010005060102050201000502010005040101050a010005040101 -050001000501010005020100050201020505010105040100050301020502010005020100 -05030101050a010205020100050201000502010205050100050501000504010105030102 -050401000504010305040100050c01000503010205030102050201000500010105020100 -0505010405ff0516000105010701060d0300020204010301020204000504070105300105 -058c01050516010005ff0528000105010701060d03000202040103010202040005040701 -05e0010005ff0528000105010701060d0300020204010301020204000504070105e00100 -05ff0528000105010701060d0300020204010301020204000504070105ff05ff050a0001 -05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d -0300020204010301020204000504070105ff05ff050a000105010701060d030002020401 -0301020204000504070105ff05ff050a000105010701060d030002020401030102020400 -0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff -05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001 -05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d -0300020204010301020204000504070105ff05ff050a000105010701060d030002020401 -0301020204000504070105ff05ff050a000105010701060d030002020401030102020400 -0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff -05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001 -05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d -0300020204010301020204000504070105ff05ff050a000105010701060d030002020401 -0301020204000504070105ff05ff050a000105010701060d030002020401030102020400 -0504070105000100052b0100051f01020503010205ff05b1000105010701060d03000202 -04010301020204000504070105000100054b010005020100050101000502010005ff05b0 -000105010701060d03000202040103010202040005040701050001000500010105030102 -050301020502010005000101050a01020503010205020104050201020504010105090100 -05020100050101000502010005ff05b0000105010701060d030002020401030102020400 -050407010500010105010100050101000502010005010100050201000501010105010100 -050801000502010005040100050601000501010005020100050301010509010005020100 -050101000502010005ff05b0000105010701060d03000202040103010202040005040701 -050001000502010005010100050201000505010005010100050201000508010005080100 -050501000502010005020100051001020503010305ff05b0000105010701060d03000202 -040103010202040005040701050001000502010005010104050201030501010005020100 -05090102050501000504010005030104050f0100050201000505010005ff05b000010501 -0701060d0300020204010301020204000504070105000100050201000501010005050100 -050201000501010005020100050c01000504010005030100050401000513010005020100 -0505010005ff05b0000105010701060d0300020204010301020204000504070105000100 -050201000501010005020100050101000502010005010101050101000508010005020100 -050401000502010005050100050201000503010105090100050201000501010005020100 -05ff05b0000105010701060d030002020401030102020400050407010500010005020100 -05020102050301030501010005000101050a010205050100050201040502010205040101 -050a01020503010205ff05b1000105010701060d03000202040103010202040005040701 -051501000504010505ff05e8000105010701060d03000202040103010202040005040701 -0515010005ff05f3000105010701060d0300020204010301020204000504070105150100 -05ff05f3000105010701060d0300020204010301020204000504070105ff05ff050a0001 -05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d -0300020204010301020204000504070105ff05ff050a000105010701060d030002020401 -0301020204000504070105ff05ff050a000105010701060d030002020401030102020400 -0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff -05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001 -05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d -0300020204010301020204000504070105ff05ff050a000105010701060d030002020401 -0301020204000504070105ff05ff050a000105010701060d030002020401030102020400 -0504070105ff05ff050a000105010701060d0300020204010301020204000504070105ff -05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a0001 -05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d -0300020204010301020204000504070105ff05ff050a000105010701060d030002020401 -0301020204000504070105ff05ff050a000105010701060d030002020401030102020400 -05040701050901000511010005160100051e01040502010205ff05aa000105010701060d -030002020401030102020400050407010509010005110100053601000505010005020100 -05ff05a9000105010701060d030002020401030102020400050407010501010205020104 -05020102050301020502010005010100050a010205030102050201040502010205040101 -050901000509010005ff05a9000105010701060d03000202040103010202040005040701 -050001000502010005030100050301000502010005010100050201000501010005000100 -050a01000502010005040100050601000501010005020100050301010509010305060100 -05ff05a9000105010701060d030002020401030102020400050407010500010005070100 -050701000501010005050101050b01000508010005050100050201000502010005130100 -0503010105ff05aa000105010701060d0300020204010301020204000504070105010102 -05040100050401030501010005050101050c010205050100050401000503010405130100 -0505010005ff05a9000105010701060d0300020204010301020204000504070105040100 -050301000503010005020100050101000505010005000100050e01000504010005030100 -0504010005130100050201000505010005ff05a9000105010701060d0300020204010301 -020204000504070105000100050201000503010005030100050201000501010005020100 -050101000501010005090100050201000504010005020100050501000502010005030101 -0509010005020100050101000502010005ff05a9000105010701060d0300020204010301 -020204000504070105010102050501010502010305020102050201000502010005090102 -05050100050201040502010205040101050a01020503010205ff05aa000105010701060d -030002020401030102020400050407010522010505ff05e1000105010701060d03000202 -04010301020204000504070105ff05ff050a000105010701060d03000202040103010202 -04000504070105ff05ff050a000105010701060d03000202040103010202040005040701 -05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a -000105010701060d0300020204010301020204000504070105ff05ff050a000105010701 -060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202 -04010301020204000504070105ff05ff050a000105010701060d03000202040103010202 -04000504070105ff05ff050a000105010701060d03000202040103010202040005040701 -05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a -000105010701060d0300020204010301020204000504070105ff05ff050a000105010701 -060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202 -04010301020204000504070105ff05ff050a000105010701060d03000202040103010202 -04000504070105ff05ff050a000105010701060d03000202040103010202040005040701 -05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a -000105010701060d0300020204010301020204000504070105ff05ff050a000105010701 -060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202 -040103010202040005040701051201000511010005060100052601020503010205ff05aa -000105010701060d030002020401030102020400050407010512010005110100052d0100 -05020100050101000502010005ff05a9000105010701060d030002020401030102020400 -050407010500010005000101050301020503010105000100050101000502010005020102 -05020104050201020503010205020100050001010503010205040101050d010005010100 -05ff05ad000105010701060d030002020401030102020400050407010500010105010100 -050101000502010005010100050101010501010005020100050101000502010005030100 -0506010005020100050201000501010105010100050101000502010005030101050d0100 -0501010005ff05ad000105010701060d0300020204010301020204000504070105000100 -050501000502010005010100050201000501010005020100050101000507010005060100 -0502010005020100050101000502010005010100051601000502010305ff05aa00010501 -0701060d0300020204010301020204000504070105000100050501040501010005020100 -050101000502010005010100050701000506010005020100050201000501010005020100 -0502010205120100050301000502010005ff05a9000105010701060d0300020204010301 -020204000504070105000100050501000505010005020100050101000502010005010100 -050701000506010005020100050201000501010005020100050501000510010005040100 -0502010005ff05a9000105010701060d0300020204010301020204000504070105000100 -050501000502010005010100050101010501010005010101050101000502010005030100 -050601000502010005020100050101000502010005010100050201000503010105090100 -050501000502010005ff05a9000105010701060d03000202040103010202040005040701 -050001000506010205030101050001000502010105000100050201020505010105040100 -0503010205020100050201000502010205040101050901040502010205ff05aa00010501 -0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300 -020204010301020204000504070105ff05ff050a000105010701060d0300020204010301 -020204000504070105ff05ff050a000105010701060d0300020204010301020204000504 -070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff -050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501 -0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300 -020204010301020204000504070105ff05ff050a000105010701060d0300020204010301 -020204000504070105ff05ff050a000105010701060d0300020204010301020204000504 -070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff -050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501 -0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300 -020204010301020204000504070105ff05ff050a000105010701060d0300020204010301 -020204000504070105ff05ff050a000105010701060d0300020204010301020204000504 -070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff -050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501 -0701060d030002020401030102020400050407010532010305ff05d3000105010701060d -03000202040103010202040005040701050101020505010005090100051b010005ff05d6 -000105010701060d030002020401030102020400050407010503010005100100051b0100 -05ff05d6000105010701060d030002020401030102020400050407010503010005030102 -050201000500010105020100050101000503010205040101050a010005ff05d600010501 -0701060d0300020204010301020204000504070105030100050501000502010105010100 -0501010005000100050301000502010005030101050a010005ff05d6000105010701060d -030002020401030102020400050407010503010005050100050201000502010005010101 -050401000514010005ff05d6000105010701060d03000202040103010202040005040701 -0503010005050100050201000502010005010101050501020511010005ff05d600010501 -0701060d0300020204010301020204000504070105030100050501000502010005020100 -0501010005000100050701000510010005ff05d6000105010701060d0300020204010301 -020204000504070105030100050501000502010005020100050101000501010005020100 -0502010005030101050a010005ff05d6000105010701060d030002020401030102020400 -050407010503010005050100050201000502010005010100050201000502010205040101 -050a010005ff05d6000105010701060d0300020204010301020204000504070105320103 -05ff05d3000105010701060d0300020204010301020204000504070105ff05ff050a0001 -05010701060d0300020204010301020204000504070105ff05ff050a000105010701060d -0300020204010301020204000504070105ff05ff050a000105010701060d030002020401 -0301020204000504070105120100052a01000506010305ff05bf000105010701060d0300 -02020401030102020400050407010511010005040101050a010205030102050b01010502 -01000508010005ff05bf000105010701060d030002020401030102020400050407010510 -010005040100050101000508010005020100050101000502010005090100050101000502 -01000507010005ff05bf000105010701060d03000202040103010202040005040701050f -01000505010005010100050c0100050501000509010005010100050301000506010005ff -05bf000105010701060d03000202040103010202040005040701050e0100050601000501 -0100050c0100050501000509010005010100050401000505010005ff05bf000105010701 -060d03000202040103010202040005040701050d01000507010005010100050b01000504 -0101050a010005010100050501000504010005ff05bf000105010701060d030002020401 -03010202040005040701050e01000506010005010100050a010005070100050901000501 -0100050401000505010005ff05bf000105010701060d0300020204010301020204000504 -0701050f0100050501000501010005090100050801000509010005010100050301000506 -010005ff05bf000105010701060d03000202040103010202040005040701051001000504 -010005010100050301010502010005050100050201000503010105030100050101000502 -01000507010005ff05bf000105010701060d030002020401030102020400050407010511 -0100050401010504010105020104050201020504010105040101050201000508010005ff -05bf000105010701060d0300020204010301020204000504070105120100052a01000506 -010305ff05bf000105010701060d0300020204010301020204000504070105ff05ff050a -000105010701060d0300020204010301020204000504070105ff05ff050a000105010701 -060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202 -04010301020204000504070105ff05ff050a000105010701060d03000202040103010202 -04000504070105ff05ff050a000105010701060d03000202040103010202040005040701 -05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a -000105010701060d0300020204010301020204000504070105ff05ff050a000105010701 -060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202 -04010301020204000504070105ff05ff050a000105010701060d03000202040103010202 -04000504070105ff05ff050a000105010701060d03000202040103010202040005040701 -05ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff050a -000105010701060d0300020204010301020204000504070105ff05ff050a000105010701 -060d0300020204010301020204000504070105ff05ff050a000105010701060d03000202 -04010301020204000504070105ff05ff050a000105010701060d03000202040103010202 -04000504070105ff05ff050a000105010701060d03000202040103010202040005040701 -05ff05ff050a000105010701060d03000202040103010202040005040701050201000530 -010005040100051401010509010205ff05aa000105010701060d03000202040103010202 -040005040701050201000536010005130100050d010005ff05aa000105010701060d0300 -020204010301020204000504070105000104050101000500010105030102050201000500 -0101050a01020502010005020100050201020502010405030101050b0100050401020505 -0100050301020503010205ff059c000105010701060d0300020204010301020204000504 -070105020100050301010501010005010100050201000501010105010100050801000502 -010005010100050201000504010005040100050501010509010405010100050201000504 -01000502010005020100050101000502010005ff059b000105010701060d030002020401 -030102020400050407010502010005030100050901000501010005020100050801000502 -010005020100050001000505010005040100051301000507010005040100050201000505 -01000502010005ff059b000105010701060d030002020401030102020400050407010502 -010005030100050601030501010005020100050801040503010005060100050401000513 -01000504010305040100050301020502010405ff059b000105010701060d030002020401 -030102020400050407010502010005030100050501000502010005010100050201000508 -010005060100050001000505010005040100051301000503010005020100050401000506 -01000501010005ff059f000105010701060d030002020401030102020400050407010502 -010005030100050501000502010005010101050101000508010005020100050101000502 -0100050401000504010005050101050b0100050301000502010005040100050201000502 -0100050101000502010005ff059b000105010701060d0300020204010301020204000504 -07010503010105010100050601030501010005000101050a010205020100050201000504 -01000505010105030101050b01000504010305040100050301020503010205ff059c0001 -05010701060d03000202040103010202040005040701051501000504010505ff05e80001 -05010701060d030002020401030102020400050407010515010005ff05f3000105010701 -060d030002020401030102020400050407010515010005ff05f3000105010701060d0300 -020204010301020204000504070105ff05ff050a000105010701060d0300020204010301 -020204000504070105ff05ff050a000105010701060d0300020204010301020204000504 -070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff -050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501 -0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300 -020204010301020204000504070105ff05ff050a000105010701060d0300020204010301 -020204000504070105ff05ff050a000105010701060d0300020204010301020204000504 -070105ff05ff050a000105010701060d0300020204010301020204000504070105ff05ff -050a000105010701060d0300020204010301020204000504070105ff05ff050a00010501 -0701060d0300020204010301020204000504070105ff05ff050a000105010701060d0300 -020204010301020204000504070105ff05ff050a000105010701060d0300020204010301 -020204000504070105ff05ff050a000105010701060d0300020204010301020204000504 -0701057301010597010105350101053501010540010105190101050b0101050401010516 -000105010701060d0300020204010301020204000504070105040100052a010005400100 -05540100052a010005160100052e0103050301000536010005440100050b010305010103 -050401000503010305040100050501000515000105010701060d03000202040103010202 -0400050407010503010005040101050a010205030102050b010105020100053f0100050a -0100050d010205030102051b01000512010005040101050a010205030102050b01010502 -0100051501000519010205110100050601000512010205030102050b0100050c0100050c -0100051a0100050b0102050b0100050b0100050701000504010005060100050401000505 -01000515000105010701060d030002020401030102020400050407010502010005040100 -0501010005080100050201000501010005020100050901000501010005020100053e0100 -050a0100050f010005050100051b01000511010005040100050101000508010005020100 -050101000502010005090100050101000502010005140100051b01000511010005060100 -0514010005050100050a0101050c0100050c010005190101050d0100050b0100050b0100 -05070100050401000506010005040100050501000515000105010701060d030002020401 -03010202040005040701050101000505010005010100050c010005050100050901000501 -010005030100050501010509010005000101050301020503010205190100050401020502 -010005000101050301020505010005050100050a01020502010105000100050301010500 -0100051001000505010005010100050c0100050501000509010005010100050301000513 -010005040102050201000502010005020102050501000511010005060100050401020503 -010205050100050501000509010005000100050c01000504010205020104050201020502 -0101050001000509010005000100050d01000503010205040100050b0100050701000504 -01000506010005040100050501000515000105010701060d030002020401030102020400 -05040701050001000506010005010100050c010005050100050901000501010005040100 -050401010509010105010100050101000502010005010100050201000518010005030100 -050201000501010105010100050101000502010005040100050501000509010005020100 -0501010005000100050001000501010005010101050f01000506010005010100050c0100 -050501000509010005010100050401000512010005030100050201000501010005020100 -050101000502010005040100051101000506010005030100050201000501010005020100 -0504010005050100050b0100050c01000503010005020100050301000503010005020100 -050101000500010005000100050a0100050d0100050201000502010005030100050b0100 -05070100050401000506010005040100050501000515000105010701060d030002020401 -0301020204000504070101000507010005010100050a010105050100050a010005010100 -05050100050f0100050501000502010005010100051a0101050401000505010005020100 -050101000502010005040100050501000509010005050100050001000500010005010100 -05020100050e01000507010005010100050b010005040101050a01000501010005050100 -050f01010504010005020100050101000502010005050100050401000511010005040101 -05040100050901000504010005050100050b0100050a0101050801000503010005030100 -05020100050101000500010005000100050a0100050d0100050201000508010105090100 -05070100050501010504010005050101050401010513000105010701060d030002020401 -03010202040005040701050001000506010005010100050c010005030100050b01000501 -010005040100051001000505010405010100051c01000504010205020100050201000501 -01040504010005050100050901000505010005000100050001000501010005020100050f -01000506010005010100050a010005070100050901000501010005040100051201000503 -010405020100050001000503010305040100051101000506010005030100050601030504 -010005050100050b0100050c010005040103050301000503010005020100050101000500 -010005000100050a0100050d01000503010205040100050b010005070100050401000506 -010005040100050501000515000105010701060d03000202040103010202040005040701 -050101000505010005010100050c010005020100050c0100050101000503010005110100 -0505010005050100051c0100050701000501010005020100050101000508010005050100 -050901000505010005000100050001000501010005020100051001000505010005010100 -050901000508010005090100050101000503010005130100050301000506010005000100 -050201000502010005040100051101000506010005030100050501000502010005040100 -05050100050b0100050c0100050301000502010005030100050301000502010005010100 -0500010005000100050a0100050d01000506010005030100050b01000507010005040100 -0506010005040100050501000515000105010701060d0300020204010301020204000504 -070105020100050401000501010005030101050201000502010005010100050701010503 -010005010100050201000506010105090100050501000502010005010100050201000518 -010005030100050201000501010005020100050101000502010005040100050501000509 -010005020100050101000500010005000100050101000501010105030101050b01000504 -010005010100050301010502010005050100050201000503010105030100050101000502 -010005060101050b01000503010005020100050301000503010005020100050401000504 -0101050a0100050601000503010005020100050101000502010005040100050501000504 -010105040100050501010504010005030100050201000503010005030100050201000501 -010005000100050001000503010105040100050501010505010005020100050201000503 -010005050101050301000507010005040100050601000504010005050100051500010501 -0701060d0300020204010301020204000504070105030100050401010504010105030102 -050201040503010105040101050201000507010105090100050601020503010205190100 -050401020502010005020100050201020505010005050100050a01020502010005000100 -05000100050201010500010005030101050c010005040101050401010502010405020102 -05040101050401010502010005070101050b010005040102050401000504010305040100 -05040101050a010005060100050401020503010305040100050501000504010105020104 -050301010504010005040103050401010502010205020100050001000500010005030101 -050201040503010105050100050301020504010005050101050301000507010005040100 -0506010005040100050501000515000105010701060d0300020204010301020204000504 -070105040100052a0100054001000525010505190100050d0100052a010005090100050b -010005220100050a01030503010005220100050c01000504010005220100050c01000512 -010005060100050301030501010305040100050301030504010005050100051500010501 -0701060d03000202040103010202040005040701057301010541010105430101050d0101 -051e010105140101051e0101050b010105060101051e0101050b01010511010105050101 -05110101050b0101050401010516000105010701060d0300020204010301020204000504 -070105ff05ff050a000105010701060d0300020204010301020204000504070105ff0506 -0101055f010105630101051501010521000105010701060d030002020401030102020400 -0504070105040100052a0100051d010005b401000506010005040100053e010005120100 -05070100052a0100051501000501010005180100051301000523000105010701060d0300 -02020401030102020400050407010503010005040101050a010205030102050b01010502 -0100051c0100051f010405280100053f010005030100051f01000506010005030102052d -01020503010205050100051201000506010005040101050a010205030102050b01010502 -0100051401000501010005010103050c010105030100051301000523000105010701060d -030002020401030102020400050407010502010005040100050101000508010005020100 -0501010005020100050901000501010005020100051b010005210100052a0100053f0100 -05030100051f010005050100050301000500010005000100052e01000505010005040100 -051301000505010005040100050101000508010005020100050101000502010005090100 -050101000502010005130100050101000501010005020100050a01000505010005130100 -0523000105010701060d0300020204010301020204000504070105010100050501000501 -0100050c0100050501000509010005010100050301000505010105120100052101000504 -010205040101050a010205030102050301010500010005020102050a0102050301020502 -010005000101050201000502010005020102050201000500010105080101050101010502 -0102050301010500010005030101050b0100050401000504010005000100050401010500 -0100050201020502010005000101050a0102050301020505010005050100050301000514 -0100050401000505010005010100050c0100050501000509010005010100050301000511 -010505000100050201000502010205040100050501000513010005040102050201000500 -01010503010205020100050201000501010005000101000105010701060d030002020401 -03010202040005040701050001000506010005010100050c010005050100050901000501 -010005040100050401010512010005210100050301000502010005030101050901000502 -010005010100050201000501010005010101050101000502010005080100050201000501 -010005020100050101010501010005010100050201000501010005020100050101010501 -010005070101050101010501010005020100050101000501010105030101050b0100050a -010005000100050301000501010105010100050201000501010105010100050801000502 -01000501010005020100050401000505010005190100050301000506010005010100050c -010005050100050901000501010005040100051101000501010005010100050201000501 -010005020100050101040503010005130100050301000502010005010101050101000501 -0100050201000501010005020100050101010501000105010701060d0300020204010301 -020204000504070101000507010005010100050a010105050100050a0100050101000505 -010005180100052101000503010005020100050f01000505010005020100050101000502 -010005010100050201000508010005050100050201000501010005050100050201000501 -01000502010005010100050b01000500010105000100050101000505010005020100050f -0101050c0102050201000502010005010100050201000501010005020100050801000509 -0100050401000505010005170101050301000507010005010100050a010105050100050a -01000501010005050100050f010005010100050201030502010005020100050301000506 -0101050f0101050401000502010005010100050201000501010005050100050201000501 -01000502000105010701060d030002020401030102020400050407010500010005060100 -05010100050c010005030100050b01000501010005040100051901000521010005030100 -05020100050f010005050100050201000501010005020100050101040509010205020104 -0501010005060100050001000502010405010100050b0100050001010500010005020102 -050201000502010005110100050c01000500010005010100050201000501010405010100 -050201000508010005060103050401000505010005190100050301000506010005010100 -050c010005030100050b01000501010005040100050f0105050101000501010005020104 -050301000505010005130100050301040501010005020100050201020502010005020100 -050101000502000105010701060d03000202040103010202040005040701050101000505 -010005010100050c010005020100050c01000501010005030100053d0100050301000502 -0100050f0100050501000502010005010100050201000501010005100100050101000505 -010005060100050001000502010005050100050b01000503010005050100050101000502 -010005110100050c01000500010005010100050201000501010005050100050201000508 -01000505010005020100050401000505010005190100050401000505010005010100050c -010005020100050c01000501010005030100051101000501010005020100050201000501 -010005070100050501000513010005030100050501000502010005050100050101000502 -0100050101000502000105010701060d0300020204010301020204000504070105020100 -050401000501010005030101050201000502010005010100050701010503010005010100 -050201000506010105350100050301000502010005030101050901000502010005010100 -050201000501010005010101050101000502010005080100050201000501010005020100 -0501010005070100050301000502010005010100050b0100050301000501010005020100 -050101000501010105030101050b0100050a010005000100050001000501010005010101 -050101000502010005010100050201000508010005020100050101000502010005040100 -05050100050b0101050b0100050501000504010005010100050301010502010005020100 -050101000507010105030100050101000502010005060101050901000501010005020100 -050201000501010005020100050301000505010005050101050b01000503010005020100 -050101000502010005010100050201000501010005010101050101000502000105010701 -060d03000202040103010202040005040701050301000504010105040101050301020502 -01040503010105040101050201000507010105120100052101000504010205040101050a -010205030102050301010500010005020102050a01020503010205020100050701000504 -010205020100050b01000503010005020102050301010500010005030101050b0100050b -010205030101050001000502010205020100050201000509010205030103050401000505 -0100050b0101050b01000506010005040101050401010503010205020104050301010504 -010105020100050701010509010005010100050201000502010005020102050401000505 -010005050101050b01000504010205020100050201000502010205030101050001000501 -01000502000105010701060d0300020204010301020204000504070105040100052a0100 -057501050544010005110100050c010005070100050e010505270100050b010005070100 -052a0100050901000527010005060100050b01000523000105010701060d030002020401 -0301020204000504070105ee01000502010005120101050f010005020100053a0101050d -0101053a01010526010105050101050d01010521000105010701060d0300020204010301 -020204000504070105ef01020526010205ed000105010701060d03000202040103010202 -04000504070105730101052e0101058d01010504010105cc000105010701060d03000202 -04010301020204000504070105040100052a010005400100050401000501010005260100 -059101000505010005cb000105010701060d030002020401030102020400050407010503 -010005040101050a010205030102050b010105020100053f010005040100050101000501 -0103050c010105110100051501000509010205260102050c0100050b0100052001020504 -01000505010005cb000105010701060d0300020204010301020204000504070105020100 -050401000501010005080100050201000501010005020100050901000501010005020100 -053e010005040100050101000501010005020100050a01000513010005150100050b0100 -052801000519010005220100050401000505010005cb000105010701060d030002020401 -03010202040005040701050101000505010005010100050c010005050100050901000501 -010005030100050501010509010005000101050301020503010205190100050301050500 -010005020100050201020504010005130100050301010500010005030102050301010500 -01000501010005020100050401000503010205110102050201000500010105050100050a -010205020100050001010502010405020102050201000500010105020100050001010503 -010205050100050401000505010005cb000105010701060d030002020401030102020400 -05040701050001000506010005010100050c010005050100050901000501010005040100 -050401010509010105010100050101000502010005010100050201000518010005040100 -050101000501010005020100050101000502010005010104051101000503010005000100 -050001000501010005020100050101000501010105010100050201000504010005020100 -05020100050f010005020100050101010501010005040100050c01000502010105010100 -050301000503010005020100050101010501010005010101050101000501010005020100 -05040100050401000505010005cb000105010701060d0300020204010301020204000504 -070101000507010005010100050a010105050100050a01000501010005050100050f0100 -050501000502010005010100051a01010504010005010100050201030502010005020100 -050301000511010105040100050001000500010005010100050201000501010005020100 -0501010005020100050401000502010005020100050f0100050201000501010005080100 -050c01000502010005020100050301000503010005020100050101000505010005020100 -0505010005040100050501010504010105c9000105010701060d03000202040103010202 -040005040701050001000506010005010100050c010005030100050b0100050101000504 -0100051001000505010405010100051c0100050201050501010005010100050201040503 -010005130100050301000500010005000100050101000502010005010100050201000501 -0100050201000504010005020104050f01040501010005080100050c0100050201000502 -010005030100050301040501010005050100050201000502010305040100050401000505 -010005cb000105010701060d030002020401030102020400050407010501010005050100 -05010100050c010005020100050c01000501010005030100051101000505010005050100 -051c01000503010005010100050201000502010005010100050701000513010005030100 -050001000500010005010100050201000501010005020100050101000502010005040100 -05020100051301000505010005080100050c010005020100050201000503010005030100 -050501000505010005020100050101000502010005040100050401000505010005cb0001 -05010701060d030002020401030102020400050407010502010005040100050101000503 -010105020100050201000501010005070101050301000501010005020100050601010509 -010005050100050201000501010005020100051801000503010005010100050201000502 -010005010100050201000503010005050101050b01000503010005000100050001000501 -010005020100050101000501010105010100050101010504010005020100050201000503 -010105090100050201000501010005080100050c01000502010005020100050301000503 -010005020100050101000505010005020100050101000502010005040100050401000505 -010005cb000105010701060d030002020401030102020400050407010503010005040101 -050401010503010205020104050301010504010105020100050701010509010005060102 -050301020519010005030100050101000502010005020100050201020504010005050101 -050b01000503010005000100050001000502010205030101050001000502010105000100 -050401000503010205040101050a01020502010005080100050c01000502010005020100 -050401010502010205020100050501000502010005020103050401000504010005050100 -05cb000105010701060d0300020204010301020204000504070105040100052a01000540 -010005220100050b010005300100051d0105053b01000505010005cb000105010701060d -0300020204010301020204000504070105730101051e0101050d0101052c0101055e0101 -0504010105cc000105010701060d0300020204010301020204000504070105ff05ff050a -000105010701060d0300020204010301020204000504070105ff05060101055f01010563 -0101051501010521000105010701060d0300020204010301020204000504070105040100 -052a0100051d010005b401000506010005040100053e01000512010005070100052a0100 -051501000501010005180100051301000523000105010701060d03000202040103010202 -0400050407010503010005040101050a010205030102050b010105020100051c0100051f -010405280100053f010005030100051f01000506010005030102052d0102050301020505 -0100051201000506010005040101050a010205030102050b010105020100051401000501 -010005010103050c010105030100051301000523000105010701060d0300020204010301 -020204000504070105020100050401000501010005080100050201000501010005020100 -050901000501010005020100051b010005210100052a0100053f010005030100051f0100 -05050100050301000500010005000100052e010005050100050401000513010005050100 -050401000501010005080100050201000501010005020100050901000501010005020100 -05130100050101000501010005020100050a010005050100051301000523000105010701 -060d03000202040103010202040005040701050101000505010005010100050c01000505 -01000509010005010100050301000505010105120100052101000504010205040101050a -010205030102050301010500010005020102050a01020503010205020100050001010502 -010005020100050201020502010005000101050801010501010105020102050301010500 -010005030101050b01000504010005040100050001000504010105000100050201020502 -010005000101050a01020503010205050100050501000503010005140100050401000505 -010005010100050c01000505010005090100050101000503010005110105050001000502 -010005020102050401000505010005130100050401020502010005000101050301020502 -0100050201000501010005000101000105010701060d0300020204010301020204000504 -0701050001000506010005010100050c0100050501000509010005010100050401000504 -010105120100052101000503010005020100050301010509010005020100050101000502 -010005010100050101010501010005020100050801000502010005010100050201000501 -010105010100050101000502010005010100050201000501010105010100050701010501 -01010501010005020100050101000501010105030101050b0100050a0100050001000503 -010005010101050101000502010005010101050101000508010005020100050101000502 -0100050401000505010005190100050301000506010005010100050c0100050501000509 -010005010100050401000511010005010100050101000502010005010100050201000501 -010405030100051301000503010005020100050101010501010005010100050201000501 -010005020100050101010501000105010701060d03000202040103010202040005040701 -01000507010005010100050a010105050100050a01000501010005050100051801000521 -01000503010005020100050f010005050100050201000501010005020100050101000502 -010005080100050501000502010005010100050501000502010005010100050201000501 -0100050b01000500010105000100050101000505010005020100050f0101050c01020502 -010005020100050101000502010005010100050201000508010005090100050401000505 -010005170101050301000507010005010100050a010105050100050a0100050101000505 -0100050f0100050101000502010305020100050201000503010005060101050f01010504 -010005020100050101000502010005010100050501000502010005010100050200010501 -0701060d03000202040103010202040005040701050001000506010005010100050c0100 -05030100050b0100050101000504010005190100052101000503010005020100050f0100 -050501000502010005010100050201000501010405090102050201040501010005060100 -050001000502010405010100050b01000500010105000100050201020502010005020100 -05110100050c010005000100050101000502010005010104050101000502010005080100 -05060103050401000505010005190100050301000506010005010100050c010005030100 -050b01000501010005040100050f01050501010005010100050201040503010005050100 -051301000503010405010100050201000502010205020100050201000501010005020001 -05010701060d03000202040103010202040005040701050101000505010005010100050c -010005020100050c01000501010005030100053d01000503010005020100050f01000505 -010005020100050101000502010005010100051001000501010005050100050601000500 -01000502010005050100050b01000503010005050100050101000502010005110100050c -010005000100050101000502010005010100050501000502010005080100050501000502 -0100050401000505010005190100050401000505010005010100050c010005020100050c -010005010100050301000511010005010100050201000502010005010100050701000505 -010005130100050301000505010005020100050501000501010005020100050101000502 -000105010701060d03000202040103010202040005040701050201000504010005010100 -050301010502010005020100050101000507010105030100050101000502010005060101 -053501000503010005020100050301010509010005020100050101000502010005010100 -050101010501010005020100050801000502010005010100050201000501010005070100 -050301000502010005010100050b01000503010005010100050201000501010005010101 -05030101050b0100050a0100050001000500010005010100050101010501010005020100 -0501010005020100050801000502010005010100050201000504010005050100050b0101 -050b01000505010005040100050101000503010105020100050201000501010005070101 -050301000501010005020100050601010509010005010100050201000502010005010100 -05020100050301000505010005050101050b010005030100050201000501010005020100 -05010100050201000501010005010101050101000502000105010701060d030002020401 -030102020400050407010503010005040101050401010503010205020104050301010504 -0101050201000507010105120100052101000504010205040101050a0102050301020503 -01010500010005020102050a01020503010205020100050701000504010205020100050b -01000503010005020102050301010500010005030101050b0100050b0102050301010500 -010005020102050201000502010005090102050301030504010005050100050b0101050b -010005060100050401010504010105030102050201040503010105040101050201000507 -01010509010005010100050201000502010005020102050401000505010005050101050b -010005040102050201000502010005020102050301010500010005010100050200010501 -0701060d0300020204010301020204000504070105040100052a01000575010505440100 -05110100050c010005070100050e010505270100050b010005070100052a010005090100 -0527010005060100050b01000523000105010701060d0300020204010301020204000504 -070105ee01000502010005120101050f010005020100053a0101050d0101053a01010526 -010105050101050d01010521000105010701060d03000202040103010202040005040701 -05ef01020526010205ed000105010701060d030002020401030102020400050407010573 -0101052e0101059401010504010105c5000105010701060d030002020401030102020400 -0504070105040100052a0100054001000504010005010100052601000598010005050100 -05c4000105010701060d030002020401030102020400050407010503010005040101050a -010205030102050b010105020100053f0100050401000501010005010103050c01010511 -01000515010005090102051e0100050d010205030102050d0100050b0101051001020504 -0100050501000505010005c4000105010701060d03000202040103010202040005040701 -050201000504010005010100050801000502010005010100050201000509010005010100 -05020100053e010005040100050101000501010005020100050a01000513010005150100 -050b0100051e0100050f010005050100050d0100050a0100051401000504010005050100 -0505010005c4000105010701060d03000202040103010202040005040701050101000505 -010005010100050c01000505010005090100050101000503010005050101050901000500 -010105030102050301020519010005030105050001000502010005020102050401000513 -010005030101050001000503010205030101050001000501010005020100050401000503 -0102051101020502010005000101050301020505010005050100050a0101050001000502 -0102050401000504010205020100050201000504010005020104050301000505010005c4 -000105010701060d03000202040103010202040005040701050001000506010005010100 -050c01000505010005090100050101000504010005040101050901010501010005010100 -050201000501010005020100051801000504010005010100050101000502010005010100 -050201000501010405110100050301000500010005000100050101000502010005010100 -050101010501010005020100050401000502010005020100050f01000502010005010101 -050101000501010005020100050401000505010005090100050101010501010005020100 -050101040501010005020100050101000502010005040100050401000505010005050100 -05c4000105010701060d0300020204010301020204000504070101000507010005010100 -050a010105050100050a01000501010005050100050f0100050501000502010005010100 -051a01010504010005010100050201030502010005020100050301000511010105040100 -050001000500010005010100050201000501010005020100050101000502010005040100 -0502010005020100050f0100050501000502010005010100050201000504010005050100 -050901000502010005010100050201000503010005070100050101000502010005040100 -05040100050601010504010105c2000105010701060d0300020204010301020204000504 -0701050001000506010005010100050c010005030100050b010005010100050401000510 -01000505010405010100051c010005020105050101000501010005020104050301000513 -010005030100050001000500010005010100050201000501010005020100050101000502 -010005040100050201040510010205020100050201000501010405040100050501000509 -010005020100050101040503010005040103050101000502010005040100050401000505 -01000505010005c4000105010701060d0300020204010301020204000504070105010100 -0505010005010100050c010005020100050c010005010100050301000511010005050100 -05050100051c010005030100050101000502010005020100050101000507010005130100 -050301000500010005000100050101000502010005010100050201000501010005020100 -050401000502010005170100050101000502010005010100050801000505010005090100 -050201000501010005070100050301000502010005010100050201000504010005040100 -050501000505010005c4000105010701060d030002020401030102020400050407010502 -010005040100050101000503010105020100050201000501010005070101050301000501 -010005020100050601010509010005050100050201000501010005020100051801000503 -010005010100050201000502010005010100050201000503010005050101050b01000503 -010005000100050001000501010005020100050101000501010105010100050101010504 -010005020100050201000503010105090100050201000501010005020100050101000502 -010005040100050501000509010005010101050101000502010005030100050301000502 -010005010100050101010504010005040100050501000505010005c4000105010701060d -030002020401030102020400050407010503010005040101050401010503010205020104 -050301010504010105020100050701010509010005060102050301020519010005030100 -050101000502010005020100050201020504010005050101050b01000503010005000100 -050001000502010205030101050001000502010105000100050401000503010205040101 -050a01020502010005020100050201020505010005050100050a01010500010005020102 -050401000504010305020101050001000504010005050101050301000505010005c40001 -05010701060d0300020204010301020204000504070105040100052a0100054001000522 -0100050b010005300100052b0105053401000505010005c4000105010701060d03000202 -04010301020204000504070105730101051e0101050d0101052c01010565010105040101 -05c5000105010701060d0300020204010301020204000504070105ff05ff050a00010501 -0701060d0300020204010301020204000504070105ff05060101055f0101056301010515 -01010521000105010701060d0300020204010301020204000504070105040100052a0100 -051d010005b401000506010005040100053e01000512010005070100052a010005150100 -0501010005180100051301000523000105010701060d0300020204010301020204000504 -07010503010005040101050a010205030102050b010105020100051c0100051f01040519 -010105040100050301020540010005030100051f01000506010005030102052d01020503 -010205050100051201000506010005040101050a010205030102050b0101050201000514 -01000501010005010103050c010105030100051301000504010205050100050b01000507 -000105010701060d03000202040103010202040005040701050201000504010005010100 -05080100050201000501010005020100050901000501010005020100051b010005210100 -051a0100050d01000540010005030100051f010005050100050301000500010005000100 -052e01000505010005040100051301000505010005040100050101000508010005020100 -050101000502010005090100050101000502010005130100050101000501010005020100 -050a0100050501000513010005060100051201000507000105010701060d030002020401 -03010202040005040701050101000505010005010100050c010005050100050901000501 -0100050301000505010105120100052101000504010205040101050b0100050401020505 -010005030102050a01020503010205020100050001010502010005020100050201020502 -010005000101050801010501010105020102050301010500010005030101050b01000504 -010005040100050001000504010105000100050201020502010005000101050a01020503 -010205050100050501000503010005140100050401000505010005010100050c01000505 -010005090100050101000503010005110105050001000502010005020102050401000505 -010005130100050601000503010205030102050201040505000105010701060d03000202 -040103010202040005040701050001000506010005010100050c01000505010005090100 -050101000504010005040101051201000521010005030100050201000503010105090104 -050401000505010005020100050201000508010005020100050101000502010005010101 -050101000501010005020100050101000502010005010101050101000507010105010101 -0501010005020100050101000501010105030101050b0100050a01000500010005030100 -050101010501010005020100050101010501010005080100050201000501010005020100 -050401000505010005190100050301000506010005010100050c01000505010005090100 -050101000504010005110100050101000501010005020100050101000502010005010104 -050301000513010005060100050501000502010005020100050301000507000105010701 -060d0300020204010301020204000504070101000507010005010100050a010105050100 -050a01000501010005050100051801000521010005030100050201000511010005060100 -050501000502010005020100050801000505010005020100050101000505010005020100 -050101000502010005010100050b01000500010105000100050101000505010005020100 -050f0101050c010205020100050201000501010005020100050101000502010005080100 -05090100050401000505010005170101050301000507010005010100050a010105050100 -050a01000501010005050100050f01000501010005020103050201000502010005030100 -05060101050f0101050701000505010005020100050701000507000105010701060d0300 -0202040103010202040005040701050001000506010005010100050c010005030100050b -010005010100050401000519010005210100050301000502010005110100050601000505 -01000502010405090102050201040501010005060100050001000502010405010100050b -0100050001010500010005020102050201000502010005110100050c0100050001000501 -010005020100050101040501010005020100050801000506010305040100050501000519 -0100050301000506010005010100050c010005030100050b01000501010005040100050f -010505010100050101000502010405030100050501000513010005060100050501000503 -0102050401000507000105010701060d0300020204010301020204000504070105010100 -0505010005010100050c010005020100050c01000501010005030100053d010005030100 -050201000511010005060100050501000502010005100100050101000505010005060100 -050001000502010005050100050b01000503010005050100050101000502010005110100 -050c01000500010005010100050201000501010005050100050201000508010005050100 -05020100050401000505010005190100050401000505010005010100050c010005020100 -050c01000501010005030100051101000501010005020100050201000501010005070100 -0505010005130100050601000505010005060100050301000507000105010701060d0300 -020204010301020204000504070105020100050401000501010005030101050201000502 -010005010100050701010503010005010100050201000506010105350100050301000502 -010005030101050b01000506010005050100050201000502010005080100050201000501 -0100050201000501010005070100050301000502010005010100050b0100050301000501 -010005020100050101000501010105030101050b0100050a010005000100050001000501 -010005010101050101000502010005010100050201000508010005020100050101000502 -01000504010005050100050b0101050b0100050501000504010005010100050301010502 -010005020100050101000507010105030100050101000502010005060101050901000501 -010005020100050201000501010005020100050301000505010005050101050b01000506 -0100050501000502010005020100050301000507000105010701060d0300020204010301 -020204000504070105030100050401010504010105030102050201040503010105040101 -050201000507010105120100052101000504010205040101050b01000506010005050100 -05030102050a01020503010205020100050701000504010205020100050b010005030100 -05020102050301010500010005030101050b0100050b0102050301010500010005020102 -050201000502010005090102050301030504010005050100050b0101050b010005060100 -050401010504010105030102050201040503010105040101050201000507010105090100 -05010100050201000502010005020102050401000505010005050101050b010005060100 -0505010005030102050501010505000105010701060d0300020204010301020204000504 -070105040100052a0100057501050544010005110100050c010005070100050e01050527 -0100050b010005070100052a0100050901000527010005060100050b0100051e01040001 -05010701060d0300020204010301020204000504070105ee01000502010005120101050f -010005020100053a0101050d0101053a01010526010105050101050d0101052100010501 -0701060d0300020204010301020204000504070105ef01020526010205ed000105010701 -060d0300020204010301020204000504070105730101052e010105ff0563000105010701 -060d0300020204010301020204000504070105040100052a010005400100050401000501 -010005260100052001030501010005010100058701000501010005ae000105010701060d -030002020401030102020400050407010503010005040101050a010205030102050b0101 -05020100053f0100050401000501010005010103050c010105110100050a010005140100 -050401000501010005340102050401000503010405020102051001000508010005180100 -05010100050101000501010005ae000105010701060d0300020204010301020204000504 -070105020100050401000501010005080100050201000501010005020100050901000501 -010005020100053e010005040100050101000501010005020100050a010005130100050a -010005140100050401000501010005330100050201000502010105030100050501000502 -0100050f0100052101000500010005000100050101000501010005ae000105010701060d -03000202040103010202040005040701050101000505010005010100050c010005050100 -050901000501010005030100050501010509010005000101050301020503010205190100 -050301050500010005020100050201020504010005130100050401020502010005010100 -051101000504010005010100050a01020503010205020100050201000502010205030102 -050901000505010005000100050301000505010005020100050901020502010005000101 -050301020502010005020100050201020503010205020100050101000502010005010100 -05ae000105010701060d0300020204010301020204000504070105000100050601000501 -0100050c0100050501000509010005010100050401000504010105090101050101000501 -010005020100050101000502010005180100050401000501010005010100050201000501 -010005020100050101040511010005030100050201000501010005000100051201000512 -010005020100050101000502010005010100050201000501010005020100050101000502 -010005080100050701000503010305020100050201000508010005020100050101010501 -01000504010005020100050201000501010005020100050101000502010005bb00010501 -0701060d0300020204010301020204000504070101000507010005010100050a01010505 -0100050a01000501010005050100050f0100050501000502010005010100051a01010504 -010005010100050201030502010005020100050301000511010105040100050201000501 -010105130100051201000509010005010100050201000501010005020100050101000505 -010405010103050401000507010005020103050101040501010005050100050201000504 -01000502010005020100050501000501010005bf000105010701060d0300020204010301 -0202040005040701050001000506010005010100050c010005030100050b010005010100 -05040100051001000505010405010100051c010005020105050101000501010005020104 -050301000513010005030100050201000501010105130100051301020503010305020100 -050001000502010405020102050901000502010005030100050701000505010005080100 -0505010005020100050401000503010005000100050301030502010205bc000105010701 -060d03000202040103010202040005040701050101000505010005010100050c01000502 -0100050c01000501010005030100051101000505010005050100051c0100050301000501 -010005020100050201000501010005070100051301000503010005020100050101000500 -010005120100051601000501010005020100050201000500010005020100050901000508 -010005020100050301000503010005020100050501000508010005050100050201000504 -0100050301000500010005020100050201000505010005bb000105010701060d03000202 -040103010202040005040701050201000504010005010100050301010502010005020100 -050101000507010105030100050101000502010005060101050901000505010005020100 -050101000502010005180100050301000501010005020100050201000501010005020100 -0503010005050101050b01000503010005020100050101000501010005040101050a0100 -050d01010502010005020100050101000502010005030100050301000502010005010100 -050201000508010005020100050301000503010005020100050101000502010005080100 -050201000501010005020100050401000504010005030100050201000501010005020100 -0511010105a7000105010701060d03000202040103010202040005040701050301000504 -010105040101050301020502010405030101050401010502010005070101050901000506 -010205030102051901000503010005010100050201000502010005020102050401000505 -0101050b010005040102050201000502010005030101050a0100050d0101050301020503 -0103050301000504010205030102050a0102050201040502010205030102050a01020502 -010005020100050401000504010005040103050201020512010105a7000105010701060d -0300020204010301020204000504070105040100052a01000540010005220100050b0100 -05140100050a01030597010005a7000105010701060d0300020204010301020204000504 -070105730101051e0101050d01010510010105a5010105a8000105010701060d03000202 -04010301020204000504070105ff05ff050a000105010701060d03000202040103010202 -04000504070105ff05ff050a000105010701000d03000202040103010202040005040701 -0507010005010100056401000501010005ff05950001050107010600000c030002020401 -03010202040005040701050701000501010005040100051201020521010105050100050b -0100051001000501010005ff059500010501070106000001050807010300020204010301 -0202040005040701050701000501010005040100051401000520010005070100051d0100 -0501010005ff059500010501070106010001050707010300020204010301020204000504 -0701050701000501010005020104050201020503010205050100050a0101050001000502 -010205020100050001010504010005040101050001000509010205030102050201010500 -0100050201000501010005ff059500010501070106010001050607010600030002020401 -030102020400050407010510010005030100050201000501010005020100050401000509 -01000501010105010100050201000501010105010100050101040501010005010101050b -0100050201000502010005010100050001000500010005ff059b00010501070106020001 -050507010600030002020401030102020400050407010510010005030100050201000501 -010005020100050401000509010005020100050101000502010005010100050201000503 -01000503010005020100050b01000506010005010100050001000500010005ff059b0001 -050107010602000105040701060103000202040103010202040005040701051001000503 -010005020100050101000502010005040100050901000502010005010104050101000502 -0100050301000503010005020100050b01000503010305010100050001000500010005ff -059b00010501070106030001050307010601030002020401030102020400050407010510 -010005030100050201000501010005020100050401000509010005020100050101000505 -010005020100050301000503010005020100050b01000502010005020100050101000500 -01000500010005ff059b0001050107010603000105020701060203000202040103010202 -040005040701051001000503010005020100050101000502010005040100050901000501 -010105010100050201000501010005020100050301000503010005010101050301010505 -01000502010005020100050101000500010005000100050a010105ff058e000105010701 -060400010501070106020300020204010301020204000504070105110101050201020503 -010205050100050a01010500010005020102050201000502010005030100050401010500 -0100050301010505010005030103050101000500010005000100050a010105ff058e0001 -050107010604000105000701060303000202040103010202040005040701052901050505 -010005270100051a010005ff058e00010501070106050000070206030300020204010301 -0202040005040701053101000502010005240100050101000518010105ff058f00010501 -070106050000070106040300020204010301020204000504070100ff00ff000c05010701 -0606070106040300020204010301020204000504070000ff00ff000d0501070106060700 -060503000202040103010202040005ff05ff05150701000d030002020401030102020400 -05ff05ff05150700000e030002020401030102020400050207ff07ff0716050b03000202 -0401030102020400050207ff07ff07150000050b03000202040103010202040005020701 -060d0000060000ff0073067f0001060c0001050b03000202040103010202040005020701 -060b00010700060000ff00720700067f0003060a0001050b030002020401030102020400 -050207010609000207010600000105ff056f0701067f000506080001050b030002020401 -0301020204000502070106070003050007010600000105ff056f0701067f000105010003 -06060001050b030002020401030004040502070106050003050207010600000105ff056f -0701067f00010503000306040001050b0300040403050502070106030003050407010600 -000105ff056f0701067f00010505000306020001050b0304040003010202040005020701 -06010003050607010600000105ff056f0701067f00010507000306000001050b03000202 -040103010202040005020705050807010600000105ff056f0701067f0001050807030001 -050b0300020204010301020204000502070106010703050607010600000105ff056f0701 -067f00010507070306000001050b03000202040103010202040005020701060307030504 -07010600000105ff056f0701067f00010505070306020001050b03000202040103010202 -04000502070106050703050207010600000105ff056f0701067f00010503070306040001 -050b0300020204010301020204000502070106070703050007010600000105ff056f0701 -067f00010501070306060001050b03000202040103010202040005020701060907040600 -000105ff056f0701067f0001070306080001050b03000202040103010202040005020701 -060b07020600000107ff0771067f00010701060a0001050b030002020401030102020400 -05020701060d07000600000007ff0772067f00000700060c0001050b0300020204010301 -020204000502070100ff00ff0014050b0300020204010301020204000502070000ff00ff -0015050b03000202040103010202040005ff05ff052503000202040103010202040005ff -05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff -05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff -05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff -05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff -05ff052503000202040103010202040005ff05ff052503000202040103010202040005ff -05ff052503000202040103010202040003ff03ff0326020204010301021a0400030002ff -02f304000300021a04010301021a0400030002ff02f304000300021a04010301021a0400 -030002ff02f304000300021a04010301041b030004ff04f40300041c030004ff04ff0430 - -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 17 377 309 -%%EOF diff --git a/lib/pman/doc/src/warning.gif b/lib/pman/doc/src/warning.gif Binary files differdeleted file mode 100644 index 96af52360e..0000000000 --- a/lib/pman/doc/src/warning.gif +++ /dev/null diff --git a/lib/pman/ebin/.gitignore b/lib/pman/ebin/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/pman/ebin/.gitignore +++ /dev/null diff --git a/lib/pman/info b/lib/pman/info deleted file mode 100644 index 22003edcea..0000000000 --- a/lib/pman/info +++ /dev/null @@ -1,2 +0,0 @@ -group: tools -short: A graphical process manager used to inspect Erlang processes. diff --git a/lib/pman/priv/Makefile b/lib/pman/priv/Makefile deleted file mode 100644 index a89278fd3a..0000000000 --- a/lib/pman/priv/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -# ``The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved via the world wide web at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# The Initial Developer of the Original Code is Ericsson Utvecklings AB. -# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings -# AB. All Rights Reserved.'' -# -# $Id$ -# -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -include ../vsn.mk -VSN = $(PMAN_VSN) - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/pman-$(VSN) - -# -# Macros -# -TOOLBAR_FILES = \ - pman.tool \ - pman.gif - -# -# Rules -# - -debug opt: - -docs: - -clean: - - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_spec: opt - $(INSTALL_DIR) "$(RELSYSDIR)/priv" - $(INSTALL_DATA) $(TOOLBAR_FILES) "$(RELSYSDIR)/priv" - -release_docs_spec: - -FORCE: diff --git a/lib/pman/priv/pman.gif b/lib/pman/priv/pman.gif Binary files differdeleted file mode 100644 index 4575a397d8..0000000000 --- a/lib/pman/priv/pman.gif +++ /dev/null diff --git a/lib/pman/priv/pman.tool b/lib/pman/priv/pman.tool deleted file mode 100644 index c04b7d00eb..0000000000 --- a/lib/pman/priv/pman.tool +++ /dev/null @@ -1,6 +0,0 @@ -{version,"0.1"}. -{{tool,"Pman"}, - {start,{pman,start,[]}}, - {icon,"pman.gif"}, - {message,"Process Manager"}, - {html,"../doc/html/index.html"}}. diff --git a/lib/pman/src/Makefile b/lib/pman/src/Makefile deleted file mode 100644 index eb0413bdbc..0000000000 --- a/lib/pman/src/Makefile +++ /dev/null @@ -1,112 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1996-2012. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -# -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Application version -# ---------------------------------------------------- -include ../vsn.mk -VSN=$(PMAN_VSN) - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/pman-$(VSN) - -# ---------------------------------------------------- -# Common Macros -# ---------------------------------------------------- - -MODULES= \ - pman \ - pman_main \ - pman_shell \ - pman_relay \ - pman_relay_server \ - pman_module_info \ - pman_win \ - pman_buf \ - pman_buf_utils \ - pman_buf_buffer \ - pman_buf_converter \ - pman_buf_printer \ - pman_options \ - pman_process \ - pman_tool - -HRL_FILES= \ - assert.hrl \ - pman_buf.hrl \ - pman_options.hrl \ - pman_win.hrl - -ERL_FILES= $(MODULES:%=%.erl) - -TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET) - -APP_FILE = pman.app -APP_SRC = $(APP_FILE).src -APP_TARGET = $(EBIN)/$(APP_FILE) - -APPUP_FILE = pman.appup -APPUP_SRC = $(APPUP_FILE).src -APPUP_TARGET = $(EBIN)/$(APPUP_FILE) - -# ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- -ERL_COMPILE_FLAGS += +warn_obsolete_guard - -# ---------------------------------------------------- -# Targets -# ---------------------------------------------------- - -debug opt: $(TARGET_FILES) - -clean: - rm -f $(TARGET_FILES) - rm -f errs core *~ - -$(APP_TARGET): $(APP_SRC) ../vsn.mk - $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ - -$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk - $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ - -docs: - -# ---------------------------------------------------- -# Special Targets -# ---------------------------------------------------- - - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_spec: opt - $(INSTALL_DIR) "$(RELSYSDIR)/src" - $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) $(TOOLBOX_FILES) "$(RELSYSDIR)/src" - $(INSTALL_DIR) "$(RELSYSDIR)/ebin" - $(INSTALL_DATA) $(TARGET_FILES) $(TARGET_TOOLBOX_FILES) "$(RELSYSDIR)/ebin" - -release_docs_spec: - diff --git a/lib/pman/src/assert.hrl b/lib/pman/src/assert.hrl deleted file mode 100644 index ea3b68cd7c..0000000000 --- a/lib/pman/src/assert.hrl +++ /dev/null @@ -1,81 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%% Purpose : Assert macro - - -%% ?ASSERT/2 - will simply return true if the first argument evaluates to true -%% otherwise it will exit and output (via the error logger) the -%% second string -%% -%% Arguments: -%% Flag Expression that should evalueate to true or false -%% String String to return as a part of the exit reason as well -%% be to be sent to the error logger. -%% -%% Returns: -%% true If the Flag expression evaluates to true -%% -%% Exits: -%% {'EXIT', {assertion_failed, String}} -%% If the Flag expression evaluates to something other than -%% true. -%% -%% Usage notes: -%% Please note that the Flag argument must be a valid expression that -%% evaluates to true. -%% -%% Also, avoid any side effects in the Flag, as everything performed -%% within the scope of the ?ASSERT macro will not be present when -%% the code is not compiled with the debug_on flag. -%% -%% Side effects include the binding of a variable, sending of a -%% message, etc. -%% - --ifdef(debug_on). --define(ASSERT(Flag, String), - case Flag of - true -> - true; - _ -> - S2 = - lists:flatten( - io_lib:format( - "=ASSERT====~nPid:~p, Module:~p, Line:~p~nTermination because assertion failed:~n~p", - [self(),?MODULE, ?LINE,String])), - error_logger:error_report(S2), - exit({assertion_failed, String}) - end - ). - --define(ALWAYS_ASSERT(String), - S2 = lists:flatten( - io_lib:format( - "=ASSERT====~nPid:~p, Module:~p, Line:~p~nTermination because of unconditional assert:~n~p", - [self(),?MODULE, ?LINE, String])), - error_logger:error_report(S2), - exit({always_assert, String}) - ). --else. --define(ASSERT(_Flag,_String), true). --define(ALWAYS_ASSERT(_String), true). --endif. - - - diff --git a/lib/pman/src/pman.app.src b/lib/pman/src/pman.app.src deleted file mode 100644 index cc32a17296..0000000000 --- a/lib/pman/src/pman.app.src +++ /dev/null @@ -1,40 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -{application, pman, - [{description, "pman The Process Manager"}, - {vsn, "%VSN%"}, - {modules, [ - pman, - pman_buf, - pman_buf_buffer, - pman_buf_converter, - pman_buf_printer, - pman_buf_utils, - pman_main, - pman_module_info, - pman_options, - pman_process, - pman_relay, - pman_relay_server, - pman_shell, - pman_tool, - pman_win - ]}, - {registered, []}, - {applications, [kernel, stdlib]}]}. diff --git a/lib/pman/src/pman.appup.src b/lib/pman/src/pman.appup.src deleted file mode 100644 index 7a435e9b22..0000000000 --- a/lib/pman/src/pman.appup.src +++ /dev/null @@ -1,19 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2001-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -{"%VSN%",[],[]}. diff --git a/lib/pman/src/pman.erl b/lib/pman/src/pman.erl deleted file mode 100644 index c8ea34b6b7..0000000000 --- a/lib/pman/src/pman.erl +++ /dev/null @@ -1,132 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%---------------------------------------------------------------------- -%%% Purpose : Exported API to the Pman graphical tool -%%---------------------------------------------------------------------- - --module(pman). - - -%% --------------------------------------------------------------- -%% The user interface exports -%% --------------------------------------------------------------- --export([start/0, - start_notimeout/0, - start/1, - start_notimeout/1, - proc/1, - proc/3]). - -%% --------------------------------------------------------------- - -%% Timeout for the startup function. -%% If no {initialization_complete, Pid} message has been received -%% from the spawned init-function within ?STARTUP_TIMEOUT ms -%% the start-function will call exit(Reason). --define(STARTUP_TIMEOUT, 20000). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% start/0 - -start() -> - start([], ?STARTUP_TIMEOUT). %Start w/o excluded modules - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% start_notimeout/0 - -start_notimeout() -> - start([],infinity). %Start w/o excluded modules - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% start/1 - -start(LIModuleExcluded) -> - start(LIModuleExcluded, ?STARTUP_TIMEOUT). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% start_notimeout/1 - -start_notimeout(LIModuleExcluded) -> - start(LIModuleExcluded, infinity). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% start/2 - Spawns the main Pman process, that will supervise -%% all processes except those running code from the modules -%% specified in LIModuleExcluded -%% - -start(LIModuleExcluded, Timeout) -> - - OSModuleExcluded = ordsets:from_list(LIModuleExcluded), - - PidInit = spawn(pman_main, init, [self(), OSModuleExcluded]), - - %% Wait for a initialization completion message from - %% the spawned process before returning its Pid. - %% - - receive - {initialization_complete, PidInit} -> - PidInit - - %% (Conditional) Failure to start within the time limit will - %% result in termination - - after - Timeout -> - exit(PidInit, kill), - exit({startup_timeout, ?MODULE}) - end. - - - -%% --------------------------------------------------------------- -%% If we want to trace just one process, we can call proc, giving it -%% either the Pid, or the registered name, (Global or local). -%% -%% (???) -%% Note that this function must not be used internally to create a -%% trace window, since it is assumed that it is started from any -%% process (esp. the shell) it will not have any supervisor process -%% that shall be notified about it's exit/death. -%% -%% Returns: Trace loop Pid|udefined - -%% --------------------------------------------------------------- - - -proc(undefined) -> - exit(undefined); - -proc({shell,P}) when is_pid(P) -> - pman_shell:start({{shell,P},self()}); - -proc(P) when is_atom(P) -> - proc(whereis(P)); - -proc({global, N}) -> - proc(global:whereis_name(N)); - -proc(P) when is_pid(P) -> - pman_shell:start({P,self()}). - -proc(X,Y,Z) -> - proc(c:pid(X,Y,Z)). - diff --git a/lib/pman/src/pman_buf.erl b/lib/pman/src/pman_buf.erl deleted file mode 100644 index d56ce184fa..0000000000 --- a/lib/pman/src/pman_buf.erl +++ /dev/null @@ -1,117 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%%---------------------------------------------------------------------- -%%% Purpose : This module is the exported interface to the buffering mechanism -%%% used in PMAN to prevent the trace output to congest -%%% the system. -%%% -%%% This module depends on the modules (direct or indirectly): -%%% pman_buf.hrl -%%% pman_buf_utils.erl -%%% pman_buf_buffer.erl -%%% pman_buf_converter.erl -%%% pman_buf_printer.erl -%%% -%%%---------------------------------------------------------------------- - --module(pman_buf). - -%%-compile(export_all). --export([start/2,clear/3]). - - --include("pman_buf.hrl"). - - -%% The buffering mechanism consists of three processes that -%% work in a chain to prevent the process monitor from congesting -%% output mechanism. -%% -%% Messages are buffered in the CONVERTER process before they are sent to -%% to the BUFFER process where they are formatted before they are finally -%% sent to either a file or the PRINTER process. The printer process -%% outputs the messages in the graphical user interface. -%% -%% -%% -%% --> CONVERTER --> BUFFER --> PRINTER --> gui -%% | -%% | -%% | -%% V -%% -%% file -%% - - - - - -%% ---------------------------------------------------------------- -%% The amount of data produced by a trace message may be large, and -%% cause the run time system to run out of memory. To avoid this, -%% the task of storing, cutting buffers, formating data and printing -%% it is performed by three processes: The buffer, the converter and -%% the printer. -%% -%% The converter accepts the raw data, a list -%% of {trace,Msg} tuples. Having max priority, it assures that the -%% amount of raw data stored never excedes ?BUFF_SIZE messages. -%% (With the exception of the last batch received, which assures that -%% the last trace message printed is never a buffer cut message.) -%% Whenever there is space available in the buffer process, (The -%% Buffer process stores max. ?BUFF_SIZE converted messages), -%% the buffer asks for more unconverted messages, and ?PRINT_LEN messages -%% are sent. They are converted by the buffer, and added to the list -%% of messages to be sent. - -%% The printer process requests formatted messages from the buffer, -%% and in chuncs of ?MAX_OUTPUT sends them to the buffer. If traces -%% are to be dumped on file, due to the max priority, such is handled -%% in the converter, and buffers are not cut. -%% - - -%% --------------------------------------------------------------- -%% Initializes the buffering mechanism, which consist of three -%% processes, each involved with a phase of the formattation and -%% output of data to the process windows. - -start(Editor, FileName) -> - Buffer_Pid = spawn_link(pman_buf_buffer,init,[Editor]), - Converter_Pid = - spawn_link(pman_buf_converter,init,[Buffer_Pid, FileName]), - Buffer_Pid!{converter_pid, Converter_Pid}, - #buffer{converter=Converter_Pid,buffer=Buffer_Pid}. - - - -%% --------------------------------------------------------------- -%% Kills the converter and the clears the buffer with formated data -%% starting a new converter. - -clear(Buff,String, FileName) -> - exit(Buff#buffer.converter,win_killed), - Converter_Pid=spawn_link(pman_buf_converter,init,[Buff#buffer.buffer, - FileName]), - Buff#buffer.buffer!{clear,String,Converter_Pid }, - Buff#buffer{converter = Converter_Pid}. - - - diff --git a/lib/pman/src/pman_buf.hrl b/lib/pman/src/pman_buf.hrl deleted file mode 100644 index 3f25dcc5f0..0000000000 --- a/lib/pman/src/pman_buf.hrl +++ /dev/null @@ -1,29 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% - -%%-compile(export_all). -%%-export([Function/Arity, ...]). - --define(BUFF_SIZE,1000). --define(EDITOR_MAX,10000). --define(PRINT_LEN,50). --define(MAX_OUTPUT,5000). - - --record(buffer,{buffer,converter}). diff --git a/lib/pman/src/pman_buf_buffer.erl b/lib/pman/src/pman_buf_buffer.erl deleted file mode 100644 index ad92eb1f3e..0000000000 --- a/lib/pman/src/pman_buf_buffer.erl +++ /dev/null @@ -1,102 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%%---------------------------------------------------------------------- -%%% Purpose : The purpouse of the buffer process is to take -%%% care of the data that is received by the converter -%%% process and pass it on to the printer process in chunks -%%% that can be handled. -%%% -%%% This module is a part of the buffering system, and -%%% should not be used except through the API defined -%%% in the pman_buf module. -%%% -%%%---------------------------------------------------------------------- - --module(pman_buf_buffer). - -%%-compile(export_all). --export([init/1]). - --include("pman_buf.hrl"). - - - -%% -%% Initialization function for the buffer process. -%% To be started with spawn from the calling process. -%% - -init(Editor) -> - Printer_pid = spawn_link(pman_buf_printer,init,[Editor,self()]), - receive - {converter_pid,Pid} -> - Pid!{buffer,accept}, - buffer_loop([],0,0,Printer_pid,Pid) - end. - - - -%% -%% Receive loop for the buffer process. -%% - -buffer_loop(Buffer,Size,Acc,Printer,Converter) -> - receive - {save_buffer,Name} -> - Printer!{save_buffer,Name}, - buffer_loop(Buffer,Size,Acc,Printer,Converter); - {raw,Raw,Length} -> %%output to editor - New_Size = Size + Length, - if New_Size < ?BUFF_SIZE -> - Converter!{buffer,accept}; - true -> ok - end, - Print = lists:map(fun(X) -> pman_buf_utils:textformat(X) end, Raw), - New_Buff = lists:append(Buffer,Print), - buffer_loop(New_Buff,New_Size,Acc,Printer,Converter); - {clear,Text,N_Converter} -> - Converter!{buffer,accept}, - Printer!clear, - buffer_loop([Text],1,1,Printer,N_Converter); - {printer,send} when Buffer /= [] -> - if - Acc > ?EDITOR_MAX -> - Printer!clear, - Printer !{buffer,"Cleared Buffer due to Size\n\n"}, - buffer_loop(Buffer,Size,1,Printer,Converter); - true -> - {Length,Rest,Print} = pman_buf_utils:split(Buffer, - ?PRINT_LEN, - 0, - []), - Printer ! {buffer,Print}, - New_Size = Size - Length, - if New_Size < ?BUFF_SIZE -> - Converter!{buffer,accept}; - true -> ok - end, - buffer_loop(Rest,New_Size,Acc+Length,Printer,Converter) - end; - {converter,file} -> - Converter!{buffer,Buffer}, - self()!{raw,[to_file],1}, - buffer_loop([],0,Acc,Printer,Converter) - end. - - diff --git a/lib/pman/src/pman_buf_converter.erl b/lib/pman/src/pman_buf_converter.erl deleted file mode 100644 index c8b3fe37aa..0000000000 --- a/lib/pman/src/pman_buf_converter.erl +++ /dev/null @@ -1,190 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%---------------------------------------------------------------------- -%% Purpose : The purpouse of the converter process is to take -%% care of the raw data that is received by the tracing -%% process (a pman_shell process) and pass it on to -%% the buffer process in chunks that can be handled. -%% -%% This module is a part of the buffering system, and -%% should not be used except through the API defined -%% in the pman_buf module. -%% -%%---------------------------------------------------------------------- - --module(pman_buf_converter). --compile([{nowarn_deprecated_function,{gs,start,0}}]). - -%%-compile(export_all). --export([init/2]). - --include("pman_buf.hrl"). - - -%% --------------------------------------------------------------- -%% Starts the process which received the raw data from the debugger, -%% cuts and forwards it to the buffer in smaller chunks. High priority -%% to avoid large message queues waiting to be processed. - -init(Buffer_Pid, FileName) -> - process_flag(priority, max), - converter_loop(Buffer_Pid,[],0,true,[], FileName). - -converter_loop(Buffer_Pid,Raw,Size,State,Last, FileName) -> - receive - {file,Shell} -> - case init_file(lists:append(Raw,Last), - FileName, - Shell, - Buffer_Pid) of - true -> converter_loop(Buffer_Pid, - [to_buffer], - 1, - State, - [], - FileName); - false -> converter_loop(Buffer_Pid, - Raw, - Size, - State, - Last, - FileName) - end; - {raw,Trace} -> - {New_Raw,New_Size,New_State,New_Last} = - converter_data(Trace, Buffer_Pid, Raw, Size, State, Last), - converter_loop(Buffer_Pid, - New_Raw, - New_Size, - New_State, - New_Last, - FileName); - {buffer,accept} when Raw /= [] -> - {Length,Rest,Print} = pman_buf_utils:split(Raw,?PRINT_LEN,0,[]), - Buffer_Pid!{raw,Print,Length}, - converter_loop(Buffer_Pid,Rest,Size-Length,false,Last,FileName); - {buffer,accept} when Last /= [] -> - {New_Raw,New_Size,New_State,New_Last} = - converter_data(Last,Buffer_Pid,Raw,Size,true,[]), - converter_loop(Buffer_Pid, - New_Raw, - New_Size, - New_State, - New_Last, - FileName); - {buffer,accept} -> - converter_loop(Buffer_Pid,Raw,Size,true,Last, FileName); - {clear,Str} -> - Buffer_Pid!{clear,Str}, - converter_loop(Buffer_Pid,[],0,State,Last,FileName) - end. - -converter_data(Trace,Buffer_Pid,Raw,Size,State,Last) -> - if - ?BUFF_SIZE - Size > 0 -> - {Len,Rest,New_Trace} = pman_buf_utils:split(Trace, - ?BUFF_SIZE-Size, - 0,[]), - {New_Raw,New_Last} = - case Rest of - [] -> - {lists:append(Raw,New_Trace),Last}; - [_|_] -> - case Last of - [] -> - {lists:append(Raw,New_Trace),Rest}; - _ ->{lists:concat([Raw,New_Trace,[cut_buffer]]), - Rest} - end - end, - case State of true -> - {Length,Cut_Raw,Print} = pman_buf_utils:split(New_Raw, - ?PRINT_LEN, - 0,[]), - Buffer_Pid!{raw,Print,Length}, - {Cut_Raw,Size-Length,false,New_Last}; - _ -> - {New_Raw,Size+Len,false,New_Last} - end; - true -> - {Raw,Size,State,Trace} - end. - - -%% --------------------------------------------------------------- -%% Initializes the environment for saving the trace to file. The -%% actual saving is taken care of by the buffer process. - -init_file(Raw,FileName, Name,Buffer_Pid) -> - case open_file(FileName, Name) of - {false,T} -> - pman_win:msg_win(T), - false; - {File,T} -> - Buffer_Pid!{converter,file}, - pman_win:dialog_window(gs:start(),T), - save_loop_init(File,Raw) - end. - -open_file(FileName, _Shell) -> -%% L = "pman_trace." ++ Shell, - case file:open(FileName, [read,write]) of - {error, _} -> - Str = "ERROR: Could not create_file\n" ++ FileName, - {false,Str}; - {ok,File} -> - file:position(File, {eof, 0}), - Str1 = " Appending trace log to file\n" ++ FileName, - {File,Str1} - end. - - -save_loop_init(Fd,Raw) -> - {Date, Time} = calendar:local_time(), - {Year, Month, Day} = Date, - {Hour, Minute, Second} = Time, - io:format(Fd,"%%% ~n",[]), - io:format(Fd,"%%% Trace output~n",[]), - io:format(Fd,"%%% Started at ~4p-~2p-~2p ~2p:~2p:~2p~n", - [Year, Month, Day, - Hour, Minute, Second - ]), - io:format(Fd,"%%% ~n~n",[]), - - Print = lists:map(fun(X) -> pman_buf_utils:textformat(X) end, Raw), - receive - {buffer,Text} when is_list(Text) -> - io:format(Fd,Text,[]), - io:format(Fd,Print,[]), - save_loop(Fd) - end. - -save_loop(Fd) -> - receive - {raw,Raw} -> - Print = lists:map(fun(X) -> pman_buf_utils:textformat(X) end, Raw), - io:format(Fd,Print,[]), - save_loop(Fd); - buffer -> true - end. - - - - - diff --git a/lib/pman/src/pman_buf_printer.erl b/lib/pman/src/pman_buf_printer.erl deleted file mode 100644 index 3284c57559..0000000000 --- a/lib/pman/src/pman_buf_printer.erl +++ /dev/null @@ -1,91 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% - --module(pman_buf_printer). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,start,0}}]). - -%%-compile(export_all). --export([init/2]). - - --include("pman_buf.hrl"). - -%% --------------------------------------------------------------- -%% Starts the part of the buffer which regulates the flow of data to -%% be printed in the pid editors - - -init(Editor,Buffer_pid) -> - Buffer_pid!{printer,send}, - printer_loop(Editor,Buffer_pid). - -printer_loop(Editor,Buffer_pid)-> - receive - {save_buffer,Name} -> - gs:config(Editor,{save,Name}), - TT = "Buffer saved in file\n" ++ Name, - pman_win:dialog_window(gs:start(),TT), - printer_loop(Editor,Buffer_pid); - {buffer,Trace} -> - case lists:flatlength(Trace) of - Len when Len > ?MAX_OUTPUT -> - printer_long(lists:flatten(Trace),Editor), - Buffer_pid!{printer,send}, - printer_loop(Editor,Buffer_pid); - _ -> - Buffer_pid!{printer,send}, - print_trace(Editor,Trace), - printer_loop(Editor,Buffer_pid) - end; - clear -> - pman_win:configeditor(Editor, [{enable, true}]), - pman_win:configeditor(Editor,clear), - pman_win:configeditor(Editor, [{enable, false}]), - printer_loop(Editor,Buffer_pid); - _Other -> - printer_loop(Editor,Buffer_pid) - end. - -printer_long([],_) -> ok; -printer_long(Trace,Editor) -> - receive - clear -> - pman_win:configeditor(Editor, [{enable, true}]), - pman_win:configeditor(Editor,clear), - pman_win:configeditor(Editor, [{enable, false}]) - after 0 -> - {_Length,Rest,Print} = pman_buf_utils:split(Trace, - ?MAX_OUTPUT, - 0, - []), - print_trace(Editor,Print), - printer_long(Rest,Editor) - end. - - - -%% --------------------------------------------------------------- -%% Function which print trace messages on the window -%% --------------------------------------------------------------- - -print_trace(Editor,Elements) -> - pman_win:configeditor(Editor, [{enable, true}]), - pman_win:configeditor(Editor, [{insert, {'end',Elements}}]), - pman_win:configeditor(Editor, [{enable, false}]). diff --git a/lib/pman/src/pman_buf_utils.erl b/lib/pman/src/pman_buf_utils.erl deleted file mode 100644 index af3982665e..0000000000 --- a/lib/pman/src/pman_buf_utils.erl +++ /dev/null @@ -1,106 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% - --module(pman_buf_utils). - -%%-compile(export_all). --export([textformat/1, split/4]). - - -%% --------------------------------------------------------------- -%% Funtion which format the trace message -%% --------------------------------------------------------------- - -textformat(died) -> - "\n\nProcess died\n"; -textformat({died, Pid}) -> - io_lib:format("~w Process died.~n",[Pid]); -textformat({shell_died, Old, New}) -> - io_lib:format("~w Shell Process died. Restarted as ~w~n~n",[Old,New]); - - -textformat(to_buffer) -> - "\nAppending trace log to Buffer\n\n"; -textformat(to_file) -> - "\nAppending trace log to File\n\n"; -textformat(cut_buffer) -> - "\nCUT BUFFER\n\n"; -textformat({trace, From, 'receive', Msg}) -> - io_lib:format("~w: rec ~s~n", [From, - tuple_space(Msg)]); -textformat({trace, From, send, Msg, To}) -> - io_lib:format("~w: ! To: ~w Msg: ~s~n", [From, - To, - tuple_space(Msg)]); -textformat({trace, From, call, Func}) -> - io_lib:format("~w: call ~s~n",[From, ffunc(Func)]); -textformat({trace, From, spawn, Data}) -> - io_lib:format("~w: spawn ~p~n", [From, Data]); -textformat({trace, From, link, Data}) -> - io_lib:format("~w: link ~p~n", [From, Data]); -textformat({trace, From, unlink, Data}) -> - io_lib:format("~w: U-lnk ~p~n", [From, Data]); - -textformat({trace, From, Op, Data}) -> - io_lib:format("~w: ~w ~p~n", [From, Op, Data]); - -textformat({print, Format, Args}) -> - io_lib:format(Format, Args); -textformat(Other) -> - io_lib:format("~p~n",[Other]). - - - - - -ffunc({M,F, Argl}) -> - io_lib:format("~w:~w(~s)", [M, F, fargs(Argl)]); -ffunc(X) -> tuple_space(X). -fargs([]) -> []; -fargs([A]) -> tuple_space(A); %% last arg -fargs([A|Args]) -> [tuple_space(A),", "|fargs(Args)]. - - -tuple_space(X) when is_tuple(X) -> print(size(X), X, "}"); -tuple_space(X) -> io_lib:format("~p",[X]). - -print(0 , _X, Buff) -> ["{"|Buff]; -print(1 , X, Buff) -> - Str = tuple_space(element(1, X)), - ["{",Str|Buff]; -print(Num, X, Buff) -> - Str = tuple_space(element(Num, X)), - print(Num-1, X, [", ",Str|Buff]). - - - -%% ---------------------------------------------------------------- -%% splits the list at element Size, returns Size, and the 2 lists -%% If the list is not long enough, it returns {size(List),[],List} - - -split([],_,Length,Buff) -> - {Length,[],lists:reverse(Buff)}; -split(Rest,0,Length,Buff) -> - {Length,Rest,lists:reverse(Buff)}; -split([L|List],Size,Length,Buff) -> - split(List,Size-1,Length+1,[L|Buff]). - - - diff --git a/lib/pman/src/pman_main.erl b/lib/pman/src/pman_main.erl deleted file mode 100644 index 2f51284293..0000000000 --- a/lib/pman/src/pman_main.erl +++ /dev/null @@ -1,789 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(pman_main). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,read,2}}]). - -%% Main process and window - --export([init/2]). - --record(state, {win, % GS top window - frame, % GS top frame - grid, % GS process info grid - - size, % int() No. of displayed procs - w, % int() Window width - h, % int() Window height - - hide_system=false, % bool() Auto-hide system procs - hide_new=false, % bool() Auto-hide new processes - - hide_modules, % ordset() Excluded modules - - hide_all=[], % [{node(), bool()}] Hide all - hide_pids=[], % [{node(), Ordset}] Processes - % explicitly to hide, per node - show_pids=[], % [{node(), Ordset}] Processes - % explicitly to show, per node - - shown_pids=[], % [{node(), Ordset}] Processes - % actually shown, per node - - node, % node() Current node - nodes=[], % [node()] All known nodes - - focus=1, % int() Grid line with focus - focus_pid=undefined, % pid() | undefined Proc in focus - - noshell, % bool() Noshell mode on - - options}). % term() Trace options settings - - --include("pman_win.hrl"). - --define(REFRESH_TIME,5000). - --define(REQUIRES_FOCUS, % List of menus that should - ['Trace Process', % be disabled if no process - 'Kill', % is in focus - 'Hide Selected Process', - 'Module']). - -%%--Process init and loop----------------------------------------------- - -init(PidCaller, OSModuleExcluded) -> - process_flag(trap_exit, true), - - %% Monitor all nodes in a distributed system - case is_alive() of - - %% We have a distributed system - true -> net_kernel:monitor_nodes(true); - - %% No distribution - false -> ignore - end, - Nodes = [node()|nodes()], - - %% Create the main window - %% For some extremely strange reason, the frame must be resized - %% or the grid won't be visible... - GridSize = length(processes()) + 61, - {Window, Grid, Frame, Visible, W, H} = - pman_win:pman_window(GridSize, OSModuleExcluded, Nodes), - gse:resize(Frame, ?WIN_WIDTH, ?WIN_HEIGHT-?MENU_HEIGHT), - - Noshell = case pman_shell:find_shell() of - noshell -> true; - _ -> false - end, - - State1 = #state{win=Window, frame=Frame, grid=Grid, - size=Visible, - w=W, h=H, - hide_modules=OSModuleExcluded, - node=node(), - noshell=Noshell}, - - State2 = lists:foldl(fun(Node, State) -> add_node(Node, State) end, - State1, - Nodes), - - State3 = refresh(State2), - - %% Notify caller that the process appears - %% to have been started. - PidCaller ! {initialization_complete, self()}, - - %% Initiate a 'catch all' trace pattern so call tracing works - erlang:trace_pattern({'_', '_', '_'}, true, [local]), - - %% Read default options file - Options = restore_options(State3), - - loop(State3#state{options=Options}). - -add_node(Node, State) -> - pman_win:add_menu(node, [Node], "Show"), - State#state{hide_all=nl_update(Node, false, State#state.hide_all), - hide_pids=nl_update(Node, [], State#state.hide_pids), - show_pids=nl_update(Node, [], State#state.show_pids), - shown_pids=nl_update(Node, [], State#state.shown_pids), - nodes=[Node|State#state.nodes]}. - -%% Restore saved options from default file -restore_options(State)-> - File = options_file(), - case pman_options:read_from_file(File) of - {ok, Options} -> - Options; - {error, ReasonStr, DefOptions} -> - Parent = State#state.win, - Msg = io_lib:format( - "Problems reading default option file~n~s:~n~s", - [File, ReasonStr]), - tool_utils:notify(Parent, Msg), - DefOptions - end. - -options_file() -> - {ok, [[Home]]} = init:get_argument(home), - filename:join([Home, ".erlang_tools", "pman.opts"]). - -loop(State) -> - receive - {nodeup, Node} -> - case nl_exists(Node, State#state.hide_all) of - true -> - pman_win:add_menu(node, [Node], "Show"), - loop(State#state{nodes=[Node|State#state.nodes]}); - false -> - loop(add_node(Node, State)) - end; - - {nodedown, Node} -> - pman_win:remove_menu([Node]), - - Msg = io_lib:format("Node~n~p~ndown.", [Node]), - spawn_link(tool_utils, notify, [State#state.win, Msg]), - - %% We remove Node from the list of nodes but not from - %% the other lists of State, in case Node reappears later - Nodes = lists:delete(Node, State#state.nodes), - State2 = State#state{nodes=Nodes}, - - %% If it was the shown node that went down, - %% change overview to this node - if - Node==State#state.node -> - State3 = execute_cmd({node,node()}, State2, [], []), - loop(State3); - true -> - loop(State2) - end; - - %% Ignore EXIT signals from help processes - {'EXIT', _Pid, _Reason} -> - loop(State); - - %% GS events - {gs, _Obj, _Event, _Data, _Args} = Cmd -> - case gs_cmd(Cmd, State) of - stop -> - exit(topquit); - State2 -> - loop(State2) - end - - after ?REFRESH_TIME -> - State2 = refresh(State), - loop(State2) - end. - -%% gs_cmd(Event, State) -> stop | State' -gs_cmd(Event, State) -> - case Event of - - %% --- Window manager commands --- - - %% Window is moved or resized - {gs, _, configure, _Data, Args} -> - configure(Args, State); - - %% Window closed, stop Pman - {gs, _, destroy, _, _} -> - stop; - - %% --- Dynamic commands --- - - %% Click in any object where the GS Data field is a 2-tuple - {gs, _, click, Data, Args} when is_tuple(Data), size(Data)==2 -> - execute_cmd(Data, State, [], Args); - - %% Single click in the grid sets focus to selected process - {gs, _, click, {pidfunc,_,_}, [_,Row|_]} when is_integer(Row) -> - focus(Row, State); - - %% Double click in the grid starts tracing of selected process - {gs, _, doubleclick, {pidfunc,_,_}, [_Col,Row| _]} when is_integer(Row) -> - execute_cmd('Trace Process', State, [], []); - - %% Click in named GS objects - {gs, Cmd, click, Data, Args} when is_atom(Cmd); - is_atom(element(1, Cmd)) -> - execute_cmd(Cmd, State, Data, Args); - - %% --- Keyboard accelerator commands --- - - %% Move focus up and down - {gs, _, keypress, [], ['Up',_,0,0]} -> - execute_cmd(focus_previous, State, [], []); - {gs, _, keypress, [], ['Down',_,0,0]} -> - execute_cmd(focus_next, State, [], []); - - %% Other keyboard shortcuts - {gs, _, keypress, [], ['Return',_,0,0]} -> - execute_cmd('Trace Process', State, [], []); - {gs, _, keypress, [], [Key,_,0,1]} -> - execute_cmd(shortcut(Key), State, [], []); - - %% Ignore all other GS events - _Other -> - State - end. - -%% Keyboard shortcuts - -%% File menu -shortcut(o) -> 'Default Options'; -shortcut(e) -> 'Exit'; -shortcut(z) -> 'Exit'; - -%% View menu -shortcut(i) -> 'Hide All'; -shortcut(u) -> 'Hide Modules'; -shortcut(d) -> 'Hide Selected Process'; -shortcut(m) -> 'Module'; -shortcut(r) -> 'Refresh'; - -%% Trace menu -shortcut(k) -> 'Kill'; -shortcut(t) -> 'Trace Process'; -shortcut(s) -> 'Trace Shell'; - -%% Help menu -shortcut(h) -> 'Help'; - -%% Keyboard command only -shortcut(l) -> 'All Links'; - -%% Process grid traversal -shortcut(p) -> focus_previous; -shortcut(n) -> focus_next; -shortcut(_) -> dummy. - -%% configure([W,H,X,Y|_], State) -> State' -%% Window has been moved or resized -configure([W,H|_], State) -> - if - W==State#state.w, H==State#state.h -> - ignore; - - true -> - gse:resize(State#state.frame, W, H-?MENU_HEIGHT), - - Grid = State#state.grid, - case abs(W - gs:read(Grid,width) - 6) of - 0 -> - ok; %% Avoid refreshing width if possible - _Anything -> - Cols = pman_win:calc_columnwidths(W-6), - gs:config(Grid, Cols) - end, - pman_win:configwin(Grid, W, H) - end, - State. - -%% focus(Row, State) -> State' -%% Row = int() Grid row -%% User has selected a row in the grid. -%% Row==1 means header row. -focus(Row, State) -> - - Pid = case get_pid_in_focus(Row, State#state.grid) of - {true, {pidfunc,Pid0,_}} -> - pman_win:change_colour(State#state.grid, - State#state.focus, Row), - enable_pid_actions(), - Pid0; - false -> - disable_pid_actions(), - undefined - end, - - State#state{focus=Row, focus_pid=Pid}. - -%% get_pid_in_focus(Row, Grid) -> {true, Data} | false -%% Data = {pidfunc, Pid, Func} -%% Func = {Mod,Name,Arity} | term() -%% Return the data associated with the process in focus if there is one, -get_pid_in_focus(1, _Grid) -> - false; -get_pid_in_focus(Row, Grid) -> - case gs:read(Grid, {obj_at_row,Row}) of - undefined -> false; - GridLine -> - Data = gs:read(GridLine, data), - {true, Data} - end. - -%% execute_cmd(Cmd, State, Data, Args) -> stop | State' - -%% Checkbutton "Hide System Processes" -execute_cmd('Hide System', State, _Data, Args) -> - [_Text, _Group, Bool|_Rest] = Args, - State2 = State#state{hide_system=Bool}, - refresh(State2); - -%% Checkbutton "Auto-Hide New" -execute_cmd('Auto Hide New', State, _Data, Args ) -> - [_Text, _Group, Bool|_Rest] = Args, - refresh(State#state{hide_new=Bool}); - -%% File->Options... -execute_cmd('Default Options', State, _Data, _Args) -> - OldOptions = State#state.options, - NewOptions = pman_options:dialog(State#state.win, - "Default Trace Options", - OldOptions), - case NewOptions of - {error, _Reason} -> - State; - Options -> - State#state{options=Options} - end; - -%% File->Save Options -%% Save the set default options to the user's option file -execute_cmd('Save Options', State, _Data, _Args)-> - Options = State#state.options, - File = options_file(), - Parent = State#state.win, - - case pman_options:save_to_file(Options, File) of - ok -> - tool_utils:notify(Parent, "Options saved to\n" ++ File); - {error, ReasonStr} -> - Msg = io_lib:format("Could not save options to~n~s:~n~s", - [File, ReasonStr]), - tool_utils:notify(Parent, Msg) - end, - State; - -%% File->Exit -%% Exit the application -execute_cmd('Exit', _State, _Data, _Args) -> - stop; - -%% View->Hide All Processes -execute_cmd('Hide All', State, _Data, _Args) -> - Node = State#state.node, - HideAll = nl_update(Node, true, State#state.hide_all), - ShowPids = nl_del_all(State#state.node, State#state.show_pids), - State2 = State#state{hide_all=HideAll, show_pids=ShowPids}, - refresh(State2, true); - -%% View->Hide modules... -%% Opens a dialog where the user can select from a list of -%% the loaded modules. -%% The selected module is added to the list of hidden modules. -execute_cmd('Hide Modules', State, _Data, _Args) -> - - %% Get all loaded modules that are not already hidden - AllModules = lists:map(fun({Module, _File}) -> Module end, - code:all_loaded()), - ModulesSet = ordsets:subtract(ordsets:from_list(AllModules), - State#state.hide_modules), - - %% Let the user select which of the loaded modules to exclude from - %% the process overview - Title = "Module selection", - case pman_tool:select(State#state.win, Title, ModulesSet) of - Modules when is_list(Modules) -> - HideModules = ordsets:union(State#state.hide_modules, - ordsets:from_list(Modules)), - refresh(State#state{hide_modules=HideModules}); - cancelled -> State - end; - -%% View->Hide Selected Process -%% The process in focus should explicitly be hidden -execute_cmd('Hide Selected Process', State, _Data, _Args) -> - case State#state.focus_pid of - undefined -> State; - Pid -> - Node = State#state.node, - HidePids = nl_add(Node, Pid, State#state.hide_pids), - ShowPids = nl_del(Node, Pid, State#state.show_pids), - refresh(State#state{hide_pids=HidePids, show_pids=ShowPids}) - end; - -%% View->Module Info... -%% Open window with module information. -execute_cmd('Module', State, _Data, _Args) -> - case get_pid_in_focus(State#state.focus, State#state.grid) of - {true, {pidfunc, _Pid, {Module,_Name,_Arity}}} -> - pman_module_info:start(Module); - _ -> % false | {true, {pidfunc, Pid, Other}} - ignore - end, - State; - -%% View->Refresh -%% Refresh the main window. -%% (Called automatically every ?REFRESH_TIME millisecond) -execute_cmd('Refresh', State, _Data, _Args) -> - refresh(State); - -%% View->Show All Processes -%% Makes all processes visible except system processes and new -%% processes, if those buttons are checked. -%% Note: Also un-hides all hidden modules! -execute_cmd('Show All', State, _Data, _Args) -> - Node = State#state.node, - HideAll = nl_update(Node, false, State#state.hide_all), - HidePids = nl_del_all(State#state.node, State#state.hide_pids), - ShowPids = nl_del_all(State#state.node, State#state.show_pids), - State2 = State#state{hide_modules=ordsets:new(), hide_all=HideAll, - hide_pids=HidePids, show_pids=ShowPids}, - refresh(State2, true); - -%% View->Show Processes... -%% Open a list of all hidden processes, if the user selects one this -%% process should explicitly be shown -execute_cmd('Show Selected', State, _Data, _Args) -> - Node = State#state.node, - - All = pman_process:r_processes(Node), - Hidden = case nl_lookup(Node, State#state.hide_all) of - true -> - All; - false -> - Shown = nl_lookup(Node, State#state.shown_pids), - ordsets:subtract(All, Shown) - end, - - %% Selection window - Title = "Select Processes to Show", - Tuples = - lists:map(fun(Pid) -> - {M,F,A} = pman_process:function_info(Pid), - Str = case pman_process:get_name(Pid) of - " " -> - io_lib:format("~p:~p/~p", - [M, F, A]); - Name -> - io_lib:format("[~p] ~p:~p/~p", - [Name, M, F, A]) - end, - {Pid, Str} - end, - Hidden), - case pman_tool:select(State#state.win, Title, Tuples) of - Pids when is_list(Pids) -> - HidePids = nl_del(Node, Pids, State#state.hide_pids), - ShowPids = nl_add(Node, Pids, State#state.show_pids), - refresh(State#state{hide_pids=HidePids,show_pids=ShowPids}); - cancelled -> State - end; - -%% Trace->Kill -execute_cmd('Kill', State, _Data, _Args) -> - case State#state.focus_pid of - Pid when is_pid(Pid) -> - exit(Pid, kill); - undefined -> - ignore - end, - State; - -%% Trace->Selected Process -execute_cmd('Trace Process', State, _Data, _Args) -> - case State#state.focus_pid of - Pid when is_pid(Pid) -> - pman_shell:start({Pid,self()}, State#state.options); - undefined -> - ignore - end, - State; - -%% Trace->Shell Process -execute_cmd('Trace Shell', State, _Data, _Args) -> - case pman_shell:find_shell() of - noshell -> - State; - Shell -> - pman_shell:start({{shell,Shell},self()}, - State#state.options), - State#state{noshell=false} - end; - -%% Nodes->Show <Node> -%% Change shown node -execute_cmd({node,Node}, State, _Data, _Args) -> - gse:config(State#state.win, - [{title,lists:concat(["Pman: Overview on ", Node])}]), - gse:disable(Node), - catch gse:enable(State#state.node), % Menu may not exist any more - refresh(State#state{node=Node}, true); - -%% Help->Help -execute_cmd('Help', State, _Data, _Args) -> - Win = State#state.win, - HelpFile = - filename:join([code:lib_dir(pman),"doc","html","index.html"]), - tool_utils:open_help(Win, HelpFile), - State; - -%% Keyboard shortcut Ctrl-l -execute_cmd('All Links', State, _Data, _Args) -> - case State#state.focus_pid of - Pid when is_pid(Pid) -> - case process_info(Pid, links) of - {links, Pids} -> - pman_shell:start_list(Pids, self(), - State#state.options); - undefined -> - ignore - end; - undefined -> ignore - end, - State; - -%% Keyboard shortcuts for process grid traversal -execute_cmd(focus_previous, State, _Data, _Args) -> - focus(previous_row(State), State); -execute_cmd(focus_next, State, _Data, _Args) -> - focus(next_row(State), State); - -%% Keyboard combinations that are not shortcuts -execute_cmd(dummy, State, _Data, _Args) -> - State. - -%% Convenience functions for disabling/enabling menu items that require -%% that a process is selected. -disable_pid_actions() -> - lists:foreach(fun(X) -> gse:disable(X) end, ?REQUIRES_FOCUS). - -enable_pid_actions() -> - lists:foreach(fun(X) -> gse:enable(X) end, ?REQUIRES_FOCUS). - -%% refresh(State) -> State' -%% refresh(State, ForceP) -> State' -%% Refreshes the main window. -refresh(State) -> - refresh(State, false). -refresh(#state{node=Node} = State, ForceP) -> - - %% Update shown processes - - %% First, get an ordset of all processes running at the current node - All = pman_process:r_processes(Node), - - Shown = nl_lookup(Node, State#state.shown_pids), - ExpShown = nl_lookup(Node, State#state.show_pids), - - {Show, State2} = - case nl_lookup(Node, State#state.hide_all) of - - %% If the user has selected "Hide All Processes", only - %% explicitly selected processes which still exist should - %% be shown - true -> - {ordsets:intersection(ExpShown, All), State}; - - false -> - %% Compute which processes should be hidden according - %% to the flags/menu items selected - Hidden = hidden_pids(All, State), - - NotHidden = ordsets:subtract(All, Hidden), - - Show0 = case State#state.hide_new of - %% If the user has selected "Auto-Hide New", - %% then only those processes in NotHidden - %% which are already shown, should be shown, - %% together with explicitly selected - %% processes which still exist - true -> - ordsets:union( - ordsets:intersection(NotHidden,Shown), - ordsets:intersection(ExpShown, All)); - - %% Otherwise, show all processes in - %% NotHidden, together with explicitly - %% selected processes which still exist - false -> - ordsets:union( - NotHidden, - ordsets:intersection(ExpShown, All)) - end, - - ShownPids = nl_update(Node, Show0, - State#state.shown_pids), - {Show0, State#state{shown_pids=ShownPids}} - end, - - NoOfHidden = length(All) - length(Show), - - if - Show==Shown, not ForceP -> - pman_win:update(NoOfHidden), - State; - - true -> - ShowInfo = display_info(Show), - pman_win:update(State#state.grid, ShowInfo, NoOfHidden), - - %% Set the focus appropriately - State3 = case State2#state.focus_pid of - undefined -> - disable_pid_actions(), - State2; - Pid -> - Row = get_row(Pid, Show), - focus(Row, State2) - end, - - trace_shell_possible(State3), - - Size = length(Show), - case Size of - 1 -> gse:disable('Hide All'); - _ -> gse:enable('Hide All') - end, - - State3#state{size=Size} - end. - -%% hidden_pids(All, State) -> Hidden -hidden_pids(All, State) -> - - %% Processes hidden because they are system processes - HideSys = case State#state.hide_system of - true -> - lists:filter( - fun(Pid) -> - pman_process:is_system_process(Pid) - end, - All); - false -> - [] - end, - - %% Process hidden because they are executing code in a hidden module - Mods = State#state.hide_modules, - HideMod = - lists:filter(fun(Pid) -> - pman_process:is_hidden_by_module(Pid, Mods) - end, - All), - - %% Explicitly hidden processes - HideExp = nl_lookup(State#state.node, State#state.hide_pids), - - %% All hidden processes - ordsets:union([HideSys, HideMod, HideExp]). - -display_info(Pids) -> - lists:map(fun(Pid) -> - Func = pman_process:function_info(Pid), - Name = pman_process:get_name(Pid), - Msgs = pman_process:msg(Pid), - Reds = pman_process:reds(Pid), - Size = pman_process:psize(Pid), - {Pid, Func, Name, Msgs, Reds, Size} - end, - Pids). - -get_row(Pid, List) -> - get_row(Pid, List, length(List)+1). - -get_row(Pid, [Pid | _], Row) -> - Row; -get_row(Pid, [_ | T], Row) -> - get_row(Pid, T, Row-1); -get_row(_Pid, [], _Row) -> - 1. - -next_row(#state{size=Size, focus=Row}) -> - check_row(Row+1, Size). - -previous_row(#state{size=Size, focus=Row}) -> - check_row(Row-1, Size). - -check_row(1, Size) -> - Size+1; -check_row(Row, Size) when Row==Size+2 -> - 2; -check_row(Row, _Size) -> - Row. - -%% Check if node is running in noshell mode and if so disable the -%% 'Trace Shell' menu option. -trace_shell_possible(#state{noshell=true}) -> - gse:disable('Trace Shell'); -trace_shell_possible(_) -> - ok. - -%% -- Functions for manipulating {Node, Data} lists -- - -%% nl_add(Node, Elem|Elems, NList) -> NList' -nl_add(Node, Elems, [{Node, Ordset} | T]) when is_list(Elems) -> - [{Node, ordsets:union(Elems, Ordset)} | T]; -nl_add(Node, Elem, [{Node, Ordset} | T]) -> - [{Node, ordsets:add_element(Elem, Ordset)} | T]; -nl_add(Node, Elem, [H | T]) -> - [H | nl_add(Node, Elem, T)]; -nl_add(Node, Elems, []) when is_list(Elems) -> - [{Node, Elems}]; -nl_add(Node, Elem, []) -> - [{Node, ordsets:add_element(Elem, ordsets:new())}]. - -%% nl_del(Node, Elem|Elems, NList) -> NList' -nl_del(Node, Elems, [{Node, Ordset} | T]) when is_list(Elems) -> - [{Node, ordsets:subtract(Ordset, Elems)} | T]; -nl_del(Node, Elem, [{Node, Ordset} | T]) -> - [{Node, ordsets:del_element(Elem, Ordset)} | T]; -nl_del(Node, Elem, [H | T]) -> - [H | nl_del(Node, Elem, T)]; -nl_del(_Node, _Elem, []) -> - []. - -%% nl_del_all(Node, NList) -> NList' -nl_del_all(Node, [{Node, _Ordset} | T]) -> - [{Node, ordsets:new()} | T]; -nl_del_all(Node, [H | T]) -> - [H | nl_del_all(Node, T)]; -nl_del_all(_Node, []) -> - []. - -%% nl_update(Node, Val, NList) -> NList' -nl_update(Node, Val, [{Node, _OldVal} | T]) -> - [{Node, Val} | T]; -nl_update(Node, Val, [H | T]) -> - [H | nl_update(Node, Val, T)]; -nl_update(Node, Val, []) -> - [{Node, Val}]. - -%% nl_lookup(Node, NList) -> Val -nl_lookup(Node, NList) -> - {value, {_Node,Val}} = lists:keysearch(Node, 1, NList), - Val. - -%% nl_exists(Node, NList) -> bool() -nl_exists(Node, NList) -> - case lists:keysearch(Node, 1, NList) of - {value, _Val} -> - true; - false -> - false - end. diff --git a/lib/pman/src/pman_module_info.erl b/lib/pman/src/pman_module_info.erl deleted file mode 100644 index 944fd4a462..0000000000 --- a/lib/pman/src/pman_module_info.erl +++ /dev/null @@ -1,133 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(pman_module_info). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,start,1}}]). - -%% Window with module information (View->Module Info...) - -%% External exports --export([start/1]). - -%% Record for keeping the loop state for the -%% module info process. --record(state, {topwin, % GS identifier for top window - editor, % GS identifier for editor - module, % Name of the viewed module - parent}). % Pid of the parent - -start(Module) -> - Self = self(), - spawn_link(fun() -> init(Module, Self) end). - -init(Module, Parent) -> - process_flag(trap_exit, true), - - GS = gs:start([{kernel,true}]), - Font = pman_win:font(GS), - - WinTitle = lists:flatten(io_lib:format("Pman - Module Info: ~p", - [Module])), - WinOptions = [{title,WinTitle}, {width,550}, {height, 400}, - {configure,true}, {keypress,true}, {destroy,true}], - TopWindow = gse:window(GS, WinOptions), - - %% File menu - MenuBar = gse:menubar(TopWindow, []), - MBFile = gse:menubutton(MenuBar, [{label,{text," File "}}, - {font,Font}, {underline, 1}]), - MenuFile = gse:menu(MBFile, []), - - gse:named_menuitem('Save buffer', MenuFile, - [{label,{text,"Save buffer..."}}, - {font,Font}, {underline,0}]), - gse:named_menuitem('Close', MenuFile, - [{label,{text,"Close"}}, - {font,Font}, {underline,0}]), - - %% Output part of window - Editor = gse:editor(TopWindow, - [{font,Font}, - {x,3}, {y,40}, {width,546}, {height,348}]), - gse:config(Editor, [{keypress,true}, - {insert,{'end',pman_win:module_data(Module)}}]), - gse:config(Editor, [{enable,false}, - {vscroll,right}, {hscroll,bottom}, - {wrap,none}]), - gse:map(TopWindow), - - State = #state{topwin=TopWindow, editor=Editor, module=Module, - parent=Parent}, - loop(State). - -loop(State) -> - - receive - %% Die if the parent dies - {'EXIT', Pid, _Reason} when Pid==State#state.parent -> - gse:destroy(State#state.topwin); - - %% Ignore other exit signals (from file dialog window) - {'EXIT', _Pid, _Reason} -> - loop(State); - - %% Window closed - {gs, _TopWindow, destroy, [], []} -> - ok; - - %% Window resized or moved - {gs, _TopWindow, configure ,_Data, [W,H,_X,_Y|_]} -> - gs:config(State#state.editor, [{width,W-3}, {height,H-40}]), - loop(State); - - %% Close - destroy window and exit process - {gs, 'Close', click, _Data, _Args} -> - gse:destroy(State#state.topwin), - ok; - - %% Save Buffer - make filename and save buffer to file - {gs, 'Save buffer', click, _Data, _Args} -> - save_buffer(State), - loop(State); - - %% Keyboard accelerator commands - {gs, _, keypress, [], [c,_,0,1]} -> % 'Close' - gse:destroy(State#state.topwin), - ok; - {gs, _, keypress, [], [s,_,0,1]} -> % 'Save buffer' - save_buffer(State), - loop(State); - {gs, _, keypress, _Data, _Args} -> - loop(State) - end. - -save_buffer(State) -> - DefaultFile = atom_to_list(State#state.module) ++ ".module_info", - Result = tool_utils:file_dialog([{type,save}, {file,DefaultFile}]), - case Result of - %% User selected a file, now save the result - {ok, File, _Dir} -> - gs:config(State#state.editor, {save,File}), - Msg = "Module information saved in file\n" ++ File, - tool_utils:notify(State#state.topwin, Msg); - - %% File dialog was cancelled in some way. - {error, _Reason} -> - ignore - end. diff --git a/lib/pman/src/pman_options.erl b/lib/pman/src/pman_options.erl deleted file mode 100644 index 0765458fdc..0000000000 --- a/lib/pman/src/pman_options.erl +++ /dev/null @@ -1,395 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(pman_options). - -%% Window with trace options settings (File->Options...) - --export([dialog/3, - read_from_file/1, save_to_file/2]). - --include("pman_options.hrl"). - --define(WIN_WIDTH, 350). --define(WIN_HEIGHT, 350). - --define(TOP_WINDOW, xx_pman_option_window_xx). --define(TOP_FRAME, xx_pman_top_frame_xx). - --record(state, {resize_frame, % GS identifier for the main frame - parent}). % Pid of parent - -%%--dialog/3------------------------------------------------------------ -%% Create a window, or return a value indicating that is is already -%% created. - -dialog(ParentWin, Title, Options) -> - Self = self(), - Pid = spawn(fun() -> dialog(Self, ParentWin, Title, Options) end), - receive - {Pid, Value} -> - Value % Options2 | {error,destroyed} | {error,cancelled} - end. - -dialog(Parent, ParentWin, Title, Options) -> - - %% Check if the dialog has already been created, in that - %% case, we can reuse it. Otherwise a new dialog is created. - case gse:name_occupied(?TOP_WINDOW) of - false -> make_window(ParentWin, Title); - true -> ok - end, - - %% Window has now been created or may be re-used - update_window_from_options(Options), - - gse:resize(?TOP_FRAME, ?WIN_WIDTH, ?WIN_HEIGHT), - gse:map(?TOP_WINDOW), - - loop(#state{resize_frame=?TOP_FRAME, parent=Parent}). - -loop(State) -> - receive - {gs, _Id, destroy, _Data, _Arg} -> - State#state.parent ! {self(), {error,destroyed}}; - - {gs, ?TOP_WINDOW, configure, _Data, [W, H |_]} -> - gse:config(State#state.resize_frame, - [{width,W},{height,H}]), % repack - loop(State); - - {gs, ok_button, click, _Data, _Arg} -> - Options = get_options_from_window(), - gse:unmap(?TOP_WINDOW), - State#state.parent ! {self(), Options}; - - {gs, cancel_button, click, _Data, _Arg} -> - gse:unmap(?TOP_WINDOW), - State#state.parent ! {self(), {error,cancelled}}; - - {gs, trace_spawn, click, _Data, [_Text,_,Value]} -> - group_radio(Value, trace_spawn_all, [trace_spawn_all, - trace_spawn_first]), - loop(State); - - {gs, trace_link, click, _Data, [_Text,_,Value]} -> - group_radio(Value, trace_link_all, [trace_link_all, - trace_link_first]), - loop(State); - - {gs, trace_in_window, click, _Data, _Arg} -> - lists:foreach(fun(X) -> gse:disable(X) end, - [trace_file, trace_file_browse]), - loop(State); - - {gs, trace_to_file, click, _Data, [_Text,_,_Value]} -> - lists:foreach(fun(X) -> gse:enable(X) end, - [trace_file, trace_file_browse]), - loop(State); - - {gs, trace_file_browse, click, _Data, _Arg} -> - Result = tool_utils:file_dialog([{type,save}, - {file, "Untitled.log"}]), - case Result of - {error, _Reason} -> - loop(State); - {ok, Name,_State} -> - gse:config(trace_file, [{text, Name}]), - loop(State) - end - end. - --define(LBLOPTS, [{justify,left}, {align,w}]). --define(BTNOPTS, [{justify,left}, {align,w}]). - -make_window(ParentWin, Title) -> - - Font = pman_win:font(), - - gse:named_window(?TOP_WINDOW, ParentWin, [{title,Title}, - {configure,true}, - {width, ?WIN_WIDTH}, - {height, ?WIN_HEIGHT}]), - - gse:named_frame(?TOP_FRAME, ?TOP_WINDOW, - [{bw,3}, - {packer_x,[{stretch,1,175}, {stretch,1,175}]}, - {packer_y,[{stretch,3},{stretch,2},{stretch,1}]}]), - - F11 = gse:frame(?TOP_FRAME, [{bw,3}, - {pack_xy,{1,1}}, - {packer_x,[{stretch,1}, - {stretch,20}, - {stretch,2}]}, - {packer_y,[{stretch,2}, - {stretch,1}, - {stretch,1}, - {stretch,1}, - {stretch,1}, - {stretch,1}, - {stretch,1}, - {stretch,1}]}]), - - gse:label(F11,[{pack_xy,{2,1}}, - {label,{text,"Trace output options:"}}, - {font,Font} | ?LBLOPTS]), - - gse:named_checkbutton(trace_send, F11, - [{pack_xy,{2,2}}, - {label,{text,"Trace send"}}, - {font,Font} | ?BTNOPTS]), - gse:named_checkbutton(trace_receive, F11, - [{pack_xy,{2,3}}, - {label,{text, "Trace receive"}}, - {font,Font} | ?BTNOPTS]), - gse:named_checkbutton(trace_functions,F11, - [{pack_xy,{2,4}}, - {label,{text, "Trace functions"}}, - {font,Font} | ?BTNOPTS]), - gse:named_checkbutton(trace_events,F11, - [{pack_xy,{2,5}}, - {label,{text, "Trace events"}}, - {font,Font} | ?BTNOPTS]), - - F21 = gse:frame(?TOP_FRAME, [{bw,3}, - {pack_xy,{2,1}}, - {packer_x,[{stretch,1}, - {stretch,2}, - {stretch,2}, - {stretch,20}, - {stretch,1}]}, - {packer_y,[{stretch,2}, - {stretch,1}, - {stretch,1}, - {stretch,1}, - {stretch,1}, - {stretch,1}, - {stretch,1}, - {stretch,1}, - {stretch,1}]}]), - - gse:label(F21, [{pack_xy,{{2,4},1}}, - {label,{text,"Inheritance options:"}}, - {font,Font} | ?LBLOPTS]), - - gse:named_checkbutton(trace_spawn, F21, - [{pack_xy,{{2,4},2}}, - {data,trace_send}, - {label,{text,"Inherit on spawn"}}, - {font,Font} | ?BTNOPTS]), - gse:named_radiobutton(trace_spawn_all, F21, - [{pack_xy,{{3,4},3}}, - {group,spawn}, - {data,trace_receive}, - {label,{text, "All spawns"}}, - {font,Font} | ?BTNOPTS]), - gse:named_radiobutton(trace_spawn_first, F21, - [{pack_xy,{{3,4},4}}, - {group,spawn}, - {data,trace_receive}, - {label,{text,"First spawn only"}}, - {font,Font} | ?BTNOPTS]), - gse:named_checkbutton(trace_link, F21, - [{pack_xy,{{2,4},6}}, - {data,trace_send}, - {label,{text,"Inherit on link"}}, - {font,Font} | ?BTNOPTS]), - gse:named_radiobutton(trace_link_all, F21, - [{pack_xy,{{3,4},7}}, - {group,link}, - {data,trace_receive}, - {label,{text,"All links"}}, - {font,Font} | ?BTNOPTS]), - - gse:named_radiobutton(trace_link_first, F21, - [{pack_xy,{{3,4},8}}, - {group,link}, - {data,trace_receive}, - {label,{text,"First link only"}}, - {font,Font} | ?BTNOPTS]), - - F12 = gse:frame(?TOP_FRAME, [{bw,3}, - {pack_xy,{{1,2},2}}, - {packer_x,[{stretch,1}, - {stretch,5}, % Label - {stretch,1}, - {stretch,10}, % Field - {stretch,1}, - {stretch,5}, % Button - {stretch,1}]}, - {packer_y,[{stretch,2}, - {stretch,1}, - {stretch,1}, - {stretch,1}]}]), - - gse:label(F12, [{pack_xy,{{2,6},1}}, - {label,{text,"Trace output options:"}}, - {font,Font} | ?LBLOPTS]), - gse:named_radiobutton(trace_in_window, F12, - [{pack_xy,{{2,6},2}}, - {group, trace_dest}, - {label,{text,"In window"}}, - {font,Font} | ?BTNOPTS]), - gse:named_radiobutton(trace_to_file, F12, - [{pack_xy,{2,3}}, - {group, trace_dest}, - {label,{text,"To file"}}, - {font,Font} | ?BTNOPTS]), - gse:named_entry(trace_file, F12, [{pack_xy,{4,3}}, {font,Font}]), - gse:named_button(trace_file_browse, F12, - [{pack_xy,{6,3}}, - {label,{text," Browse..."}}, - {font,Font} | ?BTNOPTS]), - - F13 = gse:frame(?TOP_FRAME, [{bw,3}, - {pack_xy,{{1,2},3}}, - {packer_x,[{stretch, 1}, - {fixed, 60}, - {stretch, 1}, - {fixed, 60}, - {stretch, 1}]}, - {packer_y,[{stretch,1}, - {fixed, 30}, - {stretch,1}]}]), - - gse:named_button(ok_button, F13, [{pack_xy,{2,2}}, - {label,{text,"OK"}}, - {font,Font}]), - gse:named_button(cancel_button, F13, [{pack_xy,{4,2}}, - {label,{text,"Cancel"}}, - {font,Font}]). - -update_window_from_options(Options) -> - - %% Trace output - gse:config(trace_send, [{select,Options#trace_options.send}]), - gse:config(trace_receive, - [{select,Options#trace_options.treceive}]), - gse:config(trace_functions, - [{select,Options#trace_options.functions}]), - gse:config(trace_events, [{select,Options#trace_options.events}]), - - %% Trace inheritance - case (Options#trace_options.inherit_on_all_spawn or - Options#trace_options.inherit_on_1st_spawn) of - true -> - gse:select(trace_spawn), - gse:config(trace_spawn_all, - [{select,Options#trace_options.inherit_on_all_spawn}]), - gse:config(trace_spawn_first, - [{select,Options#trace_options.inherit_on_1st_spawn}]); - false -> - lists:foreach(fun(X) -> gse:disable(X) end, - [trace_spawn_all,trace_spawn_first]) - end, - - case (Options#trace_options.inherit_on_all_link or - Options#trace_options.inherit_on_1st_link) of - true -> gse:select(trace_link), - gse:config(trace_link_all, - [{select,Options#trace_options.inherit_on_all_link}]), - gse:config(trace_link_first, - [{select, Options#trace_options.inherit_on_1st_link}]); - false -> - lists:foreach(fun(X) -> gse:disable(X) end, - [trace_link_all,trace_link_first]) - end, - - %% Trace ouput destinations - gse:config(trace_in_window, - [{select,(not Options#trace_options.to_file)}]), - - gse:config(trace_to_file, [{select,Options#trace_options.to_file}]), - gse:config(trace_file, [{text,Options#trace_options.file}]), - case Options#trace_options.to_file of - true -> - ok; - false -> - lists:foreach(fun(X) -> gse:disable(X) end, - [trace_file, trace_file_browse]) - end. - -get_options_from_window() -> - #trace_options{send = gse:read(trace_send,select), - treceive = gse:read(trace_receive,select), - functions = gse:read(trace_functions,select), - events = gse:read(trace_events,select), - inherit_on_1st_spawn = gse:read(trace_spawn_first,select), - inherit_on_all_spawn = gse:read(trace_spawn_all,select), - inherit_on_1st_link = gse:read(trace_link_first,select), - inherit_on_all_link = gse:read(trace_link_all,select), - to_file = gse:read(trace_to_file,select), - file = gse:read(trace_file,text)}. - -group_radio(Value, Default, GroupList) -> - case Value of - true -> - gse:select(Default), - lists:foreach(fun(X) -> gse:enable(X) end, GroupList); - false -> - lists:foreach(fun(X) -> gse:deselect(X) end, GroupList), - lists:foreach(fun(X) -> gse:disable(X) end, GroupList) - end. - -%%--read_from_file/(File)----------------------------------------------- -%% Returns the options saved in File. -%% If no options can be found, then the default options are -%% returned. - -read_from_file(File) -> - case file:consult(File) of - {ok, [Term]} -> - if - is_record(Term, trace_options) -> - {ok, Term}; - true -> - {error, "unexpected contents", #trace_options{}} - end; - {ok, _Terms} -> - {error, "unexpected contents", #trace_options{}}; - {error, Tuple} when is_tuple(Tuple) -> % {Line,Mod,Term} - {error, "erroneous contents", #trace_options{}}; - {error, _Posix} -> - %% The most probable reason is that the file does not - %% exist, this is not an error so we simply return - %% the default trace options instead - {ok, #trace_options{}} - end. - -%%--save_to_file(Options, File)----------------------------------------- - -save_to_file(Options, File) -> - case file:open(File, [write]) of - {ok, Fd} -> - {{Year,Month,Day},{H,M,S}} = calendar:local_time(), - io:format(Fd, "%%%~n", []), - io:format(Fd, "%%% File: ~s~n", [File]), - io:format(Fd, "%%% Date: ~w-~2..0w-~2..0w, ~2..0w:~2..0w:~2..0w~n", - [Year,Month,Day,H,M,S]), - io:format(Fd, "%%%~n", []), - io:format(Fd, "%%% This file was created by Pman. ~n", []), - io:format(Fd, "%%%~n", []), - io:format(Fd, "%%% DO NOT EDIT! ~n", []), - io:format(Fd, "%%%~n", []), - io:format(Fd, "%%%~n", []), - io:format(Fd, "~p.~n", [Options]), - file:close(Fd), - ok; - {error, Posix} -> - {error, file:format_error(Posix)} - end. diff --git a/lib/pman/src/pman_options.hrl b/lib/pman/src/pman_options.hrl deleted file mode 100644 index 047b9866c3..0000000000 --- a/lib/pman/src/pman_options.hrl +++ /dev/null @@ -1,34 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% - -%% -%% An options-record contains the return data from the option dialog. -%% - --record(trace_options, {send=true, - treceive=true, - functions=true, - events=true, - to_file=false, - file="", - inherit_on_1st_spawn=false, - inherit_on_all_spawn=true, - inherit_on_1st_link=false, - inherit_on_all_link=true}). - diff --git a/lib/pman/src/pman_process.erl b/lib/pman/src/pman_process.erl deleted file mode 100644 index 276407a0f1..0000000000 --- a/lib/pman/src/pman_process.erl +++ /dev/null @@ -1,317 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%---------------------------------------------------------------------- -%% Purpose : A front-end to the erlang:process_info() functions, that -%% can handle processes on different nodes in a transparent -%% way. -%% Also some convenience functions for process info, as well -%% as some application specific functions for process -%% classification. -%%---------------------------------------------------------------------- - --module(pman_process). - --export([pinfo/1, pinfo/2, - r_processes/1, - function_info/1, - get_name/1, msg/1, reds/1, psize/1, - is_running/1, - is_pid_or_shell/1, - get_pid/1, - is_system_process/1, - is_hidden_by_module/2 - ]). - -%% List of registered name that will make a prodcess a "SYSTEM"-process --define(SYSTEM_REG_NAMES, - [ - %% kernel - application_controller, - erl_reply, - auth, - boot_server, - code_server, - disk_log_server, - disk_log_sup, - erl_prim_loader, - error_logger, - file_server_2, - fixtable_server, - global_group, - global_name_server, - heart, - inet_gethost_native, - inet_gethost_native_sup, - init, - kernel_config, - kernel_safe_sup, - kernel_sup, - net_kernel, - net_sup, - rex, - user, - os_server, - ddll_server, - erl_epmd, - inet_db, - pg2, - - %% stdlib - timer_server, - rsh_starter, - take_over_monitor, - pool_master, - dets, - - %% sasl - sasl_safe_sup, sasl_sup, alarm_handler, overload, - release_handler, - - %% gs - gs_frontend - ]). - -%% List of module:function/arity calls that will make the caller a -%% "SYSTEM"-process. -%% --define(SYSTEM_INIT_CALLS, - [{application_master,init,4}, - {application_master,start_it,4}, - {inet_tcp_dist,accept_loop,2}, - {net_kernel,ticker,2}, - {supervisor_bridge,user_sup,1}, - {user_drv,server,2}, - {group,server,3}, - {kernel_config,init,1}, - {inet_tcp_dist,do_accept,6}, - {inet_tcp_dist,do_setup,6}, - {pman_main,init,2}, - {pman_buf_printer,init,2}, - {pman_buf_converter,init,2}, - {pman_buf_buffer,init,1}, - {gstk,init,1}, - {gstk_port_handler,init,2}, - {gstk,worker_init,1} - ]). - -%% List of module:function/arity calls that will make the executing -%% process a "SYSTEM"-process. --define(SYSTEM_RUNNING_CALLS, - [{file_io_server,server_loop,1}, - {global,loop_the_locker,1}, - {global,collect_deletions,2}, - {global,loop_the_registrar,0}, - {gs_frontend,request,2}, - {shell,get_command1,5}, - {shell,eval_loop,3}, - {io,wait_io_mon_reply,2}, - {pman_module_info,loop,1}, - {pman_options,dialog,3}, - {pman_options,loop,1}, - {pman_relay_server,loop,1}, - {pman_shell,monitor_loop,1}, - {pman_shell,safe_loop,2} - ]). - -%% pinfo(Pid) -> [{Item, Info}] | undefined -%% pinfo(Pid, Item) -> Info | undefined -%% A version of process_info/1 that handles pid on remote nodes as well. -pinfo({_, Pid}) -> % Handle internal process format - pinfo(Pid); -pinfo(Pid) when node(Pid)==node() -> - process_info(Pid); -pinfo(Pid) -> - case rpc:call(node(Pid), erlang, process_info, [Pid]) of - {badrpc, _} -> undefined; - Res -> Res - end. - -pinfo({_, Pid}, Item) -> % Handle internal process format - pinfo(Pid, Item); -pinfo(Pid, Item) when node(Pid)==node() -> - case process_info(Pid, Item) of - {Item, Info} -> Info; - "" -> ""; % Item == registered_name - undefined -> undefined - end; -pinfo(Pid, Item) -> - case rpc:call(node(Pid), erlang, process_info, [Pid, Item]) of - {badrpc, _} -> undefined; - {Item, Info} -> Info; - "" -> ""; % Item == registered_name - undefined -> undefined - end. - -%% function_info(Pid) -> {M, F, A} -%% Returns the initial function for the specified process. -function_info(Pid) -> - case pinfo(Pid, current_function) of - {Module, Function, Arity} -> - {Module, Function, Arity}; - undefined -> - {unknown, unknown, 0} - end. - -%% r_processes(Node) -> Pids -%% Return a list of all processes at Node. -%% -%% If there is a problem with getting information from a remote -%% node, an empty list is returned. -r_processes(Node) -> - ordsets:from_list(r_processes1(Node)). - -r_processes1(Node) -> - if - Node==node() -> - processes(); - true -> - case rpc:block_call(Node, erlang, processes, []) of - {badrpc, _} -> - []; - Pids -> Pids - end - end. - -%% is_running(Object) -> {true, {shell,Pid}} | {true, Pid} | false -%% Object = {shell, Pid} | {link, Pid, ?} | Pid -is_running({shell,Pid}) -> - case is_running(Pid) of - {true,Pid} -> - {true,{shell,Pid}}; - false -> - false - end; -is_running({link,Pid,_}) -> - is_running(Pid); -is_running(Pid) -> - case is_pid_or_shell(Pid) of - true -> - case pinfo(Pid) of - undefined -> false; - _PInfo -> {true, Pid} - end; - false -> - false - end. - -%% is_pid_or_shell(Object) -> bool() -%% Checks if the argument is an pid or a tuple {shell, Pid}. -is_pid_or_shell({shell,Pid}) when is_pid(Pid) -> - true; -is_pid_or_shell(Pid) when is_pid(Pid) -> - true; -is_pid_or_shell(_) -> - false. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% get_pid/1 - returns the Pid of the object provided that -%% it is a proper process specifier. -%% -%% Arguments: -%% Object A process specifier -%% -%% Returns: -%% The Pid. - -get_pid({shell,Pid}) -> - Pid; -get_pid(Pid) when is_pid(Pid) -> - Pid. - -%% is_system_process(Pid) -> bool() -%% Returns true if Pid is a "system process". -%% This is a prototype version, use file configuration later. -is_system_process(Pid) -> - catch is_system_process2(Pid). - -is_system_process2(Pid) -> - - %% Test if the registered name is a system registered name - case pinfo(Pid, registered_name) of - undefined -> ignore; - "" -> ignore; - Name -> - case lists:member(Name, ?SYSTEM_REG_NAMES) of - true -> throw(true); - false -> ignore - end - end, - - %% Test if the start specification is a "system start function" - MFAi = case pinfo(Pid, initial_call) of - {proc_lib, init_p, 5} -> - proc_lib:translate_initial_call(Pid); % {M,F,A} | Fun - Res -> Res % {M,F,A} | undefined - end, - case lists:member(MFAi, ?SYSTEM_INIT_CALLS) of - true -> throw(true); - false -> ignore - end, - - %% Test if the running specification is a "system running function" - case pinfo(Pid, current_function) of - undefined -> false; - MFAc -> - lists:member(MFAc, ?SYSTEM_RUNNING_CALLS) - end. - -%% is_hidden_by_module(Pid, Modules) -> bool() -%% Checks if Pid is to be hidden because it executes code from one -%% of Modules -is_hidden_by_module(Pid, Modules) -> - case pinfo(Pid, current_function) of - {Module, _Function, _Arity} -> - lists:member(Module, Modules); - undefined -> false - end. - -%% get_name(Pid) -> Name | " " -%% Returns the registered name of a process, if any, or " " otherwise. -get_name(Pid) -> - case pinfo(Pid, registered_name) of - undefined -> " "; - "" -> " "; - Name -> Name - end. - -%% msg(Pid) -> int() -msg(Pid) -> - case pinfo(Pid, messages) of - undefined -> 0; - Msgs -> length(Msgs) - end. - -%% reds(Pid) -> int() -reds(Pid) -> - case pinfo(Pid, reductions) of - undefined -> 0; - Reds -> Reds - end. - -%% psize(Pid) -> int() -%% Returns the total process size (stack + heap). -psize(Pid) -> - Stack = pinfo(Pid, stack_size), - Heap = pinfo(Pid, heap_size), - case {Heap, Stack} of - {undefined, undefined} -> 0; - {undefined, Sz} -> Sz; - {Sz, undefined} -> Sz; - {Sz0, Sz1} -> Sz0 + Sz1 - end. diff --git a/lib/pman/src/pman_relay.erl b/lib/pman/src/pman_relay.erl deleted file mode 100644 index 289765492f..0000000000 --- a/lib/pman/src/pman_relay.erl +++ /dev/null @@ -1,127 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%---------------------------------------------------------------------- -%% Purpose : Interface function to relay calls (esp. trace calls) -%% to processes on other nodes. Some of the calls -%% are conditionally relayed. -%%---------------------------------------------------------------------- - --module(pman_relay). - -%%-compile(export_all). --export([start/1, - ok_to_trace/1, - trac/3]). - - --include("assert.hrl"). - -%% -------------------------------------------------------------- -%% DISTRIBUTION -%% -------------------------------------------------------------- -%% (???) Process dictionary alert!!! -%% -%% Since we are not allowed to do erlang:trace/3 on remote -%% processe we create a help process at the remote node to -%% do the job for us -%% --------------------------------------------------------------- - -start(P) when is_pid(P), node(P)/=node() -> - - %% Remote supervision, relaying necessary - - put(relay, spawn_link(node(P), pman_relay_server, init, [self()])); - - -start(_) -> - - %% Local supervision, no relaying - - ignore. - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ok_to_trace/1 - Tests wheter we can actually start tracing -%% a process. -%% -%% Arguments: -%% Pid Pid of the process to trace (on local or remote node) -%% -%% Returns -%% true If it is OK to trace the process -%% false If the process is already traced, or some other -%% condition prevents it from being traced. - -ok_to_trace(Pid) when node(Pid) == node()-> - - %% Local trace, no relaying - - case catch erlang:trace(Pid, false, [send]) of - 1 -> - true; - _Otherwise -> - false - end; -ok_to_trace(Pid) -> - - %% Remote trace, relaying necessary - - PidRelay = get(relay), - PidRelay ! {ok_to_trace, self(), Pid}, - receive - {ok_to_trace, PidRelay} -> - true; - {not_ok_to_trace, PidRelay} -> - false; - _Otherwise -> - ?ALWAYS_ASSERT("Unexpected message from relay process") - after - 5000 -> - false - end. - - - - - - -%% --------------------------------------------------------------- -%% Possibly send a request to do tracing to a remote node. -%% --------------------------------------------------------------- - -trac(Pid, How, Flag) when node(Pid) == node() -> - - %% Local trace, no relaying necessary - - - case catch erlang:trace(Pid, How, Flag) of - 1 -> ok; - _ -> pman_win:format("** Illegal trace request ** \n", []) - end; - -trac(Pid, How, Flag) -> - - - - %% Remote trace, relaying necessary - - get(relay) ! {self(), erlang, trace, [Pid, How, Flag]}. - diff --git a/lib/pman/src/pman_relay_server.erl b/lib/pman/src/pman_relay_server.erl deleted file mode 100644 index 2fcbb663bc..0000000000 --- a/lib/pman/src/pman_relay_server.erl +++ /dev/null @@ -1,57 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%%%---------------------------------------------------------------------- -%%% Purpose : Relay server code. -%%%---------------------------------------------------------------------- - --module(pman_relay_server). - -%%-compile(export_all). --export([init/1]). - - - -init(P) -> - process_flag(trap_exit, true), - - loop(P). - -loop(P) -> - receive - {ok_to_trace, PidSender, PidToTrace} -> - case catch erlang:trace(PidToTrace, false, [send]) of - 1 -> - PidSender ! {ok_to_trace, self()}, - loop(P); - _Otherwise -> - PidSender ! {not_ok_to_trace, self()} - end; - - {P, M,F,A} -> - case catch apply(M, F, A) of - 1 -> ok; - _Other -> P ! {print, "** Illegal trace request **\n", []} - end, - loop(P); - {'EXIT', P, _Reason} -> - exit(normal); - Other -> %% Here is the normal case for trace i/o - P ! Other, - loop(P) - end. diff --git a/lib/pman/src/pman_shell.erl b/lib/pman/src/pman_shell.erl deleted file mode 100644 index 2d2b8ce000..0000000000 --- a/lib/pman/src/pman_shell.erl +++ /dev/null @@ -1,827 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%% -%% --------------------------------------------------------------- -%% Purpose: Create a trace window with process -%% information or a help window with information -%% about pman. -%% -%% --------------------------------------------------------------- - --module(pman_shell). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,start,1}}]). - -%% --------------------------------------------------------------- -%% The user interface exports -%% --------------------------------------------------------------- - --export([start_list/3, - start/2, - start/1, - find_shell/0]). - -%% --------------------------------------------------------------- -%% Includes -%% --------------------------------------------------------------- --include("assert.hrl"). --include("pman_options.hrl"). --include("pman_buf.hrl"). - - -%% --------------------------------------------------------------- -%% Internal record declarations -%% --------------------------------------------------------------- --record(pman_shell,{win, - editor, - pid, - buffer, - father, - shell_flag, % boolean, true for shell - trace_options, % Keeps trace options - db}). % DB for trace windows - - -%% -%% Constants -%% - --define (PMAN_DB, pman_db). % The pman db for trace windows - - - -%% --------------------------------------------------------------- -%% start/1, start/2 -%% -%% Starts a new trace shell process. -%% -%% start(Pid, DefaultOptions) -%% Pid The Pid of the process to trace -%% DefaultOptions The default trace options passed along from -%% the calling process. -%% -%% -%% start(Pid) -%% Pid The Pid of the process to trace -%% -%% start(Pid) starts without using any default options except for those -%% hardwired into the application. (See pman_options.hrl). -%% -%% -%% Return: Both functions return a process id -%% --------------------------------------------------------------- - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% start_list/3 - Starts a trace window for each of the processes -%% in the list - -start_list(LIPid, Father, Options) -> - StartFun = fun(Pid) -> - start({Pid,Father}, Options) - end, - lists:foreach(StartFun, LIPid). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% start/1 - Starts a trace window for the specified Pid. -%% - -start(Pid) -> - start(Pid, #trace_options{}). - -%% -%% start/2 -%% - -start(Pid,DefaultOptions) when is_pid(Pid) -> - start({Pid,self()}, DefaultOptions); - -start(Var,DefaultOptions) -> - Db = db_start(), - spawn_link(fun() -> internal(Var, DefaultOptions, Db) end). - -%% --------------------------------------------------------------- -%% Initialize the enviroment for tracing/viewing Object -%% -%% Object can either be {shell,Shell} or a Pid. -%% The main loop is then called, which handles trace and event -%% requests. The window dies whenever Supervisor dies, while -%% message windows die whenever their parent dies. -%% --------------------------------------------------------------- - -internal({Object,Supervisor}, DefaultOptions, Db) -> - - %% (???) This call will cause minor problems when the window has been - %% invoked with proc/1 from for instance the shell. The shell - %% does not handle the exit-signals, so it will exit - %% when the window is exited. - - - %% First check that no other process is tracing the process we want - %% to trace. There is no well defined way of doing this, so the - %% code below is used instead. (???) - - pman_relay:start(Object), %(???) Uses proc. dict. - - Pid = pman_process:get_pid(Object), - - case pman_relay:ok_to_trace(Pid) of - - %% Tracing cannot be performed on the specified process - - false -> - T = lists:flatten(io_lib:format("ERROR: Process ~p is already being~ntraced by some other process.~nOr there may be a problem communicating with it.",[Pid])), - tool_utils:notify(gs:start(),T), - exit(quit); - - %% Tracing can be performed, go ahead! - - true -> - - case db_insert_key (Db, Pid) of - true -> - - link(Supervisor), - process_flag(trap_exit, true), - - case catch pman_win:window(Object) of - {'EXIT', badrpc} -> - T = "ERROR: Could not access node", - pman_win:dialog_window(gs:start(),T); - {'EXIT', dead} -> - T = "ERROR: The process is dead", - pman_win:dialog_window(gs:start(),T); - {'EXIT',_W} -> - T = "ERROR: Untracable process \n(unexpected EXIT reason)", - pman_win:dialog_window(gs:start(),T); - {Win, Ed} -> - init_monitor_loop(Win, - Ed, - Object, - Supervisor, - DefaultOptions, - Db) - end; - - false -> - T = lists:flatten(io_lib:format("ERROR: Process ~p is already being~ntraced by some other process.",[Pid])), - tool_utils:notify(gs:start(),T), - exit(quit); - - Error -> - Error - end - - end. - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% init_monitor_loop/5 - -init_monitor_loop(Win,Ed,Object,Supervisor, DefaultOptions, Db) -> - - process_flag(priority, max), - - %% Most default options come from the main window. Now we must set - %% the default file name to something that is shows what process - %% is being traced. - - %% Find out an appropriate file name to write the trace output - %% to if the output should go to a file. - - FileName = case pman_process:is_pid_or_shell(Object) of - true -> - default_file_name(pman_process:get_pid(Object)); - false -> - "NoName" - end, - - Buff = pman_buf:start(Ed, FileName), - - case pman_process:is_running(Object) of - - %% We are tracing a shell process. - {true,{shell,Pid}} -> - safe_link(Pid), - NewDefaultOptions = - DefaultOptions#trace_options{file=FileName}, - perform_option_changes(Pid, NewDefaultOptions, Buff), - monitor_loop(#pman_shell{win=Win, editor=Ed, pid=Pid, buffer=Buff, - father = Supervisor, - shell_flag = true, - trace_options = NewDefaultOptions, - db = Db}); - - %% We are tracing an ordinary process. - {true,Pid} -> - safe_link(Pid), - NewDefaultOptions = - DefaultOptions#trace_options{file=FileName}, - perform_option_changes(Pid, NewDefaultOptions, Buff), - monitor_loop(#pman_shell{win=Win, editor=Ed, pid=Pid, buffer=Buff, - father = Supervisor, - shell_flag = false, - trace_options = NewDefaultOptions, - db = Db}); - - %% The process being traced is dead. - false -> - monitor_loop(#pman_shell{win=Win, editor=Ed, pid=nopid, - buffer=Buff, - father = Supervisor, - shell_flag = false, - trace_options= DefaultOptions, - db = Db}) - end. - -%% ---------------------------------------------------------------- -%% What is the Pid of the shell on our node? -%% ---------------------------------------------------------------- - -find_shell() -> - case shell:whereis_evaluator() of - undefined -> % noshell - noshell; - Pid -> - Pid - end. - -%% --------------------------------------------------------------- -%% Functions called in case of an exit message -%% --------------------------------------------------------------- - -clean_up(Win, Buff,Pid) -> - - %% (???) Unlinks the traced process, but since we are using a safe link - %% it is probably unnecessary. - - safe_unlink(Pid), - - %% Kill helper processes - - exit(Buff#buffer.converter, topquit), - exit(Buff#buffer.buffer, topquit), - - gs:destroy(Win). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% exit_cmd/3 - Takes care of the necessary details when -%% a linked process terminates. - - -exit_cmd(Pid,_Reason, State) -> - case State#pman_shell.shell_flag of - - %% This clause handles the case when a shell process dies. - %% Since it is restarted and the intention is to continue tracing - %% the restarted shell process, we need to handle it separately by - %% finding the new shell process. - true -> - - NewShell = find_shell(), - safe_link(NewShell), - pman_relay:start(NewShell), - - %% Update the window title with the new PID - Title = pman_win:title({shell, NewShell}), - Win = State#pman_shell.win, - gse:config(Win,[{title,Title}]), - - pman_relay:trac(NewShell, true, flags()), - - B = State#pman_shell.buffer, - B#buffer.converter!{raw,[{shell_died, Pid, NewShell}]}, - - - - State#pman_shell{pid=NewShell}; - - %% This clause handles the case when a traced process that is - %% not a shell process dies. - false -> - - B = State#pman_shell.buffer, - B#buffer.converter!{raw,[{died, Pid}]}, - - lists:foreach(fun(X) -> gse:disable(X) end, - ['Options', - 'Kill', - 'LinksMenu']), - State#pman_shell{pid=undefined} - end. - -flags() -> - [send, 'receive', call, procs, - set_on_spawn, set_on_first_spawn, set_on_link, set_on_first_link]. - -options_to_flaglists(Options) -> - AssocList = - [{Options#trace_options.send, send}, - {Options#trace_options.treceive, 'receive'}, - {Options#trace_options.inherit_on_1st_spawn, set_on_first_spawn}, - {Options#trace_options.inherit_on_all_spawn, set_on_spawn}, - {Options#trace_options.inherit_on_1st_link, set_on_first_link}, - {Options#trace_options.inherit_on_all_link, set_on_link}, - {Options#trace_options.events, procs}, - {Options#trace_options.functions,call}], - - TrueFun = fun ({Option,Flag}) -> - case Option of - true -> Flag; - _Otherwise -> false - end - end, - TrueFlags = mapfilter(TrueFun, AssocList), - - FalseFun = fun ({Option,Flag}) -> - case Option of - false -> Flag; - _Otherwise -> false - end - end, - FalseFlags = mapfilter(FalseFun, AssocList), - {TrueFlags,FalseFlags}. - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% mapfilter/2 - Combines the functionality of lists:map and -%% lists:filter. mapfilter applies the function argument to -%% each element in the list. All returned values that are -%% not false will occur in the resulting list. -%% -%% Arguments: -%% Fun A fun that takes one argument -%% List A list. Each element will become an argument to Fun. -%% -%% Returns: -%% A list of all results from the map operation that are not false. -%% - -mapfilter(Fun,[E|Es]) -> - case apply(Fun,[E]) of - false -> - mapfilter(Fun,Es); - Value -> [Value | mapfilter(Fun,Es)] - end; -mapfilter(_Fun, []) -> []. - - - -perform_option_changes(Pid,Options,Buffer) -> - - %% Notify the trace output functionality - %% if the destination is supposed to go to a file... - - case Options#trace_options.to_file of - true -> - FName = Options#trace_options.file, - Buffer#buffer.converter!{file,FName}; - false -> - done - end, - - %%...then set the trace flags of the traced process - - {OnFlags, OffFlags} = options_to_flaglists(Options), - case catch begin - - %% (???) Note that the following calls cannot actually fail - %% This may be a problem. And the catch appears unnecessary - %% However, it may become necessary to let the - %% pman_relay:trac/3 function retrun appropriate values. - pman_relay:trac(Pid,true, OnFlags), - pman_relay:trac(Pid,false, OffFlags) - end of - true -> - ok; - _ -> pman_win:format("** Illegal trace request ** \n", []) - end. - - - - - - -%% --------------------------------------------------------------- -%% Take care of the command executed by the user. - -execute_cmd(Cmd,Shell_data) -> - Window = Shell_data#pman_shell.win, - Editor = Shell_data#pman_shell.editor, - Shell = Shell_data#pman_shell.pid, - Buffer = Shell_data#pman_shell.buffer, - TraceOptions = Shell_data#pman_shell.trace_options, - - case Cmd of - 'Close' -> - db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid), - clean_up(Window, Buffer, Shell), - exit(quit); - 'Destroy' -> - db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid), - exit(Buffer#buffer.buffer,topquit), - safe_unlink(Shell), - exit(Buffer#buffer.converter,topquit), - exit(Buffer#buffer.buffer,topquit), - exit(quit); - - 'Clear' when is_pid(Shell) -> - New_buffer = pman_buf:clear(Buffer,pman_win:display(Shell), - TraceOptions#trace_options.file), - Shell_data#pman_shell{buffer = New_buffer}; - 'Save buffer' -> - DefaultFile = "Pman_buffer." ++ default_file_name(Shell), - Result = tool_utils:file_dialog([{type,save}, - {file,DefaultFile}]), - case Result of - {ok, UserFile, _State} -> - Buffer#buffer.buffer!{save_buffer,UserFile}; - {error,_Reason} -> - true - end, - Shell_data; - 'Help' -> - HelpFile = filename:join([code:lib_dir(pman), "doc", "html", "index.html"]), - tool_utils:open_help(gs:start([{kernel, true}]), HelpFile), - Shell_data; - 'Kill' when is_pid(Shell) -> - exit(Buffer#buffer.converter,killed), - exit(Buffer#buffer.buffer,killed), - lists:foreach(fun(X) -> gse:disable(X) end, - ['TraceMenu', - 'Clear']), - catch exit(Shell, kill), - Shell_data#pman_shell{pid = undefined}; - 'All Links' when is_pid(Shell) -> - LIPid = pman_process:pinfo(Shell, links), - ?ALWAYS_ASSERT("Just a brutal test"), - start_list(LIPid, - Shell_data#pman_shell.father, - Shell_data#pman_shell.trace_options), - Shell_data; - 'Module' when is_pid(Shell) -> - {ModuleName,_,_} = pman_process:function_info(Shell), - pman_module_info:start(ModuleName), - Shell_data; - 'Options' when is_pid(Shell) -> - case pman_options:dialog(Window, - "Trace Options for Process", - TraceOptions) of - {error, _Reason} -> - Shell_data; - Options -> - perform_option_changes(Shell, Options, Buffer), - Shell_data#pman_shell{trace_options=Options} - end; - - {trac,Choice,Bool} when is_pid(Shell) -> - pman_relay:trac(Shell, Bool, [Choice]), - Shell_data; - - - {configure,{X,Y}} -> - configure (Editor, X, Y), - Shell_data; - - Pid when is_pid(Pid) -> - pman_shell:start({Pid, Shell_data#pman_shell.father}, - Shell_data#pman_shell.trace_options), - Shell_data; - _Other -> - ?ALWAYS_ASSERT("Received unexpected event"), - Shell_data - end. - - -default_file_name(Shell) when is_pid(Shell) -> - [A,B,C] = string:tokens(pid_to_list(Shell),[$.,$<,$>]), - "pman_trace." ++ A ++ "_" ++ B ++ "_" ++ C; -default_file_name(_OTHER) -> - "shell". - - - - - -%% Key accellerators - -key(e) -> 'Clear'; -key(s) -> 'Save buffer'; -key(c) -> 'Close'; -key(a) -> 'All'; -key(r) -> 'Reset'; -key(m) -> 'Module'; -key(l) -> 'All Links'; -key(k) -> 'Kill'; -key(h) -> 'Help'; -key(z) -> 'Close'; -key(O) -> O. - - - -%% --------------------------------------------------------------- -%% The main loop takes care of data coming in from the traces, as -%% well as exit signals from proceses we are monitoring. Events -%% caused by the user or window manager are also handled here. -%% --------------------------------------------------------------- - - -monitor_loop(Shell_data) -> - receive - - %% WM destroy - {gs,_Window,destroy,[],[]} -> %%Avoid links menus - execute_cmd('Destroy', Shell_data); - - - %% Handle EXIT signal from parent process - {'EXIT', _Pid, topquit} -> - clean_up(Shell_data#pman_shell.win, - Shell_data#pman_shell.buffer, - Shell_data#pman_shell.pid), - exit(topquit); - - %% (???) Ignore "stray" EXIT signal from converter - {'EXIT', _Pid, win_killed} -> - monitor_loop(Shell_data); - - - %% Handle EXIT signal from safely linked Pid - %% This is received when a traced process dies. - {'SAFE_EXIT', Pid, Reason} -> - New_Shell_data = exit_cmd(Pid, Reason,Shell_data ), - monitor_loop(New_Shell_data); - - - %% Handle EXIT signal from processes where we expect - %% some EXIT signals, such as the file_dialog opened, and possibly - %% others. - - {'EXIT', _Pid, _Reason} -> - monitor_loop(Shell_data); - - %% Handle incoming trace messages - Message when is_tuple(Message) , element(1,Message) == trace-> - {L, Suspended} = collect_tracs([Message]), - Buffer = Shell_data#pman_shell.buffer, - Buffer#buffer.converter!{raw,L}, - lists:foreach(fun(P) -> erlang:resume_process(P) end, Suspended), - monitor_loop(Shell_data); - - - %% All other messages on the form {...,...,...} - Message when is_tuple(Message) -> - do_link_stuff(Shell_data), - - New_Shell_data = process_gs_event(Message,Shell_data), - monitor_loop(New_Shell_data); - - %% Catch all for unexpected messages - _Anything -> - ?ALWAYS_ASSERT("Received unexpected event"), - monitor_loop(Shell_data) - - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% process_event/1 - Error handling wrapper for gs_cmd - -process_gs_event(Message, Shell_data) -> - case catch gs_cmd(Message,Shell_data) of - - %% - %% Error exits from gs_cmd - - {'EXIT', badrpc} -> - Text = "\nERROR: Could not access node", - pman_win:msg_win(Text), - Shell_data; - {'EXIT', dead} -> - Text = "\nERROR: The process is dead", - pman_win:msg_win(Text), - Shell_data; - - %% A controlled application initiated termination - {'EXIT', quit} -> - db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid), - exit(quit); - - - {'EXIT',Reason} -> - db_delete_key (Shell_data#pman_shell.db, Shell_data#pman_shell.pid), - io:format("Debug info, Reason: ~p~n",[Reason]), - ?ALWAYS_ASSERT("Unexpected EXIT reason"), - exit({unexpected_EXIT_reason,Reason}); - - %% - %% "Proper" exits from gs_cmd - - New_Shell_data -> - New_Shell_data - end. - - - -gs_cmd(Cmd, Shell_data) -> - case Cmd of - - %%User Command - {gs, Command, click, _Data, _Args} -> - execute_cmd(Command,Shell_data); - - %%Key accellerator - {gs,_Window,keypress,_D,[Key,_,0,1]} -> - execute_cmd(key(Key),Shell_data); - - %%Window Resize - {gs,_Window,configure,_,[X,Y|_]} -> - execute_cmd({configure,{X,Y}},Shell_data); - - - {gs, _Object, _Event, _Data, _Args} -> - ?ALWAYS_ASSERT("Unhandled gs event"), - Shell_data - - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% (???) do_link_stuff/1 - I have no clue. -%% - -do_link_stuff(Shell_data) -> - - %% This appears to be code to execute for adding - %% dynamic links menus. - - case Shell_data#pman_shell.pid of - undefined -> - ok; - Pid -> - case pman_process:pinfo(Pid, links) of - Links when is_list(Links) -> - pman_win:links_menus(Links); - undefined -> - ok - end - end. - - -%% (???) Process dictionary used to safe Pid-Pid pairs. -%% -%% safe_link/1 - Spawns a process, that links to the Pid, and sends -%% a message to the caller when the linked process dies. -%% -%% Since we (think we) need to link to the traced process, we want -%% to do it in a way that has the smallest possible risk. The process -%% that links to the Pid is small and simple, which is safer than if -%% the calling process would link directly to the Pid. - -safe_link(Pid) when is_pid(Pid) -> - Self = self(), - PidSafe = spawn_link(fun() -> safe_init(Self, Pid) end), - put(Pid, PidSafe). - - -%% safe_unlink/1 - Removes a safe link -%% - -safe_unlink(Pid) when is_pid(Pid) -> - PidSafe = get(Pid), - PidSafe ! {unlink, self(), Pid}, - erase(Pid); - -safe_unlink(_Anything)-> - true. - -%% safe_init/2 - Initialize a simple receive loop that controls safe linking -%% to application processes. -%% -safe_init(Caller, Pid) -> - - process_flag(trap_exit, true), - link(Pid), - - safe_loop(Caller, Pid). - - -%% safe_loop/2 - Simply waits for an exit signal from the linked Pid, -%% all other messages are disregarded. -%% - - -safe_loop(Caller, Pid) -> - receive - %% Linked process dies - {'EXIT' , Pid, Reason} -> - Caller ! {'SAFE_EXIT', Pid, Reason}; - - %% Caller dies - {'EXIT', Caller, _Reason} -> - unlink(Pid); - - - %% Unlink request - {unlink, Caller, Pid} -> - unlink(Pid); - - %% Ignore everything else - _Anything -> - safe_loop(Caller, Pid) - end. - - - -configure (Editor, W, H) -> - gs:config (Editor, [{width, W - 3}, - {height, H - 40}]). - - - - -%%% The DB is used to avoid multiple trace windows -%%% of the same process. - -%%% db_start /0 -%%% - -db_start() -> - case ets:info(?PMAN_DB) of - undefined -> ets:new(?PMAN_DB, [public, named_table]); - _ -> ?PMAN_DB - end. - - - -%%% db_insert_key /2 -%%% - -db_insert_key (Db, Pid) -> - case ets:lookup (Db, Pid) of - [] -> - case catch ets:insert (Db, {Pid}) of - true -> - true; - - _Error -> - error_insert_db - end; - - _already_exists -> - false - end. - - - -%%% db_delete_key /2 -%%% - -db_delete_key (Db, Pid) -> - ets:delete (Db, Pid). - - -%% Function to collect all trace messages in the receive queue. -%% Returns: {Messages,SuspendedProcesses} - -collect_tracs(Ack) -> collect_tracs(Ack, ordsets:new()). - -collect_tracs(Ack, Procs) -> - receive - Trac when is_tuple(Trac), element(1, Trac) == trace -> - P = suspend(Trac, Procs), - collect_tracs([Trac | Ack], P) - after 0 -> - {lists:reverse(Ack), ordsets:to_list(Procs)} - end. - -suspend({trace,From,call,_Func}, Suspended) when node(From) == node() -> - case ordsets:is_element(From, Suspended) of - true -> Suspended; - false -> - case (catch erlang:suspend_process(From)) of - true -> - ordsets:add_element(From, Suspended); - _ -> - Suspended - end - end; -suspend(_Other, Suspended) -> Suspended. diff --git a/lib/pman/src/pman_tool.erl b/lib/pman/src/pman_tool.erl deleted file mode 100644 index 36382745af..0000000000 --- a/lib/pman/src/pman_tool.erl +++ /dev/null @@ -1,146 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(pman_tool). --compile([{nowarn_deprecated_function,{gs,read,2}}]). - -%% Listbox selection window - --export([select/3]). - --record(state, {topwin, - frame, - listbox}). - -%% Constants --define(WIN_WIDTH, 350). --define(WIN_HEIGHT, 350). - -select(Win, Title, Choices) -> - Self = self(), - Pid = spawn_link(fun() -> init(Self, Win, Title, Choices) end), - receive - {Pid, Result} -> - Result - end. - -init(Pid, Win, Title, Choices) -> - - %% Create window - State = create_window(Win, Title, Choices), - - gse:map(State#state.topwin), - - %% enter event loop - loop(Pid, Choices, State). - -loop(Pid, Choices, State) -> - receive - {gs, _, destroy, _Data, _Args} -> - Pid ! {self(), cancelled}; - {gs, _, configure, _Data, [W, H|_]} -> - gse:resize(State#state.frame, W, H), - loop(Pid, Choices, State); - {gs, _, click, ok, _Args} -> - case gs:read(State#state.listbox, selection) of - [] -> - Pid ! {self(), cancelled}; - Indices -> - Selection = selection(Indices, Choices), - Pid ! {self(), Selection} - end; - {gs, _, click, cancel, _Args} -> - Pid ! {self(), cancelled}; - {gs, Obj, doubleclick, _Data, _Args} -> - self() ! {gs, Obj, click, ok, []}, - loop(Pid, Choices, State); - _GSEvent -> - loop(Pid, Choices, State) - end. - -selection(Indices, Choices) -> - selection(0, Indices, Choices). - -selection(I, [I|Is], [{Val,_Str}|Vals]) -> - [Val | selection(I+1, Is, Vals)]; -selection(I, [I|Is], [Val|Vals]) -> - [Val | selection(I+1, Is, Vals)]; -selection(_I, [], _Vals) -> - []; -selection(I, Is, [_Val|Vals]) -> - selection(I+1, Is, Vals). - -create_window(Win, Title, Choices) -> - Font = pman_win:font(Win), - - %% Top window and a frame that covers it entirely, to allow - %% usage of the packer for geometry management. - Topwin = gse:window(Win, [{width, ?WIN_WIDTH}, - {height,?WIN_HEIGHT}, - {configure, true}, - {title, Title}]), - Frame = gse:frame(Topwin, [{packer_x,[{stretch,1}, - {stretch,1}]}, - {packer_y,[{stretch,1}, - {stretch,5}, - {stretch,1}]}]), - - %% Caption above the list of items - CaptionTxt = "Select one or more of the following:", - gse:label(Frame, [{pack_x,{1,2}}, - {pack_y,{1,1}}, - {label,{text,CaptionTxt}}, {font,Font}]), - - %% List of selectable items - Listbox = gse:listbox(Frame, [{pack_x,{1,2}}, - {pack_y,{2,2}}, - {selectmode,multiple}, - {doubleclick, true}, - {font,Font}, - {items, str_choices(Choices)}]), - - %% OK and Cancel buttons in a separate frame. - F13 = gse:frame(Frame, [{bw,1}, - {pack_xy,{{1,2},3}}, - {packer_x,[{stretch,1}, - {fixed, 60}, - {stretch,1}, - {fixed, 60}, - {stretch,1}]}, - {packer_y,[{stretch,1}, - {fixed, 30}, - {stretch,1}]}]), - - gse:button(F13, [{pack_xy,{2,2}}, - {label,{text,"OK"}}, {font,Font}, - {data,ok}]), - gse:button(F13, [{pack_xy,{4,2}}, - {label,{text,"Cancel"}}, {font,Font}, - {data,cancel}]), - - gse:resize(Frame, ?WIN_WIDTH, ?WIN_HEIGHT), - #state{topwin=Topwin, frame=Frame, listbox=Listbox}. - -str_choices(Choices) -> - lists:map( - fun({Val, Str}) -> - lists:flatten(io_lib:format("~p: ~s", [Val, Str])); - (Term) -> - lists:flatten(io_lib:format("~p", [Term])) - end, - Choices). diff --git a/lib/pman/src/pman_win.erl b/lib/pman/src/pman_win.erl deleted file mode 100644 index aec7dc4412..0000000000 --- a/lib/pman/src/pman_win.erl +++ /dev/null @@ -1,677 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2013. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -%% ------------------------------------------------------------ -%% Purpose: window management and the gs interface -%% ------------------------------------------------------------ - --module(pman_win). --compile([{nowarn_deprecated_function,{gs,button,2}}, - {nowarn_deprecated_function,{gs,canvas,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,create,4}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,1}}, - {nowarn_deprecated_function,{gs,text,2}}, - {nowarn_deprecated_function,{gs,window,2}}]). - -%% --------------------------------------------------------------- -%% The user interface exports -%% --------------------------------------------------------------- - --export([pman_window/3, window/1, module_data/1, display/1, format/2, - dialog_window/2, configeditor/2, configwin/3, - update/1, update/3, - msg_win/1, title/1, - remove_menu/1, add_menu/3, - change_colour/3, links_menus/1, calc_columnwidths/1]). --export([font/0, font/1]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Constants -%% --include("pman_win.hrl"). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% pman_window/3 - Create a GS window and components for the -%% Pman overview window, the main window. -%% -%% Arguments: -%% Size number of processes -%% HiddenModules list of modules -%% Nodes list of supervised nodes -%% -%% Return: -%% {Win, Grid, Frame, Procnum, W, H} where -%% Win The GS top window -%% Grid The GS grid -%% Procnum Number of displayed processes -%% - -pman_window(Size, _HiddenModules, Nodes) -> - GS = gs:start([{kernel,true}]), - Font = font(GS), - Win_Options = [{title, lists:concat(["Pman: Overview on ",node()])}, - {width, ?WIN_WIDTH}, {height, ?WIN_HEIGHT}, - {destroy, true}, - {keypress,true}], - Win = gs:create(window, GS, Win_Options), - - %% Menu bar - MenuBar = gs:create(menubar, Win, []), - MBFile = gs:create(menubutton, MenuBar, [{label,{text," File "}}, - {font,Font}, - {underline,1}]), - MBView = gs:create(menubutton, MenuBar, [{label,{text, " View "}}, - {font,Font}, - {underline,1}]), - MBTrace = gs:create(menubutton, MenuBar, [{label,{text, " Trace "}}, - {font,Font}, - {underline,1}]), - MBHelp = gs:create(menubutton, MenuBar, [{label, {text, " Help "}}, - {font,Font}, - {side,right}, - {underline,1}]), - - %% Addition of a menu for distribution - add_node_menu(MenuBar, Nodes, Font), - - %% All menu buttons - MenuFile = gs:create(menu, MBFile, []), - MenuView = gs:create(menu, MBView, []), - MenuTrace = gs:create(menu, MBTrace, []), - MenuHelp = gs:create(menu, MBHelp, []), - - %% File menu - gse:named_menuitem('Default Options', MenuFile, - [{label,{text,"Options..."}}, {font,Font}, - {underline,0}]), - gse:named_menuitem('Save Options',MenuFile, - [{label,{text,"Save Options"}}, {font,Font}]), - gse:named_menuitem('Exit', MenuFile, - [{label,{text,"Exit"}}, {font,Font}, - {underline,0}]), - - %% View menu - gse:named_menuitem('Hide All',MenuView, - [{label, {text, "Hide All Processes"}}, - {font,Font}, - {underline,1}]), - - gse:named_menuitem('Hide Modules', MenuView, - [{label, {text, "Hide Modules..."}}, - {font,Font}, - {underline,8}]), - - gse:named_menuitem('Hide Selected Process', MenuView, - [{label, {text, "Hide Selected Process"}}, - {font,Font}, - {underline,2}]), - - gse:named_menuitem('Module',MenuView, - [{label, {text, "Module Info..."}}, {font,Font}, - {underline,7}]), - - gse:named_menuitem('Refresh', MenuView, - [{label, {text, "Refresh"}}, {font,Font}, - {underline,0}]), - - gse:named_menuitem('Show All',MenuView, - [{label, {text, "Show All Processes"}}, - {font,Font}]), - - gse:named_menuitem('Show Selected',MenuView, - [{label, {text, "Show Processes..."}}, - {font,Font}]), - - %% Trace menu - gs:create(menuitem, 'Kill', MenuTrace, [{label,{text, "Kill"}}, - {font,Font}, - {underline,0}]), - - gs:create(menuitem, 'Trace Process', MenuTrace, - [{label, {text, "Trace Selected Process"}}, {font,Font}, - {underline,0}]), - - gs:create(menuitem,'Trace Shell', MenuTrace, - [{label, {text,"Shell Process"}}, {font,Font}, - {underline,0}]), - - %% Help menu - gs:create(menuitem,'Help', MenuHelp, [{label, {text, "Help" }}, - {font,Font}, - {underline,0}]), - - %% Window contents - - %% Geometry managing frame - Frame = gse:frame(Win, [{y,?MENU_HEIGHT}, - {packer_x,[{stretch, 1}]}, - {packer_y,[{stretch,10}, - {fixed,?CHECKBAR_HEIGHT}]}]), - - - - %% Grid - Grid_Options = [ - {pack_x,1}, {pack_y,1}, - {fg,black}, - {vscroll,right},{hscroll,bottom}, - calc_columnwidths(739), - {rows, {1,Size}}], - Grid = gse:grid(Frame,Grid_Options), - - - %% Checkbutton bar at the bottom of the window - - CheckBar = gse:frame(Frame, [{pack_x,1}, - {pack_y,2}, - {packer_x,[{stretch, 2, 100,300}, - {stretch, 2, 100,300}, - {stretch,1}, - {stretch, 2,100,300}]}, - {packer_y,[{stretch,1}]}]), - gse:named_checkbutton('Hide System',CheckBar, - [{pack_xy,{1,1}}, - {justify, left}, - {align,w}, - {width, 200}, - {font, Font}, - {label, {text, "Hide System Processes" }}]), - - gse:named_checkbutton('Auto Hide New',CheckBar, - [{pack_xy,{2,1}}, - {width, 200}, - {justify, left}, - {align,w}, - {font, Font}, - {label, {text, "Auto-Hide New" }}]), - - gse:named_label('Number Hidden',CheckBar, - [{pack_xy,{4,1}}, - {justify, left}, - {align,w}, - {width, 200}, - {font, Font}, - {label, {text, ?CPIDHIDDENTEXT }}]), - - %% Finalize it! - gse:map(Win), - gse:config(Win,[raise]), - gse:config(Win,[{configure,true}]), - - - {Win, Grid, Frame, length(processes())+1, ?WIN_WIDTH, ?WIN_HEIGHT}. - - -%% Calculate columnwidths in respect to the size of the window. - -calc_columnwidths(Width) -> - if - Width =< 739 -> - {columnwidths,[75,215,146,90,105,105]}; - true -> - S = (Width - 75)/(215+146+90+105+105), - {columnwidths,[75,round(215*S),round(146*S),round(90*S), - round(105*S),round(105*S)]} - end. - -%% --------------------------------------------------------------- -%% Create a trace window -%% -%% Process, a process id or an atom -%% -%% Return: A window and a editor -%% --------------------------------------------------------------- - - -window(Process) -> - GS = gs:start([{kernel,true}]), - Font = font(GS), - Win_Options = [{title,title(Process)}, {width,550}, {keypress,true}, - {configure,true}, - {destroy,true},{height, 400}], - Win = gs:create(window,GS,Win_Options), - - MenuBar = gs:create(menubar, Win, []), - - %% File menu - MBFile = gs:create(menubutton,MenuBar,[{label,{text," File "}}, - {font,Font}, - {underline, 1}]), - MenuFile = gs:create(menu, MBFile, []), - make_menus(pman_process:is_running(Process), MenuBar, MenuFile, - Font), - - gse:named_menuitem('Save buffer',MenuFile, - [{label,{text, "Save buffer..."}}, - {font,Font}, - {underline,0}]), - gse:named_menuitem('Close',MenuFile, - [{label, {text, "Close"}}, - {font,Font}, - {underline,0}]), - - - Editor = gs:create(editor,Win,[{x,3}, {y,40}, - {width,546}, {height,348}, - {font,Font}]), - gs:config(Editor, [{keypress, true},{insert, {'end', display(Process)}}]), - gs:config(Editor, [{enable, false},{vscroll, right}, {hscroll, bottom}, - {wrap,none}]), - gs:config(Win, [{map, true}]), - {Win, Editor}. - -%% --------------------------------------------------------------------- -%% Menu Help Fuctions -%% --------------------------------------------------------------------- - - -links_menus(Links) -> - gs:destroy('Links'), - gs:create(menu,'Links','LinksMenu',[]), - Flag = case links_menus(Links,[]) of - [] -> false; - Pids -> - add_menu('Links', Pids, "Trace"), - true - end, - gse:config('LinksMenu',[{enable,Flag}]). - -links_menus([],Pids) -> Pids; -links_menus([Pid|Links],Pids) when is_pid(Pid) -> - links_menus(Links,[Pid|Pids]); -links_menus([_Port|Links],Pids) -> - links_menus(Links,Pids). - - -%% Create the node menu. - -add_node_menu(MenuBar, Nodes, Font) -> - MBNode = gs:create(menubutton, MenuBar, [{label,{text, " Nodes "}}, - {font,Font}, - {underline, 1}]), - gs:create(menu, node, MBNode, []), - add_menu(node, Nodes, "Show", Font), - gse:disable(node()). - - -%% --------------------------------------------------------------------- -%% Add Menus in the list under Menu menuitem. - -add_menu(Menu, Names, Tag) -> - add_menu(Menu, Names, Tag, font()). - -add_menu(_Menu, [], _Tag, _Font) -> ok; -add_menu(Menu, [Name|Names], Tag, Font) -> - Title = io_lib:format("~s ~p",[Tag, Name]), - gs:create(menuitem,Name,Menu,[{label,{text,Title}}, - {font,Font}, - {data,{Menu,Name}}]), - add_menu(Menu, Names, Tag, Font). - -%% --------------------------------------------------------------------- -%% Remove a specific menu item, or a whole menu, or a list of both. -%% - -remove_menu(List) when is_list(List)-> - lists:foreach(fun(X) -> gs:destroy(X) end, List); - -remove_menu(Object) -> - gse:destroy(Object). - - -%% --------------------------------------------------------------------- -%% If the trace window opened is supposed to trace a real pid, let us -%% add the trace menu, and other items specific to tracing. If not, -%% the only menus available are the ones in the default defined in -%% window(Pid). - -make_menus(false, _, _, _) -> ok; -make_menus({true,Pid}, MenuBar, MenuFile, Font) -> - MBView = gs:create(menubutton,'ViewMenu',MenuBar, - [{underline,1}, - {label,{text," View "}}, {font,Font}, - {side,left}]), - MenuView = gs:create(menu, MBView, []), - - MBTrace = gs:create(menubutton,'TraceMenu',MenuBar, - [{underline,1}, - {label,{text," Trace "}}, {font,Font}, - {side,left}]), - MenuTrace = gs:create(menu, MBTrace, []), - - - MBHelp = gs:create(menubutton,'HelpMenu',MenuBar, - [{underline,1}, - {label,{text," Help "}}, {font,Font}, - {side,right}]), - MenuHelp = gs:create(menu, MBHelp, []), - - %% File menu - gse:named_menuitem('Options', MenuFile, - [{label, {text, "Options..."}}, {font,Font}, - {underline,0}]), - - %% Trace menu - gse:named_menuitem('All Links', MenuTrace, - [{label, {text, "All Linked Processes"}}, - {font,Font}, - {underline,0}]), - gse:named_menuitem('LinksMenu', MenuTrace, - [{underline,0}, - {label, {text, "Linked Process..."}}, - {font,Font}, - {itemtype, cascade}, - {enable,false}]), - gs:create(menu,'Links','LinksMenu',[]), - case pman_process:pinfo(Pid, links) of - Links when is_list(Links) -> - links_menus(Links); - undefined -> - lists:foreach(fun(X) -> gse:disable(X) end,['LinksMenu']) - end, - gse:named_menuitem('Kill', MenuTrace, - [{label, {text, "Kill"}}, {font,Font}, - {underline,0}]), - - %% View menu - gse:named_menuitem('Clear', MenuView, - [{label, {text, "Clear buffer"}}, {font,Font}, - {underline,0}]), - - gse:named_menuitem('Module', MenuView, - [{label, {text, "Module Info"}}, {font,Font}, - {underline,0}]), - - %% Help menu - gse:named_menuitem('Help', MenuHelp, - [{label, {text, "Help"}}, {font,Font}, - {underline,0}]). - -%% --------------------------------------------------------------------- -%% Configurate the actual editor -%% -%% Editor, actual editor -%% Options, actual options for the editor -%% -%% Return: A configurated editor with the actual options -%% --------------------------------------------------------------------- - -configeditor(Editor, Options) -> - gs:config(Editor, Options). - -%% --------------------------------------------------------------------- -%% Configure the actual window after it has been resized. -%% --------------------------------------------------------------------- - -configwin(Object, W, H) -> - Dx = abs(W - gs:read(Object,width) - 4), - Dy = abs(H - gs:read(Object,height) - 42), - if - Dx + Dy =/= 0 -> - gs:config(Object,[{width,W - 4}]); - true -> ok - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% update/1, 3 -update(NoOfHidden) -> - Str = lists:flatten(io_lib:format(?CPIDHIDDENTEXT++"~w", - [NoOfHidden])), - gse:config('Number Hidden', [{label, {text,Str}}]). - -update(Grid, ShowInfoR, NoOfHidden) -> - - %% We reverse the list because we want the processes to appear with - %% the newest (=highest) pid first in the list. - ShowInfo = lists:reverse(ShowInfoR), - - %% Set the length of the grid - CGridline = length(ShowInfo) + 1, - gs:config(Grid, [{rows, {1,CGridline}}]), - - %% Add the header line - add_gridline(Grid, - 1, - {'Pid','Current Function','Name','Msgs','Reds','Size'}, - []), - - update(NoOfHidden), - - %% Recurse through the ordset of pids - update_r(Grid, ShowInfo, 2). - -update_r(Grid, [], Row) -> - delete_gridlines(Grid, Row); -update_r(Grid, [{Pid,Func,Name,Msgs,Reds,Psize}|ShowInfo], Row) -> - {M, F, A} = Func, - FuncText = lists:flatten(io_lib:format("~w:~w/~w", [M, F, A])), - add_gridline(Grid, - Row, - {Pid, FuncText, Name, Msgs, Reds, Psize}, - [{data,{pidfunc,Pid,Func}}]), - update_r(Grid, ShowInfo, Row+1). - -add_gridline(Grid, Row, Tuple, LIOptSpec) -> - {Pid, FuncText, Name, Msgs, Reds, Psize} = Tuple, - LIOpt = [{click,true}, - {doubleclick,true}, - {fg, colour(Row)}, - {text,{1,Pid}}, - {text,{2,FuncText}}, - {text,{3,Name}}, - {text,{4,Msgs}}, - {text,{5,Reds}}, - {text,{6,Psize}} |LIOptSpec], - case gs:read(Grid, {obj_at_row, Row}) of - undefined -> - gse:gridline(Grid,[{row, Row}|LIOpt]); - GridLine -> - gs:config(GridLine,LIOpt) - end. - -delete_gridlines(Grid, Row) -> - case gs:read(Grid, {obj_at_row, Row}) of - undefined -> - ok; - GridLine -> - gs:destroy(GridLine), - delete_gridlines(Grid, Row+1) - end. - -colour(1) -> - ?HEADER_COLOUR; -colour(_Row) -> - ?UNSELECTED_COLOUR. - -%% Interchange colours between two rows -change_colour(Grid, Row, Row) -> - Gitem = gs:read(Grid, {obj_at_row,Row}), - gs:config(Gitem, {fg,?SELECTED_COLOUR}); -change_colour(Grid, From, To) -> - Gitem_to = gs:read(Grid, {obj_at_row,To}), - Gitem_fr = gs:read(Grid, {obj_at_row,From}), - gs:config(Gitem_to, {fg,?SELECTED_COLOUR}), - gs:config(Gitem_fr, {fg,colour(From)}). - -%% -------------------------------------------------------------- -%% Create a title for the window -%% Return: the title -%% -------------------------------------------------------------- - -title({module, Mod}) -> - lists:flatten([io_lib:format("Pman: Module info ~p", [Mod])]); - -title({shell, Sh} ) -> - lists:flatten([io_lib:format("Pman: Shell process ~p on ~p", - [Sh,node(Sh)])]); - -title(Sh) -> - lists:flatten([io_lib:format("Pman: Process ~p on ~p", - [Sh, node(Sh)]),name(Sh)]). -name(Pid) -> - case pman_process:pinfo(Pid, registered_name) of - undefined -> ""; - Name -> - lists:flatten([io_lib:format("[~p]", [Name])]) - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% module_data/1 - %% Returns the module information for a -%% module, on a format suitable to insert into a GS editor. -%% -%% Arguments: -%% ModuleName The module -%% -%% Returns: -%% A string with module information. -%% - -module_data(ModuleName) -> - vformat("", catch apply(ModuleName, module_info, [])). - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% display/1 - -%% - -display({_,Pid,_}) -> display(Pid); -display({_,Pid}) -> display(Pid); -display(Pid) when is_pid(Pid) -> - case pman_process:pinfo(Pid) of - undefined -> - format('Process is dead~n',[]); - Other -> - proc_format(Other) - end. - -%% -------------------------------------------------------------- -%% Format functions for the shell and help window. -%% -------------------------------------------------------------- - -vformat(Pad, {M,F,A}) when is_atom(F) -> - Pad2 = lists:append(Pad,mkpad(io_lib:format("~w:~w",[M,F]))), - lists:flatten([format("~p:~p", [M,F]),argformat(Pad2, A)]); - -vformat(Pad, [H|T]) -> - kvformat(Pad, [H|T],"["); - -vformat(_Pad, X) -> format("~p~n", [X]). - -format(Format) -> format(Format, []). - -format(Format, Args) -> - io_lib:format(Format, Args). - - -kvformat(S, [Item],Buff) -> - lists:reverse([format("\n~s~p]\n",[S,Item])|Buff]); - -kvformat(S,[H|T],Buff) -> - kvformat(S,T,[format("\n~s~p, ",[S,H])|Buff]); - -kvformat(_,[],Buff) -> - lists:reverse(["]\n"|Buff]). - -argformat(_Pad,A) when is_integer(A) -> - format("/~p\n", [A]); -argformat(_,A) -> - lists:flatten([format("/~p\n", [length(A)]), - format("args: \n"), - argformat2(" ", A)]). - -argformat2(Pad, Arglist) -> - Chars = lists:flatten(io_lib:format("~p",[Arglist])), - if - length(Chars) < (70 - length(Pad)) -> - format("~s~s\n", [Pad, Chars]); - true -> - argformat3(Pad, Arglist) - end. - -argformat3(_,[]) -> format("\n"); -argformat3(Pad, [H|T]) -> - Chars = truncate(65,io_lib:format("~s~p",[Pad, H])), - format("~s,\n", [Chars]), - argformat3(Pad, T). - -pformat(false) -> []; -pformat({value,{_, 0}}) -> []; -pformat({value,{_, []}}) -> []; -pformat({value, {Key, Vals}}) -> - Pad = mkpad(io_lib:format("~p ",[Key])), - format(lists:flatten(["~p: " ,vformat(Pad, Vals), "~n"]), [Key]). - -truncate(0, _Chars) -> "....."; -truncate(I, [H|T]) -> [H|truncate(I-1, T)]; -truncate(_I, []) -> []. - -mkpad([_|T]) -> [32|mkpad(T)]; -mkpad([]) -> []. - -proc_format(Pi) -> %% process_info struct - X1 = pformat(lists:keysearch(initial_call, 1, Pi)), - X2 = pformat(lists:keysearch(current_function, 1,Pi)), - X3 = pformat(lists:keysearch(messages, 1,Pi)), - X4 = pformat(lists:keysearch(dictionary,1, Pi)), - X5 = pformat(lists:keysearch(heap_size, 1,Pi)), - X6 = pformat(lists:keysearch(stack_size, 1,Pi)), - X7 = pformat(lists:keysearch(reductions, 1,Pi)), - X8 = pformat(lists:keysearch(links, 1,Pi)), - X9 = pformat(lists:keysearch(trap_exit, 1,Pi)), - lists:flatten([X1, X2, X3, X4, X5,X6,X7,X8,X9]). - - -%% Using the tool_utils function for presenting messages. -dialog_window(GSParent, Text) -> - spawn_link(tool_utils, notify, [GSParent, Text]). - -%% Create a window with a dismiss button. -msg_win(Text) -> - spawn_link(fun() -> display_msg_win(Text) end). - -display_msg_win(Text) -> - GS = gs:start([{kernel,true}]), - Font = font(GS), - Win = gs:window(GS, [{width,200}, {height,75}, {destroy,true}, - {title,"Pman Message"}]), - Can = gs:canvas(Win, [{width,200}, {height, 75},{x,0},{y,0}]), - gs:text(Can, [{text,Text}, {coords,[{10,0}]}, {justify,center}]), - Btn = gs:button(Win, [{label,{text,"Dismiss"}}, {font,Font}, - {width,100}, {x,50}, {y,40}]), - gs:config(Win, {map,true}), - receive - {gs, Btn, click, _, _} -> - ok - end. - -%% Choose default font -font() -> - font(gs:start([{kernel,true}])). - -font(GS) -> - case gs:read(GS, {choose_font, {screen,[],12}}) of - Font when element(1, Font)==screen -> - Font; - _ -> - gs:read(GS, {choose_font, {courier,[],12}}) - end. diff --git a/lib/pman/src/pman_win.hrl b/lib/pman/src/pman_win.hrl deleted file mode 100644 index 8a2778d5b7..0000000000 --- a/lib/pman/src/pman_win.hrl +++ /dev/null @@ -1,39 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% - --define(WIN_HEIGHT, 390). --define(WIN_WIDTH, 745). - --define(MENU_HEIGHT, 40). --define(CHECKBAR_HEIGHT, 40). - --define(CPIDHIDDENTEXT, "# Hidden: "). - --define(HEADER_COLOUR, blue). --define(UNSELECTED_COLOUR, black). --define(SELECTED_COLOUR, white). - - - - - - - - - diff --git a/lib/pman/vsn.mk b/lib/pman/vsn.mk deleted file mode 100644 index 92fb9df222..0000000000 --- a/lib/pman/vsn.mk +++ /dev/null @@ -1 +0,0 @@ -PMAN_VSN = 2.7.1.4 diff --git a/lib/sasl/test/release_handler_SUITE.erl b/lib/sasl/test/release_handler_SUITE.erl index 5293381af0..a3db2b23db 100644 --- a/lib/sasl/test/release_handler_SUITE.erl +++ b/lib/sasl/test/release_handler_SUITE.erl @@ -1793,18 +1793,18 @@ no_dot_erlang(Conf) -> case os:cmd(Erl ++ Args) of "DOT_ERLANG_READ" ++ _ -> ok; Other1 -> - io:format("Failed: ~s~n",[Erl ++ Args]), + io:format("Failed: ~ts~n",[Erl ++ Args]), io:format("Expected: ~s ++ _~n",["DOT_ERLANG_READ "]), - io:format("Got: ~s~n",[Other1]), + io:format("Got: ~ts~n",[Other1]), exit(failed_to_start, test_error) end, NO_DOT_ERL = " -boot no_dot_erlang", case os:cmd(Erl ++ NO_DOT_ERL ++ Args) of "TESTOK" ++ _ -> ok; Other2 -> - io:format("Failed: ~s~n",[Erl ++ Args]), + io:format("Failed: ~ts~n",[Erl ++ Args]), io:format("Expected: ~s~n",["TESTOK"]), - io:format("Got: ~s~n",[Other2]), + io:format("Got: ~ts~n",[Other2]), exit(failed_to_start, no_dot_erlang) end after diff --git a/lib/test_server/src/ts_lib.erl b/lib/test_server/src/ts_lib.erl index 52bb346043..9f56f59fed 100644 --- a/lib/test_server/src/ts_lib.erl +++ b/lib/test_server/src/ts_lib.erl @@ -145,16 +145,13 @@ suite_order(sasl) -> 16; suite_order(tools) -> 18; suite_order(runtime_tools) -> 19; suite_order(parsetools) -> 20; -suite_order(pman) -> 21; suite_order(debugger) -> 22; -suite_order(toolbar) -> 23; suite_order(ic) -> 24; suite_order(orber) -> 26; suite_order(inets) -> 28; suite_order(asn1) -> 30; suite_order(os_mon) -> 32; suite_order(snmp) -> 38; -suite_order(mnesia_session) -> 42; suite_order(mnesia) -> 44; suite_order(system) -> 999; %% IMPORTANT: system SHOULD always be last! suite_order(_) -> 200. diff --git a/lib/toolbar/AUTHORS b/lib/toolbar/AUTHORS deleted file mode 100644 index c5a649d938..0000000000 --- a/lib/toolbar/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -Original Authors and Contributors: - -Gunilla Arendt
\ No newline at end of file diff --git a/lib/toolbar/Makefile b/lib/toolbar/Makefile deleted file mode 100644 index 5326457976..0000000000 --- a/lib/toolbar/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1996-2009. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -# -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Common Macros -# ---------------------------------------------------- - -SUB_DIRECTORIES = src doc/src - -include vsn.mk -VSN = $(TOOLBAR_VSN) - -SPECIAL_TARGETS = - -# ---------------------------------------------------- -# Default Subdir Targets -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_subdir.mk diff --git a/lib/toolbar/doc/html/.gitignore b/lib/toolbar/doc/html/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/toolbar/doc/html/.gitignore +++ /dev/null diff --git a/lib/toolbar/doc/man3/.gitignore b/lib/toolbar/doc/man3/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/toolbar/doc/man3/.gitignore +++ /dev/null diff --git a/lib/toolbar/doc/pdf/.gitignore b/lib/toolbar/doc/pdf/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/toolbar/doc/pdf/.gitignore +++ /dev/null diff --git a/lib/toolbar/doc/src/Makefile b/lib/toolbar/doc/src/Makefile deleted file mode 100644 index 2239421556..0000000000 --- a/lib/toolbar/doc/src/Makefile +++ /dev/null @@ -1,115 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1997-2012. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -# -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Application version -# ---------------------------------------------------- -include ../../vsn.mk -VSN=$(TOOLBAR_VSN) -APPLICATION=toolbar - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN) - -# ---------------------------------------------------- -# Target Specs -# ---------------------------------------------------- -XML_APPLICATION_FILES = ref_man.xml -XML_REF3_FILES = toolbar.xml - -XML_PART_FILES = part.xml part_notes.xml -XML_CHAPTER_FILES = toolbar_chapter.xml notes.xml - -BOOK_FILES = book.xml - -XML_FILES = \ - $(BOOK_FILES) $(XML_CHAPTER_FILES) \ - $(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES) - -GIF_FILES = \ - bar.gif \ - create_tool.gif \ - note.gif - -# ---------------------------------------------------- - -HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \ - $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html) - -INFO_FILE = ../../info - -MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3) - -HTML_REF_MAN_FILE = $(HTMLDIR)/index.html - -TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf - -# ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- -XML_FLAGS += -DVIPS_FLAGS += - -# ---------------------------------------------------- -# Targets -# ---------------------------------------------------- -$(HTMLDIR)/%.gif: %.gif - $(INSTALL_DATA) $< $@ - -docs: pdf html man - -$(TOP_PDF_FILE): $(XML_FILES) - -pdf: $(TOP_PDF_FILE) - -html: gifs $(HTML_REF_MAN_FILE) - -man: $(MAN3_FILES) - -gifs: $(GIF_FILES:%=$(HTMLDIR)/%) - -debug opt: - -clean clean_docs: - rm -rf $(HTMLDIR)/* - rm -f $(MAN3DIR)/* - rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo) - rm -f errs core *~ - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_docs_spec: docs - $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DIR) "$(RELSYSDIR)/doc/html" - $(INSTALL_DATA) $(HTMLDIR)/* \ - "$(RELSYSDIR)/doc/html" - $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)" - $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3" - $(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3" - -release_spec: - diff --git a/lib/toolbar/doc/src/bar.gif b/lib/toolbar/doc/src/bar.gif Binary files differdeleted file mode 100644 index c249d891dd..0000000000 --- a/lib/toolbar/doc/src/bar.gif +++ /dev/null diff --git a/lib/toolbar/doc/src/bar.ps b/lib/toolbar/doc/src/bar.ps deleted file mode 100644 index 850ebdbee5..0000000000 --- a/lib/toolbar/doc/src/bar.ps +++ /dev/null @@ -1,846 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: /home/kent/otp/toolbar/doc/bar.ps -%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley -%%BoundingBox: 165 346 447 446 -%%Pages: 1 -%%DocumentFonts: -%%EndComments -%%EndProlog - -%%Page: 1 1 - -% remember original state -/origstate save def - -% build a temporary dictionary -20 dict begin - -% define string to hold a scanline's worth of data -/pix 282 string def - -% define space for color conversions -/grays 282 string def % space for gray scale line -/npixls 0 def -/rgbindx 0 def - -% lower left corner -165 346 translate - -% size of image (on paper, in 1/72inch coords) -282.02400 100.00800 scale - -282 100 8 % dimensions of data -[282 0 0 -100 0 100] % mapping matrix -{currentfile pix readhexstring pop} -image - -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c000 -c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff7300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -14141414141414141414141414141414141414141414141414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -14141414141414141414141414141414141414141414141414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffffffffffffffffffffffffffffff00ffffffffffffffffffffff -ffffffff001414ffffffffffffffffffffffffffffff001414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0 -c0c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300 -c0ffc0c0c01414141457575757571414141414141457141414141414ffffffffffff1414 -14141414ffff1414141414141414141414141414141414141414141414141414ffffffff -ffffffff1414141414141414141414141414ffff14141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c00000000000000000 -00c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300 -c0ffc0c0c01414141414575757575714141414145714141414141414ffff141414141414 -14141414ffff1414141414141414141414141414141414141414141414141414141414ff -ff1414141414141414141414141414141414ffff14141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c00000000000000000 -00c0c073001414ffc0c0c00000c0c0c0c00000c0c073001414c0c0c07300 -c0ffc0c0c01414141414145757575757141414571414141414141414ffff1414141414ff -ff14ffffffff1414ffffffff1414ffff14ffff141414ffff14ffff1414141414141414ff -ff14141414ffffffff141414ffffffff1414ffff1414ffffffff14141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0 -00c0c073001414ffc0c0c0c00000c0c00000c0c0c073001414c0c0c07300 -c0ffc0c0c01414141414141457575757571457141414141414141414ffff1414141414ff -ffffffffffff14ffff1414ffff14ffffff14ffff14ffff14ffffff1414141414141414ff -ff141414ffff1414ffff14ffff1414ffff14ffff14ffff1414ffff141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0 -00c0c073001414ffc0c0c0c0c000000000c0c0c0c073001414c0c0c07300 -c0ffc0c0c01414141414141414575757145714141414141414141414ffffffffffff14ff -ffff1414ffff1414141414ffff14ffff1414ffff14ffff1414ffff1414141414141414ff -ff141414ffff1414ffff14ffff1414ffff14ffff14ffffff141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0 -00c0c073001414ffc0c0c0c0c0c00000c0c0c0c0c073001414c0c0c07300 -c0ffc0c0c01414141414141414145714575757141414141414141414ffff1414141414ff -ff141414ffff1414ffffffffff14ffff1414ffff14ffff1414ffff1414141414141414ff -ff141414ffff1414ffff14ffff1414ffff14ffff141414ffffff14141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0 -00c0c073001414ffc0c0c0c0c000000000c0c0c0c073001414c0c0c07300 -c0ffc0c0c01414141414141414571457575757571414141414141414ffff1414141414ff -ff141414ffff14ffff1414ffff14ffff1414ffff14ffff1414ffff1414141414141414ff -ff141414ffff1414ffff14ffff1414ffff14ffff14141414ffffff141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c0 -00c0c073001414ffc0c0c0c00000c0c00000c0c0c073001414c0c0c07300 -c0ffc0c0c01414141414141457141414575757575714141414141414ffff1414141414ff -ff141414ffff14ffff1414ffff14ffff1414ffff14ffff14ffffff1414141414141414ff -ff141414ffff1414ffff14ffff1414ffff14ffff14ffff1414ffff141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0000000000000c0c0c0c07300ffc0c000c0c0c0c0c0c0c0 -00c0c073001414ffc0c0c00000c0c0c0c00000c0c073001414c0c0c07300 -c0ffc0c0c01414141414145714141414145757575757141414141414ffffffffffff14ff -ff141414ffff1414ffffff14ffffffff1414ffff1414ffff14ffff1414141414141414ff -ff14141414ffffffff141414ffffffff1414ffff1414ffffffff14141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0000000000000c0c0c0c07300ffc0c00000000000000000 -00c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300 -c0ffc0c0c014141414145714141414141414575757575714141414141414141414141414 -14141414141414141414141414141414141414141414141414ffff141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ffc0c0c0c0c0c0c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0 -c0c0c073001414ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414ffff1414ffff141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414ff737373737373737373737373737300ff73737373737373737373 -73737373001414ff7373737373737373737373737373001414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -14141414141414141414141414141414141414141414ffffffff14141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414000000000000000000000000000000000000000000000000000000 -00000000001414000000000000000000000000000000001414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -14141414141414141414141414141414141414141414141414c0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffc0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff82c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d90000000000d9d9d9d9d900d9d9d9d9000000d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000 -00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9 -d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9 -d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9000000d9d9d9d9d9d900d9d9d9d90000 -00d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9000000d9d9d9d9000000d9d9d9d9d9d9 -00d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9 -000000d9d9d9d9d9d900d9d9d900d90000d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9 -d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9 -00d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900 -d9d9d900d9d9d9d9d900d9d9d90000d9d900d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d900000000d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9 -d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9 -00d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d900 -d9d9d900d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9000000 -0000d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9 -00d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900 -00000000d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9 -00d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900 -d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d900d9d9 -d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9 -00d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900 -d9d9d900d9d9d9d9d900d9d9d90000d9d900d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9d90000 -00d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9000000d9d9d9d9000000d9d9d9d9d9d9 -00d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9 -000000d9d9d9d9d9d900d9d9d900d90000d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282828282828282828282c0c0c07300 -c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282828282828282828282c0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff57c0c0c07300 -c0ffc0c0c0ffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d957c0c0c07300 -c0ffc0c0c0ffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d957c0c0c07300 -c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe -bed9ffffd9d9d4d4d4d4d4d9d9d9dbbdd0dbd9d9d9d9d9d9d9dec7a9ded9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff -d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d -7d7d7d7d7474747474747474727272747474747474747474747474d9ffffd9d9bebebebe -bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d95757bebebebe -bebebebebebebebebebebebebebebebebebebebebe5757d957c0c0c07300 -c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe -bed9ffffd9d9d4d4d4d4d4d9d9d9dcd0a9dadad9dbdbd9d9dcd0a9d0dcd9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff -d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d -7d7d7d747474747472727272727272727272747474747474747474d9ffffd9d9bebebebe -bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9575757bebebe -bebebebebebebebebebebebebebebebebebebebe575757d957c0c0c07300 -c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe -bed9ffffd9d9d4d4d4d4d4d9d9dad0c3bdb3dadcd4d5dbdbc7b3d0e1d5d9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebe000000000000000000bebebebebebebebebebed9ffff -d9d9bebebebebed7d7d7bebebebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d -7d7d74747474727272727272727272777777727274747474747474d9ffffd9d9bebebebe -bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9be575757bebe -bebebebebebebebebebebebebebebebebebebe57575757d957c0c0c07300 -c0ffc0c0c0ffd9d9bebebe000000000000000000000000000000000000007dbebebebebe -bed9ffffd9d9d4d4d4d4d4d9d9dcc79ce1bda9bd6f60a9bdbddbe5a9a9d0dad5d4d4d4d9 -ffffd9d9bebebebebebebebebebe007f7f7f7f7f7f7f00bebebebebebebebebebed9ffff -d9d9bebebebed7d7d7d7d7bebebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d -7d7d747474727272727272727277779e769e777772727474747474d9ffffd9d9bebebebe -bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9bebe575757be -bebebebebebebebebebebebebebebebebebe57575757bed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9d9dbd083bde5bd8f536f9cc3dedea96fa9bddcd5d4d4d4d9 -ffffd9d9bebebebebebebebebebe007f7f7f7f7f7f7f00bebebebebebebebebebed9ffff -d9d9bebebed7d7d7d7d7d7d7bebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d7d -7d747472727272727272727777779e9e7695897777727274747474d9ffffd9d9bebebebe -000000000000bebebebebebebebebe000000000000bebebebed9ffffd9d9bebebe575757 -bebebebebe00000000000000bebebebebe57575757bebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d00000000000000000000000000000000007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9d9d9e1b379ded6831f6083d0e58379deded9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebe000000000000000000bebebebebebebebebebed9ffff -d9d9bebebed7d7d7d7d7d7d7bebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d -7d7472727272727272727777779e9e7697a6829e77777272747474d9ffffd9d9bebebebe -002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebe5757 -57bebebe0000ffffffffff000000bebe57575757bebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9d9d9dcd03cc3d948531f3cdcda60c3ded9d9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebe00bebebebebebebebebebebebebebed9ffff -d9d9bebebed7d7d7d7d7d7d7bebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d -7474727272727272727777777789899d00008d899e777272727474d9ffffd9d9bebebebe -002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebebe57 -5757be0000ffffffffffffffff00be57575757bebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9d9d9d9ea79a99c489c3c11a99c83e5d9d9d9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebe00bebebebebebebebebebebebebebed9ffff -d9d9bebebebed7d7d7d7d7bebebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d -7472727272727272777777897f8d7f7f40007f9782827772727274d9ffffd9d9bebebebe -002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebebebe -57575700ffffffffffffffffffff57575757bebebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9d9d9d9e1a9606f1f532a116f48bdded9d9d9d9d5d4d4d4d9 -ffffd9d9bebebebebebe00000000000000000000000000000000bebebebebebebed9ffff -d9d9bebebebebed7d7d7bebebebebebebebebebebebed7d7d7bebebebebebed9ffffd9d9 -bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d -7272727272727277779e9e897f005600000000007f959e72727274d9ffffd9d9bebebebe -002727272700bebebebebebebebebe005757575700bebebebed9ffffd9d9bebebebebebe -be575757ffff00ffffffff00ff57575700bebebebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9d9d9d9d9ea9c3648362a1148d0ded9d9d9d9d9d5d4d4d4d9 -ffffd9d9bebebebebebe00bebebebebebebebebebebebebebe00bebebebebebebed9ffff -d9d9bebebebebebebe00bebebebebebebebebebebed7d7d7d7d7bebebebebed9ffffd9d9 -bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d74 -727272727272779e9e9e8976970000000000000000009e77727272d9ffffd9d9bebebebe -000000000000bebebebe0000000000000000000000bebebebed9ffffd9d9bebebebebebe -0000575757ffff00ffff00ff575757000000bebebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9d9d9dae5a9534883363c1f1fb3dedcd9d9d9d9d5d4d4d4d9 -ffffd9d9bebebebebebe00bebebebebebebebebebebebebebe00bebebebebebebed9ffff -d9d9bebebebebebebe00bebebebebebebebebebed7d7d7d7d7d7d7bebebebed9ffffd9d9 -bebebebe00515151510051ffff510051000051005151515100bebebebed9ffffd9d97d72 -727272779e8982828282827d000000000000000000008977727272d9ffffd9d9bebebebe -007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebebe -000000575757ffffffffff57575700000000bebebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9d9d9e59c36606083603c2a1f5379dbdbd9d9d9d5d4d4d4d9 -ffffd9d9bebe000000000000000000bebebebebebe000000000000000000bebebed9ffff -d9d9bebebebebebebebe00bebebebebebebebebed7d7d7d7d7d7d7bebebebed9ffffd9d9 -bebebebe005151515100ffffffff0000000000005151515100bebebebed9ffffd9d97d72 -727777779e893197958d8d89000000000000000000008977727272d9ffffd9d9bebebebe -007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebebe -00ff0000575757000000575757000000ff00bebebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9d9e1a953bd79608f8348302ab34879dedad9d9d5d4d4d4d9 -ffffd9d9bebe005757575757575700bebebebebebe007f7f7f7f7f7f7f00bebebed9ffff -d9d9bebebebebebebebe00bebebebebebebebebed7d7d7d7d7d7d7bebebebed9ffffd9d9 -bebebebe005151515100ffffffff0000000000005151515100bebebebed9ffffd9d97d72 -7777779e9e823800006e7f00000000000000000000008977727272d9ffffd9d9bebebebe -007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebe00 -ffff00000057575700575757000000ffffff00bebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d0027ffff2727ff2727ffff2727ffff27007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9dbdb53b3ea6f798f7930301fd4a92ad0dcd9d9d5d4d4d4d9 -ffffd9d9bebe005757575757575700bebebebebebe007f7f7f7f7f7f7f00bebebed9ffff -d9d9bebebebebebebebebe00bebebebebebebebebed7d7d7d7d7bebebebebed9ffffd9d9 -bebebebe00515151510051ffff510051000051005151515100bebebebed9ffffd9d97d77 -77778989567f000000000000000000000000000000009e77727272d9ffffd9d9bebebebe -007f7f7f7f00bebebebe0027272727007f7f7f7f00bebebebed9ffffd9d9bebebebebe00 -ffffff000000575757575700000000ffffff00bebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4d9e1a99cdee58f6f9c6f303c1fb3e560bde1d9d9d5d4d4d4d9 -ffffd9d9bebe000000000000000000bebebebebebe000000000000000000bebebed9ffff -d9d9bebebebebebebebebe00bebebebebebebebebe00d7d7d7bebebebebebed9ffffd9d9 -bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d9e -8282768d9500000000000000000000000000000000899e77777272d9ffffd9d9bebebebe -000000000000000000000000000000000000000000bebebebed9ffffd9d9bebebebebe00 -ffffffff00000057575700000000ffffffff00bebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d00272727272727272727272727272727007d007dbebebebe -bed9ffffd9d9d4d4d4d4d4dbd06fd4e19c48608f532a3630bdeaa953d0ded9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebebebebebebebebe00bebebebebebebed9ffff -d9d9bebebebebebebebebebe00bebebebebebebe00bebebebebebebebebebed9ffffd9d9 -bebebebe005151515100510000510051ffff51005151515100bebebebed9ffffd9d97d9e -8282768d9500000000000000000000000000000000899e77777272d9ffffd9d9bebebebe -005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00 -ffffffffff0057575757570000ffffffffff00bebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d00000000000000000000000000000000007d007dbebebebe -bed9ffffd9d9d4d4d4d4d5de6f79ea9c112a606f6f3c11116fc7ea606fdad9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebebebebebebebebe00bebebebebebebed9ffff -d9d9bebebebebebebebebebe00bebebebebebe00bebebebebebebebebebebed9ffffd9d9 -bebebebe0051515151000000000000ffffffff005151515100bebebebed9ffffd9d97d77 -77778989567f000000000000000000000000000000009e77727272d9ffffd9d9bebebebe -005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00 -ffff00ffffff575700575757ffffff00ffff00bebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebe007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d007dbebebebe -bed9ffffd9d9d4d4d4d4d6d053c7c71f1f3c484848361f034860a9d57983d9d6d4d4d4d9 -ffffd9d9bebebebebebebebebe00000000000000000000000000bebebebebebebed9ffff -d9d9bebebebebebebebebebebe00bebebebebe00bebebebebebebebebebebed9ffffd9d9 -bebebebe0051515151000000000000ffffffff005151515100bebebebed9ffffd9d97d72 -7777779e9e823800006e7f00000000000000000000008977727272d9ffffd9d9bebebebe -005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00 -ffff00ffff570057ffff575757ffff00ffff00bebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9bebebe000000000000000000000000000000000000007d7d7dbebebe -bed9ffffd9d9d4d4d4d4d6d0a9da601130363648111f111160303cc7d09cd4d6d4d4d4d9 -ffffd9d9bebebebebebebebebe00bebebebebebebebebebebe00bebebebebebebed9ffff -d9d9bebebebebebebebebebebe00be7f7f7f00bebebebebebebebebebebebed9ffffd9d9 -bebebebe005151515100510000510051ffff51005151515100bebebebed9ffffd9d97d72 -727777779e893197958d8d89000000000000000000008977727272d9ffffd9d9bebebebe -005757575700d7d7d7d7005757575700ffffffff00bebebebed9ffffd9d9bebebebebe00 -ffff000057005700ffff005757570000ffff00bebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9be00000000000000000000000000000000000000000000007dbebebe -bed9ffffd9d9d4d4d4d4d4d9e5bd111f489c1f2a11030330bd79366fe5dedad5d4d4d4d9 -ffffd9d9bebebebebe000000000000000000bebebe000000000000000000bebebed9ffff -d9d9bebebebebebebebebebebebe7f7f7f7f7fbebebebebebebebebebebebed9ffffd9d9 -bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d72 -727272779e8982828282827d000000000000000000008977727272d9ffffd9d9bebebebe -000000000000000000000000000000000000000000bebebebed9ffffd9d9bebebebebebe -00ffff570057ff0000000000575757ffffff00bebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9be007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d007dbebe -bed9ffffd9d9d4d4d4d4d4d9e58f0379d6d653111f11116fead41f83e5dad9d5d4d4d4d9 -ffffd9d9bebebebebe007f7f7f7f7f7f7f00bebebe005757575757575700bebebed9ffff -d9d9bebebebebebebebebebebe7f7f7f7f7f7f7fbebebebebebebebebebebed9ffffd9d9 -bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d74 -727272727272779e9e9e8976970000000000000000009e77727272d9ffffd9d9bebebebe -00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebebe -00ff5757570000000000000000575757ff00bebebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9be007d7d007d007d007d007d007d007d007d007d007d7d007d7dbebe -bed9ffffd9d9d4d4d4d4d4d9e57903c7e5e5831103032ac3ea8f48d0dcd9d9d5d4d4d4d9 -ffffd9d9bebebebebe007f7f7f7f7f7f7f00bebebe005757575757575700bebebed9ffff -d9d9bebebebebebebebebebebe7f7f7f7f7f7f7fbebebebebebebebebebebed9ffffd9d9 -bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d -7272727272727277779e9e897f005600000000007f959e72727274d9ffffd9d9bebebebe -00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebebe -be57575700000000000000000000575757bebebebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9be007d00be00be00be00be00be00be00be00be00be007d007d7dbebe -bed9ffffd9d9d4d4d4d4d4d9debd2a60dee1d060112a9ceac3368fe5d9d9d9d5d4d4d4d9 -ffffd9d9bebebebebe000000000000000000bebebe000000000000000000bebebed9ffff -d9d9bebebebebebebebebebebe7f7f7f7f7f7f7fbebebebebebebebebebebed9ffffd9d9 -bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d -7472727272727272777777897f8d7f7f40007f9782827772727274d9ffffd9d9bebebebe -00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebebe -57575700ff0000ff0000ff0000ffff575757bebebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9be007d7d007d007d007d007d007d007d007d007d007d7d00007dbebe -bed9ffffd9d9d4d4d4d4d4d9d9e1c34860d9e5d6a9c3e5c7481fd0ded9d9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff -d9d9bebebebebebebebebebebebe7f7f7f7f7fbebebebebebebebebebebebed9ffffd9d9 -bebebebe005151515100515151510051515151005151515100bebebebed9ffffd9d97d7d -7474727272727272727777777789899d00008d899e777272727474d9ffffd9d9bebebebe -00d7d7d7d700ffffffff007f7f7f7f002727272700bebebebed9ffffd9d9bebebebebe57 -5757be0000ffffffffffffffffff00be575757bebebebed957c0c0c07300 -c0ffc0c0c0ffd9d9be007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d0000bebe -bed9ffffd9d9d4d4d4d4d4d9d9d9e1d65360d4e1deded453308fe1d9d9d9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff -d9d9bebebebebebebebebebebebebe7f7f7fbebebebebebebebebebebebebed9ffffd9d9 -bebebebe000000000000000000000000000000000000000000bebebebed9ffffd9d97d7d -7d7472727272727272727777779e9e7697a6829e77777272747474d9ffffd9d9bebebebe -000000000000000000000000000000000000000000bebebebed9ffffd9d9bebebebe5757 -57bebebe00ffffffffffffff0000bebebe575757bebebed957c0c0c07300 -c0ffc0c0c0ffd9d9be007d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d0000bebe -bed9ffffd9d9d4d4d4d4d4d9d9d9d9dee13c60d9dbdebd7960d0dcd9d9d9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff -d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d -7d747472727272727272727777779e9e7695897777727274747474d9ffffd9d9bebebebe -bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9bebebe575757 -bebebebebe00000000000000bebebebebebe575757bebed957c0c0c07300 -c0ffc0c0c0ffd9d9be0000000000000000000000000000000000000000000000007dbebe -bed9ffffd9d9d4d4d4d4d4d9d9dadee19c2a8fc7dcd9dcde83bde1d9d9d9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff -d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d -7d7d747474727272727272727277779e769e777772727474747474d9ffffd9d9bebebebe -bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9bebe575757be -bebebebebebebebebebebebebebebebebebebe575757bed957c0c0c07300 -c0ffc0c0c0ffd9d9bebebe7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7dbebe -bed9ffffd9d9d4d4d4d4d4d9dad0bd9c9cb3dedbd9d9d9dbd083c3dcd9d9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff -d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d -7d7d74747474727272727272727272777777727274747474747474d9ffffd9d9bebebebe -bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9be575757bebe -bebebebebebebebebebebebebebebebebebebebe575757d957c0c0c07300 -c0ffc0c0c0ffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebe -bed9ffffd9d9d4d4d4d4d4d9dbd09ca9e5e1dad9d9d9d9d9debda9d6dad9d9d5d4d4d4d9 -ffffd9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffff -d9d9bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9 -bebebebebebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d97d7d -7d7d7d747474747472727272727272727272747474747474747474d9ffffd9d9bebebebe -bebebebebebebebebebebebebebebebebebebebebebebebebed9ffffd9d9575757bebebe -bebebebebebebebebebebebebebebebebebebebebe5757d957c0c0c07300 -c0ffc0c0c0ffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d957c0c0c07300 -c0ffc0c0c057575757575757575757575757575757575757575757575757575757575757 -5757ff575757575757575757575757575757575757575757575757575757575757575757 -ff575757575757575757575757575757575757575757575757575757575757575757ff57 -5757575757575757575757575757575757575757575757575757575757575757ff575757 -575757575757575757575757575757575757575757575757575757575757ff5757575757 -57575757575757575757575757575757575757575757575757575757ff57575757575757 -5757575757575757575757575757575757575757575757575757ff575757575757575757 -57575757575757575757575757575757575757575757575757c0c0c07300 -c0ffc0c0c0bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf -bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf -bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf -bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf -bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf -bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf -bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbf -bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfc0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0bfd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c0c0c07300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c07300 -c07373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737300 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000 - -showpage - -% stop using temporary dictionary -end - -% restore original state -origstate restore - -%%Trailer diff --git a/lib/toolbar/doc/src/book.xml b/lib/toolbar/doc/src/book.xml deleted file mode 100644 index e5584cf925..0000000000 --- a/lib/toolbar/doc/src/book.xml +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE book SYSTEM "book.dtd"> - -<book xmlns:xi="http://www.w3.org/2001/XInclude">> - <header titlestyle="normal"> - <copyright> - <year>1997</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Toolbar</title> - <prepared>Joakim Grebenö</prepared> - <docno></docno> - <date>1997-05-02</date> - <rev>1.0.2</rev> - <file>book.sgml</file> - </header> - <insidecover> - </insidecover> - <pagetext>Toolbar</pagetext> - <preamble> - <contents level="2"></contents> - </preamble> - <parts lift="no"> - <xi:include href="part.xml"/> - </parts> - <applications> - <xi:include href="ref_man.xml"/> - </applications> - <releasenotes> - <xi:include href="notes.xml"/> - </releasenotes> - <listofterms></listofterms> - <index></index> -</book> - diff --git a/lib/toolbar/doc/src/create_tool.gif b/lib/toolbar/doc/src/create_tool.gif Binary files differdeleted file mode 100644 index b55bb809d3..0000000000 --- a/lib/toolbar/doc/src/create_tool.gif +++ /dev/null diff --git a/lib/toolbar/doc/src/create_tool.ps b/lib/toolbar/doc/src/create_tool.ps deleted file mode 100644 index 8d6961bb9f..0000000000 --- a/lib/toolbar/doc/src/create_tool.ps +++ /dev/null @@ -1,5050 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: /home/kent/otp/toolbar/doc/create_tool.ps -%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley -%%BoundingBox: 165 29 575 446 -%%Pages: 1 -%%DocumentFonts: -%%EndComments -%%EndProlog - -%%Page: 1 1 - -% remember original state -/origstate save def - -% build a temporary dictionary -20 dict begin - -% define string to hold a scanline's worth of data -/pix 410 string def - -% define space for color conversions -/grays 410 string def % space for gray scale line -/npixls 0 def -/rgbindx 0 def - -% lower left corner -165 29 translate - -% size of image (on paper, in 1/72inch coords) -409.96800 417.02400 scale - -410 417 8 % dimensions of data -[410 0 0 -417 0 417] % mapping matrix -{currentfile pix readhexstring pop} -image - -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c000 -c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff7300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c07300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c07300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffffffffffffff -ffffffffffffffff00ffffffffffffffffffffffffffffff001414ffffffffffffffffff -ffffffffffff001414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0 -c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414ffc0c0c0c0c0c0c0c0 -c0c0c0c0c073001414c0c0c07300 -c0ffc0c0c014141414575757575714141414141414571414141414141414ffffffff1414 -14141414141414141414141414141414141414ffff14141414141414141414141414ffff -ffffffffffff1414141414141414141414141414ffff141414141414ffffffffffffffff -14ffff141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0 -c0c0c0c0c0c0c07300ffc0c0000000000000000000c0c073001414ffc0c0c0c0c0c0c0c0 -c0c0c0c0c073001414c0c0c07300 -c0ffc0c0c0141414141457575757571414141414571414141414141414ffff1414ffff14 -14141414141414141414141414141414141414ffff141414141414141414141414141414 -14ffff1414141414141414141414141414141414ffff141414141414ffff141414141414 -14ffff141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0 -c0c0c0c0c0c0c07300ffc0c0000000000000000000c0c073001414ffc0c0c00000c0c0c0 -c00000c0c073001414c0c0c07300 -c0ffc0c0c01414141414145757575757141414571414141414141414ffff1414141414ff -ff14ffff14ffffffff141414ffffffff1414ffffffff1414ffffffff1414141414141414 -14ffff14141414ffffffff141414ffffffff1414ffff141414141414ffff14141414ffff -14ffff1414ffffffff141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0 -c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c00000c0c0 -0000c0c0c073001414c0c0c07300 -c0ffc0c0c01414141414141457575757571457141414141414141414ffff1414141414ff -ffffffffffff1414ffff14ffff1414ffff1414ffff1414ffff1414ffff14141414141414 -14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff -14ffff14ffff1414ffff1414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0 -c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c0c0000000 -00c0c0c0c073001414c0c0c07300 -c0ffc0c0c01414141414141414575757145714141414141414141414ffff1414141414ff -ffff1414ffff1414ffff1414141414ffff1414ffff1414ffff1414ffff14141414141414 -14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffffffffff14ffff -14ffff14ffff1414ffff1414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0 -c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c0c0c00000 -c0c0c0c0c073001414c0c0c07300 -c0ffc0c0c01414141414141414145714575757141414141414141414ffff1414141414ff -ff141414ffffffffffff1414ffffffffff1414ffff1414ffffffffffff14141414141414 -14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff -14ffff14ffffffffffff1414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0 -c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c0c0000000 -00c0c0c0c073001414c0c0c07300 -c0ffc0c0c01414141414141414571457575757571414141414141414ffff1414141414ff -ff141414ffff1414141414ffff1414ffff1414ffff1414ffff1414141414141414141414 -14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff -14ffff14ffff141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0 -c0c0c0c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c0c00000c0c0 -0000c0c0c073001414c0c0c07300 -c0ffc0c0c0141414141414145714141457575757571414141414141414ffff1414ffffff -ff141414ffff1414ffff14ffff1414ffff1414ffff14ffffff1414ffff14141414141414 -14ffff141414ffff1414ffff14ffff1414ffff14ffff141414141414ffff14141414ffff -14ffff14ffff1414ffff1414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0000000 -000000c0c0c0c07300ffc0c000c0c0c0c0c0c0c000c0c073001414ffc0c0c00000c0c0c0 -c00000c0c073001414c0c0c07300 -c0ffc0c0c014141414141457141414141457575757571414141414141414ffffffff14ff -ff14141414ffffffff141414ffffff14ffff1414ffff1414ffffffff1414141414141414 -14ffff14141414ffffffff141414ffffffff1414ffff141414141414ffff14141414ffff -14ffff1414ffffffff141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0000000 -000000c0c0c0c07300ffc0c0000000000000000000c0c073001414ffc0c0c0c0c0c0c0c0 -c0c0c0c0c073001414c0c0c07300 -c0ffc0c0c014141414145714141414141414575757575714141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ffc0c0c0c0c0c0 -c0c0c0c0c0c0c07300ffc0c0c0c0c0c0c0c0c0c0c0c0c073001414ffc0c0c0c0c0c0c0c0 -c0c0c0c0c073001414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -1414141414141414141414141414141414141414141414141414141414ff737373737373 -737373737373737300ff7373737373737373737373737373001414ff7373737373737373 -737373737373001414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141400000000000000 -000000000000000000000000000000000000000000000000001414000000000000000000 -000000000000001414c0c0c07300 -c0ffc0c0c014141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414141414141414141414141414141414141414141414141414141414 -141414141414141414c0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff82c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -8282828282828282828282828282828282828282828282828282828282828282828282d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282828282828282828282828282828282828282ffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9 -d9d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9 -000000d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d900d90000d9d9d9d900 -0000d9d9d90000d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d9d9000000d9d9d900d90000d9d9d9 -d9000000d9d9d9d9d9d900d9d9d90000d900d9d9d900d9d9d900d9d90000000000d9d9d9 -000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d90000000000d9d9d900 -0000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d90000d9d900d9d900d9 -d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d900d9d9d9d900d9d9d900d9d90000d9d900d9d9 -00d9d9d900d9d9d9d900d9d9d9d900d900d900d9d900d9d9d900d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9 -d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900000000d9d9d9d9 -d9d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9 -d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d900d9d9d9d900d9d9d9d9d9d900d9d9d9d9d9d9 -00d9d9d9d9d9d9d9d900d9d9d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9 -d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d900d9d9d90000000000d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900 -000000d9d900d900d900d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d900d9d9d9d9d9d9000000d9d9d900d9d9d9d9d9d9 -00d9d9d9d9d9d9d900d9d9d9d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9 -d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9 -d9d900d9d900d900d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d900d9d9d9d9d9d9d9d9d900d9d900d9d9d9d9d9d9 -00d9d9d9d9d9d9d900d9d9d9d9d900d900d900d9d9d9d900d900d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9 -d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9 -d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d900d9d9d9d9d9d900d9d9d900d9d900d9d9d9d9d9d9 -00d9d9d900d9d900d9d9d9d9d9d900d900d900d9d9d9d90000d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d90000d9d9d9d9d900d9d9d9d900d9 -d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900 -000000d9d900d900d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d900d9d9d9d9d9d9d9000000d9d9d900d9d9d9d9d9d9 -d9000000d9d9d900d9d9d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d90000d9d9d9 -000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d90000d9d9d9d9d9d90000d9d9d900 -0000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282c0c0c07300 -c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282c0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff82c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -8282828282828282828282828282828282828282828282828282828282828282828282d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282828282828282828282828282828282828282ffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d90000d9d9d9d900 -0000d9d9d90000d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9 -d9000000d9d9d900d9d9d900d9d900d90000d9d9d9d9d9d9d9d9d9d90000000000d9d9d9 -000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d90000d9d900d9d900d9 -d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9 -00d9d9d900d9d900d9d9d900d9d90000d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9 -d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9 -00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900 -000000d9d900d900d900d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9 -00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9 -d9d900d9d900d900d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d900d900d9d9d9d9d9d9d9d9d9 -00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d900d9 -d9d900d9d900d900d900d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9 -00d9d9d900d9d900d900d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900 -000000d9d900d900d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9 -d9000000d9d9d9d900d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d90000d9d9d9 -000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282828282828282828282828282828282828282d9d9 -d9d982828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282ffd9d9 -d9d982828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282ffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d900d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d90000000000d9d9d900 -0000d9d9d900d90000d9d9d90000000000d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9000000d9d9d900d90000d9d9d90000000000d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d90000d900d9d9d900d9d9d900d9d90000000000d9d9d9000000d9d9d9d900 -0000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d900d9d9d9d900d9 -d9d900d9d90000d9d900d9d9d9d900d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d90000d9d900d9d9d9d900d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d900d900d900d9d900d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9 -d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000d9d9d9d9d900d9d9d9d9d9d9 -d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9 -d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d9d9d900 -000000d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d900d900d900d9d9d900d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9 -d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9 -d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d900d900d900d9d9d9d900d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9 -d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9 -d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d900d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d900d900d900d9d9d9d90000d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9 -d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d90000d9d9d900 -000000d9d900d9d9d9d9d9d9d9d9d90000d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d90000d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d900d900d900d9d9d9d9d900d9d9d9d9d9d90000d9d9d9000000d9d9d9d900 -0000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9 -d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9d9 -d9d98282ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9d9 -d9d982ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000082828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828200 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000082828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282828282828282828282828282828282828282ff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000d9d9d9d9 -d900d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9 -d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -000000d9d9d9d9000000d9d9d900d90000d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d900 -0000d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d90000828200000000d900d9d9d900d9d9d900d9d90000000000d9d9 -d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d90000d900d9d9d9 -000000d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d90000d9d900d9d9d9d9d9d9d9d9d90000000000d9d9d9d9 -d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282000000d900d900d9d900d9d9d900d9d9d9d900d9d9d9d9 -00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d90000d9d9d9 -d9d900d9d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9 -d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d900d9d900d9d9d9d900d9d9d9d9 -00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9 -d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9 -d900d9d9d9d9d9d900d9d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d900d9d900d9d9d9d900d9d9d9d9 -00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9 -d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9 -d900d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d9d900d900d9d9d9d900d9d9d9d9 -00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9 -d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d900 -d9d9d900d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9 -d900d9d9d9d9d9d900d9d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d9d90000d9d9d9d9d900d9d9d9d9 -00d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d90000d9d9d900d9d90000d9d9d9 -d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9 -000000d9d9d9d9000000d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9 -d900d9d9d9d9d9d900d9d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282000000d900d900d9d9d9d9d900d9d9d9d9d9d90000d9d9 -d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d90000d9d9d9d90000d900d9d9d9 -d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000082820000d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900008282ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000082ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -8282828282828282828282828282828282828282828282828282828282828282828282d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282828282828282828282828282828282828282ffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d90000d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9 -00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d90000d9d90000d9d9d9000000d9d9d9d9000000d9d9d9d9000000d9d9d9d900 -0000d9d9d9d90000d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9000000d9d9d900d90000d9d9d9d9000000d9d9d90000000000d9d9d9 -d9d9d9d9d9d90000000000d9d9d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9 -00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d90000d9d90000d9d900d9d9d900d9d900d9d9d900d9d900d9d9d900d9d900d9 -d9d900d9d900d9d90000d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d90000d9d90000d9d900d9d9d900d9d9d9d9d9d9d9d9d9 -0000000000d9d9d9d9d900d9d9d90000d9d900d9d900d9d9d900d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9 -00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d900d90000d900d9d900d9d9d900d9d900d9d9d9d9d9d900d9d9d9d9d9d9d9d9 -d9d900d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d900d9d9d9d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9 -00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d900d90000d900d9d90000000000d9d9d9000000d9d9d9d9000000d9d9d9d900 -000000d9d900d9d9d900d9d90000000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d90000d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9000000d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9 -00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d900d9 -d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d900d900d9d9d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d900d9d9d9d900d9d900d9d9d900d9d900d9d9d900d9d900d9d9d900d9d900d9 -d9d900d9d900d9d90000d9d900d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d90000d9d9d9d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d900d9d9d9d900d9d9d9000000d9d9d9d9000000d9d9d9d9000000d9d9d9d900 -000000d9d9d90000d900d9d9d9000000d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d900d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9 -d9d900d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9000000d9d9d9d9d9d90000d9d9d9 -d9d9d9d9d9d9d9d9d90000d9d9d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9d9 -00d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -8282828282828282828282828282828282828282828282828282828282828282828282d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282828282828282828282828282828282828282ffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d90000 -000000d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9 -d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d900d9d9d9d9d9d9d9 -d900d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d900d9d9d9d9d900d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9 -d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9 -00d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9 -d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9 -d900d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9 -d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9 -00d9d9d90000d9d90000d9d900d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9 -d90000d900d9d9d9000000d9d9d9d9000000d9d9d9d9d9d900d9d9d900d90000d9d9d900 -00000000d9d90000d900d9d9d9d9d9d900d9d9d9d9d9d900d9d9d9d9000000d9d9d900d9 -0000d9d9d9d90000d900d9d9d9000000d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d900 -00d9d9d90000000000d9d90000d900d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9 -00d9d9d90000d9d90000d9d900d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9 -00d9d90000d9d900d9d9d900d9d900d9d9d900d9d9d9d900d9d9d9d90000d9d900d9d9d9 -d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d900d9d9d90000 -d9d900d9d900d9d90000d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9d9d9d9d90000d9 -d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d90000000000d9d9d9d9 -00d9d9d900d90000d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9 -00d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d9d9 -d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d900d9d9d9d9d9d9d900d9d9d900d9 -d9d900d9d900d9d9d900d9d900d9d9d900d9d9d900d900d9d9d9d9d9d9d9d9d9d900d9d9 -d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9 -00d9d9d900d90000d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -00d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d900d9d9d9d9d900d9d9d900d9d9d9 -d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d900d9d9d900d9 -d9d900d9d900d9d9d900d9d90000000000d9d9d9d900d9d9d9d9d9d9d9d9d9d9d900d9d9 -d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9 -00d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9 -00d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d900d9d9d9d9d900d9d9d900d9d9d9 -d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d900d9d9d9d9d9d9d9d900d9d9d900d9 -d9d900d9d900d9d9d900d9d900d9d9d9d9d9d9d900d900d9d9d9d9d9d9d9d9d9d900d9d9 -d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9 -00d9d9d900d9d9d9d900d9d900d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d90000d9d9d9d9d90000d9d9d900d9d9d9d9d9d9 -00d9d90000d9d900d9d9d900d9d900d9d9d900d9d900d9d9d9d9d9d900d9d9d900d9d9d9 -d900d9d9d9d900d900d900d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9 -d9d900d9d900d9d90000d9d900d9d9d900d9d900d9d9d900d9d9d9d90000d9d9d900d9d9 -d900d9d9d9d900d9d9d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9 -00d9d9d900d9d9d9d900d9d90000000000d9d9d9d90000d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d90000d9d9d9d9d90000d9d9d900d9d9d9d9d9d9 -d90000d900d9d9d9000000d9d9d9d9000000d9d9d900d9d9d9d9d9d900d9d9d900d9d9d9 -d9d90000d9d900d900d900d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9 -d9d900d9d9d90000d900d9d9d9000000d9d9d900d9d9d900d9d9d9d90000d9d9d900d9d9 -d900d9d9d9d9d90000d9d900d900d900d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d98282ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d982ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282c0c0c07300 -c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282c0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff82c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff82d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff82d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff82d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9000000d9d9d9d9000000d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9000000d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9000000d9d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d9d9000000d9 -d9d9d9000000d9d9d900d90000d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9000000d9d9d900d9d9d900d9d9d900 -0000d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d900d9d9d9d9d9d90000000000d9d9d9000000d9d9d900d90000d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900 -d9d900d9d9d900d9d90000d9d900d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d900d9d9d9d9d900d9d9d900d9d900d9d9d900d9d900d9 -d9d900d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d900d9d9d9d9d9d9d900d9d9d9d900d9d9d900d9d90000d9d900d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d900d9d9d900 -d9d9d9d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d90000d9d9d9d9d9d9d900d9d900d9d9d900d9d900d9 -d9d900d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d90000d9d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d9d9d9d9d9d9d900d9d9d90000000000 -d9d9d900000000d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d900000000d9d9d900d900d9d9d90000 -000000d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d900d9d9d9d9 -d9d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d900d900d9d9d900d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d900d9d9d900d9d9d9d9d900d9d9d900d9d9d900 -d9d900d9d9d900d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d900d9d9d900d9d900d9d9d900d9d9d9d900d9d9d9d900d9 -d9d900d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d900d9d9d900d9d9d9d900d9d9d9d900d9d9d900d9d90000d9d900d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9000000d9d9d9d9d9d900d9d9d9d9000000d9 -d9d9d900000000d9d900d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9000000d9d9d9d900000000d9d9d9d900d9d9d9d9d900 -0000d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9000000d9d9d9d9d9d90000d9d9d9000000d9d9d900d90000d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d900d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffffd9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d98282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ffff828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ffff8282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ffff82828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -8282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9ff82828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9ff828282828282828282828282828282828282828282828282828282828282828282 -82828282828282828282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ff8282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -8282828282828282d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282c0c0c07300 -c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282c0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc0c0c07300 -c0ffc0c0c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff82c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffffd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9 -d9d9d9d9d9d9d98282c0c0c07300 -c0ffc0c0c0ffff8282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282c0c0c07300 -c0ffc0c0c0ff828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282828282828282828282828282828282828282828282828282828282 -828282828282828282c0c0c07300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c07300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c07300 -c0ffc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 -c0c0c0c0c0c0c0c0c0c0c0c07300 -c07373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -737373737373737373737373737373737373737373737373737373737373737373737373 -7373737373737373737373737300 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000 - -showpage - -% stop using temporary dictionary -end - -% restore original state -origstate restore - -%%Trailer diff --git a/lib/toolbar/doc/src/fascicules.xml b/lib/toolbar/doc/src/fascicules.xml deleted file mode 100644 index 37feca543f..0000000000 --- a/lib/toolbar/doc/src/fascicules.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE fascicules SYSTEM "fascicules.dtd"> - -<fascicules> - <fascicule file="part" href="part_frame.html" entry="no"> - User's Guide - </fascicule> - <fascicule file="ref_man" href="ref_man_frame.html" entry="yes"> - Reference Manual - </fascicule> - <fascicule file="part_notes" href="part_notes_frame.html" entry="no"> - Release Notes - </fascicule> - <fascicule file="" href="../../../../doc/print.html" entry="no"> - Off-Print - </fascicule> -</fascicules> - diff --git a/lib/toolbar/doc/src/note.gif b/lib/toolbar/doc/src/note.gif Binary files differdeleted file mode 100644 index 6fffe30419..0000000000 --- a/lib/toolbar/doc/src/note.gif +++ /dev/null diff --git a/lib/toolbar/doc/src/notes.xml b/lib/toolbar/doc/src/notes.xml deleted file mode 100644 index aca9d59176..0000000000 --- a/lib/toolbar/doc/src/notes.xml +++ /dev/null @@ -1,180 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE chapter SYSTEM "chapter.dtd"> - -<chapter> - <header> - <copyright> - <year>2004</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Toolbar Release Notes</title> - <prepared>otp_appnotes</prepared> - <docno>nil</docno> - <date>nil</date> - <rev>nil</rev> - <file>notes.xml</file> - </header> - <p>This document describes the changes made to the Toolbar - application.</p> - -<section><title>Toolbar 1.4.2.3</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Misc build updates</p> - <p> - Own Id: OTP-10784</p> - </item> - </list> - </section> - -</section> - -<section><title>Toolbar 1.4.2.2</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p>The GS applications is now deprecated and will be - removed in the R16 release. The following GS-based - applications have been superseded by the Observer - application and will removed in R16: Appmon, Pman, - Tv.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-9907</p> - </item> - </list> - </section> - -</section> - -<section><title>Toolbar 1.4.2.1</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Miscellaneous documentation build updates</p> - <p> - Own Id: OTP-9813</p> - </item> - </list> - </section> - -</section> - -<section><title>Toolbar 1.4.2</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - Improve spelling throughout documentation, code comments - and error messages</p> - <p> - Own Id: OTP-9555</p> - </item> - </list> - </section> - -</section> - -<section><title>Toolbar 1.4.1</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - The documentation is now built with open source tools - (xsltproc and fop) that exists on most platforms. One - visible change is that the frames are removed.</p> - <p> - Own Id: OTP-8201</p> - </item> - </list> - </section> - -</section> - -<section><title>Toolbar 1.4</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p>The copyright notices have been updated.</p> - <p> - Own Id: OTP-7851</p> - </item> - </list> - </section> - -</section> - - <section> - <title>Toolbar 1.3.0.1</title> - - <section> - <title>Improvements and New Features</title> - <list type="bulleted"> - <item> - <p>Minor Makefile changes.</p> - <p>Own Id: OTP-6689</p> - </item> - <item> - <p>Obsolete guard tests (such as list()) have been replaced - with the modern guard tests (such as is_list()).</p> - <p>Own Id: OTP-6725</p> - </item> - </list> - </section> - </section> - - <section> - <title>Toolbar 1.3</title> - - <section> - <title>Improvements and New Features</title> - <list type="bulleted"> - <item> - <p>Notification windows are now centered over a parent - window.</p> - <p>Own Id: OTP-6013 Aux Id: OTP-5987 </p> - </item> - </list> - </section> - </section> - - <section> - <title>Toolbar 1.2.1</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>The graphic applications now search for HTML - documentation in the correct place.</p> - <p>Own Id: OTP-5381</p> - </item> - </list> - </section> - </section> -</chapter> - diff --git a/lib/toolbar/doc/src/part.xml b/lib/toolbar/doc/src/part.xml deleted file mode 100644 index 907b645764..0000000000 --- a/lib/toolbar/doc/src/part.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE part SYSTEM "part.dtd"> - -<part xmlns:xi="http://www.w3.org/2001/XInclude">> - <header> - <copyright> - <year>1996</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Toolbar User's Guide</title> - <prepared>Gunilla Hugosson</prepared> - <docno></docno> - <date>1997-04-19</date> - <rev>1.0.2</rev> - <file>part.sgml</file> - </header> - <description> - <p>The <em>Toolbar</em> application simplifies access to - the Erlang/OTP tools. It consists of a number of power buttons, one - for each available tool.</p> - </description> - <xi:include href="toolbar_chapter.xml"/> -</part> - diff --git a/lib/toolbar/doc/src/part_notes.xml b/lib/toolbar/doc/src/part_notes.xml deleted file mode 100644 index 72a488a9d5..0000000000 --- a/lib/toolbar/doc/src/part_notes.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE part SYSTEM "part.dtd"> - -<part xmlns:xi="http://www.w3.org/2001/XInclude">> - <header> - <copyright> - <year>2004</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Toolbar Release Notes</title> - <prepared></prepared> - <docno></docno> - <date>2004-09-07</date> - <rev>1.0</rev> - <file>part_notes.sgml</file> - </header> - <description> - <p>The <em>Toolbar</em> application simplifies access to - the Erlang/OTP tools. It consists of a number of power buttons, - one for each available tool.</p> - </description> - <xi:include href="notes.xml"/> -</part> - diff --git a/lib/toolbar/doc/src/ref_man.xml b/lib/toolbar/doc/src/ref_man.xml deleted file mode 100644 index 16ba54b9ef..0000000000 --- a/lib/toolbar/doc/src/ref_man.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE application SYSTEM "application.dtd"> - -<application xmlns:xi="http://www.w3.org/2001/XInclude">> - <header> - <copyright> - <year>1996</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Toolbar Reference Manual</title> - <prepared>Gunilla Hugosson</prepared> - <docno></docno> - <date>1997-04-15</date> - <rev>1.0.2</rev> - <file>application.sgml</file> - </header> - <description> - <p>The <em>Toolbar</em> application simplifies access to - the Erlang/OTP tools. It consists of a number of power buttons, one - for each available tool.</p> - </description> - <xi:include href="toolbar.xml"/> -</application> - diff --git a/lib/toolbar/doc/src/toolbar.xml b/lib/toolbar/doc/src/toolbar.xml deleted file mode 100644 index ac62cb7b68..0000000000 --- a/lib/toolbar/doc/src/toolbar.xml +++ /dev/null @@ -1,101 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE erlref SYSTEM "erlref.dtd"> - -<erlref> - <header> - <copyright> - <year>1996</year> - <year>2013</year> - <holder>Ericsson AB, All Rights Reserved</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - The Initial Developer of the Original Code is Ericsson AB. - </legalnotice> - - <title>toolbar</title> - <prepared>Gunilla Hugosson</prepared> - <docno></docno> - <date>1997-04-21</date> - <rev>A</rev> - <file>toolbar.sgml</file> - </header> - <module>toolbar</module> - <modulesummary>GUI for Starting Tools and User Contributions</modulesummary> - <description> - <warning> - <p> - The Toolbar application is deprecated and will be removed in R16. - </p> - </warning> - <p>Toolbar makes it easier to use - the different Erlang tools - and the user contributions - which are provided. - It has a graphical user interface with an icon for each tool. - Clicking the icon activates the corresponding tool. - </p> - <p>All tools to be included on Toolbar must - have a configuration file containing information about the tool, - for example its start function and help information location. - Configuration files must have the <c>.tool</c> suffix. - </p> - <p>When started, Toolbar automatically checks for <c>*.tool</c> - files in the current path and adds the corresponding tools. For - each <c>ebin</c> directory found in the path, it will also look - in a <c>priv</c> directory next to it. This is a feature of the Erlang - file structure.</p> - </description> - <funcs> - <func> - <name>start() -> ok | already_started</name> - <fsummary>Start Toolbar</fsummary> - <desc> - <p>Creates a window containing tool icons.</p> - </desc> - </func> - <func> - <name>version() -> string()</name> - <fsummary>Return current version number</fsummary> - <desc> - <p>Returns the current version number of Toolbar.</p> - </desc> - </func> - <func> - <name>update() -> ok | {error,not_started}</name> - <fsummary>Update Toolbar</fsummary> - <desc> - <p>Makes a search for new tool files in the current path and - adds the corresponding tools to Toolbar window.</p> - </desc> - </func> - <func> - <name>quit() -> ok | {error,not_started}</name> - <fsummary>Quit Toolbar.</fsummary> - </func> - <func> - <name>create_tool_file() -> ok | {error,not_started}</name> - <fsummary>Create tool files</fsummary> - <desc> - <p>Starts the GUI used for creating and editing tool files.</p> - </desc> - </func> - <func> - <name>add_gs_contribs() -> ok | {error,not_started}</name> - <fsummary>Add GS contributions</fsummary> - <desc> - <p>Adds the path to the directory where the GS contributions are - situated and add the tools found there, if any.</p> - </desc> - </func> - </funcs> -</erlref> - diff --git a/lib/toolbar/doc/src/toolbar_chapter.xml b/lib/toolbar/doc/src/toolbar_chapter.xml deleted file mode 100644 index bec2bff062..0000000000 --- a/lib/toolbar/doc/src/toolbar_chapter.xml +++ /dev/null @@ -1,145 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE chapter SYSTEM "chapter.dtd"> - -<chapter> - <header> - <copyright> - <year>1996</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Toolbar</title> - <prepared>Gunilla Hugosson, Kenneth Lundin</prepared> - <docno></docno> - <date>1997-04-21</date> - <rev>A</rev> - <file>toolbar_chapter.xml</file> - </header> - <warning> - <p> - The Toolbar application is deprecated and will be removed in R16. - </p> - </warning> - <p>Toolbar provides an interface to the various Erlang tools which are available. Toolbar can also provide access to user supplied tools which are included with the Erlang software release. These tools are called GS Contributions.</p> - <p>All tools included in Toolbar must have a configuration file which contains information about the tool, such as its start function and the location of help information. The name of a configuration file must include the suffix <c>.tool</c>. - </p> - <p>Start the Toolbar application with one of the following commands: - </p> - <list type="bulleted"> - <item>enter the command <c>toolbar:start().</c> from the command line after Erlang has been started.</item> - <item>start Erlang with the command <c>erl -s toolbar</c>.</item> - </list> - <p>When started, Toolbar automatically checks for <c>*.tool</c> files in the current path and adds the corresponding tools. For each <c>ebin</c> directory found in the path, it will also look in a <c>priv</c> directory next to it. This is a function of the Erlang file structure. - </p> - <p>You can update Toolbar with menu commands on Toolbar window. Refer to the File Menu and Tools Menu sections below for details. - </p> - - <section> - <title>Toolbar Window</title> - <p>The following illustration shows <seealso marker="#fig_1">The Toolbar Window</seealso>. - </p> - <marker id="fig_1"></marker> - <image file="bar.gif"> - <icaption>The Toolbar Window</icaption> - </image> - <p>Each icon on Toolbar represents a separate tool, which is started by clicking on the icon. You can also display place the mouse pointer over an icon to display the name of the tool at the bottom of Toolbar window. - </p> - <p>The Toolbar window also has a menu which includes the following menu items: - </p> - <list type="bulleted"> - <item>File menu</item> - <item>Tools menu</item> - <item>Help menu</item> - </list> - <p>These menu are described in the following sections. - </p> - - <section> - <marker id="file_menu"></marker> - <title>The File menu</title> - <p>The File menu has the following two menu items: - </p> - <taglist> - <tag>Update Toolbar</tag> - <item>Select this menu item to search for new tool files in the current path and add the corresponding tools to the Toolbar window. This action is performed automatically every the Toolbar application is started.</item> - <tag>Quit</tag> - <item>Select this menu item to exit the oolbar application.</item> - </taglist> - </section> - - <section> - <marker id="tools_menu"></marker> - <title>The Tools menu</title> - <p>The Tool menu has the following menu items: - </p> - <taglist> - <tag>Create Tool File</tag> - <item>Choose this menu item to display the Create Tools File Window, where you create a new tools file, or edit an existing tools file. This window is described in detail below.</item> - <tag>Add GS Contributions</tag> - <item>Choose this menu item to add GS contributions by entering the path to the directory where these tools are situated. GS contributions are user supplied tools which are included with the Erlang software release. These tools are not supported by Erlang/OTP.</item> - </taglist> - - <section> - <title>The Create Tool File Window</title> - <p>This window is displayed when you select <em>Create Tool File</em> from the <em>Tools</em> menu. The following illustration shows <seealso marker="#fig_2">The Create Tool File Window</seealso>. - </p> - <marker id="fig_2"></marker> - <image file="create_tool.gif"> - <icaption>The Create Tool File Window</icaption> - </image> - <p>Follow these steps to create a new tool file, or to edit an existing tool file:</p> - <list type="bulleted"> - <item>To edit an existing tools file, enter the file name of the tools file into the field <em>File name</em> and press <em>Enter</em>. The contents of the tool file are displayed in the information fields. Edit the information in the following fields as required.</item> - <item>To create a new tools file, enter information into the following fields.</item> - <item>When finished, select <em>Update Toolbar</em> from the <em>File</em> menu.</item> - </list> - <list type="ordered"> - <item><em>File name</em>. Enter the name of the tools file. The application will add the <c>.tool</c> suffix if omitted.</item> - <item><em>Tool name</em>. Enter the name of the tool. This field defaults to the name entered into the File name field. For example, if you enter <c>mytool.tool</c> as a file name, this field defaults to <c>mytool</c>.</item> - <item><em>Start function</em>. Enter a module name and a function name into the fields titled module and function respectively. The function must exist and take zero arguments.</item> - <item><em>Icon file</em>. Enter the file name of the icon to be displayed in the Toolbar. The file must be a bitmap file or a GIF image with the file extension <c>.xbm</c> or <c>.gif</c> respectively. If no path name is entered, the system assumes that the file is located in the same directory as the tools file. This field is optional.</item> - <item><em>Message</em>. Enter a descriptive string of maximum 30 characters for the tool. This field is optional. The information entered here is displayed at the bottom of the Toolbar window when the mouse pointer is placed on the Toolbar icon.</item> - <item><em>HTML</em>. Enter an URL, a HTML file name, or a plain text file name, which points to the help text file for the tool. An URL should be given in the form <c>http://...</c>. If no path is given, the system assumes that the file is located in the same directory as the tool file. For an HTML file name ending with <c>.html</c>, it is possible to add an index which points to a specific location in the file. This is written as <c>.html#index</c>. This field is optional.</item> - </list> - <p>The window has the following command buttons: - </p> - <list type="bulleted"> - <item><em>Clear</em>. Click on this button to clear the information fields.</item> - <item><em>Save</em>. Click on this button to save the information. A new tool file can be saved only when mandatory information such as file name, tool name and start function has been entered.</item> - <item><em>Stop</em>. Click on this button to quit the Create Tool File window.</item> - </list> - <note> - <p>No error check is performed on the information entered.</p> - <p>You must select <em>Update Toolbar</em> from the <em>File</em> menu to update the configuration and make the tool visible on the Toolbar.</p> - </note> - </section> - </section> - - <section> - <marker id="help_menu"></marker> - <title>The Help menu</title> - <p>The Help Menu has the following two menu items, plus additional help menu items for those tools which have a help system. - </p> - <taglist> - <tag>About</tag> - <item>This menu item displays a short message about accessing the help information.</item> - <tag>Toolbar</tag> - <item>This menu item provides access to the Toolbar documentation.</item> - </taglist> - </section> - </section> -</chapter> - diff --git a/lib/toolbar/doc/src/warning.gif b/lib/toolbar/doc/src/warning.gif Binary files differdeleted file mode 100644 index 96af52360e..0000000000 --- a/lib/toolbar/doc/src/warning.gif +++ /dev/null diff --git a/lib/toolbar/ebin/.gitignore b/lib/toolbar/ebin/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/toolbar/ebin/.gitignore +++ /dev/null diff --git a/lib/toolbar/info b/lib/toolbar/info deleted file mode 100644 index 706cbdfdf2..0000000000 --- a/lib/toolbar/info +++ /dev/null @@ -1,2 +0,0 @@ -group: tools -short: A tool bar simplifying access to the Erlang tools diff --git a/lib/toolbar/src/Makefile b/lib/toolbar/src/Makefile deleted file mode 100644 index a24846976b..0000000000 --- a/lib/toolbar/src/Makefile +++ /dev/null @@ -1,93 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1996-2012. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -# -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Application version -# ---------------------------------------------------- -include ../vsn.mk -VSN=$(TOOLBAR_VSN) - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/toolbar-$(VSN) - -# ---------------------------------------------------- -# Common Macros -# ---------------------------------------------------- - -MODULES= \ - canvasbutton \ - toolbar \ - toolbar_graphics \ - toolbar_lib \ - toolbar_toolconfig - -HRL_FILES= toolbar.hrl - -ERL_FILES= $(MODULES:%=%.erl) - -TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET) - -APP_FILE = toolbar.app -APP_SRC = $(APP_FILE).src -APP_TARGET = $(EBIN)/$(APP_FILE) - -APPUP_FILE = toolbar.appup -APPUP_SRC = $(APPUP_FILE).src -APPUP_TARGET = $(EBIN)/$(APPUP_FILE) - -# ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- -ERL_COMPILE_FLAGS += +warn_obsolete_guard - -# ---------------------------------------------------- -# Targets -# ---------------------------------------------------- - -debug opt: $(TARGET_FILES) - -clean: - rm -f $(TARGET_FILES) - rm -f errs core *~ - -$(APP_TARGET): $(APP_SRC) ../vsn.mk - $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ - -$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk - $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ - -docs: - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_spec: opt - $(INSTALL_DIR) "$(RELSYSDIR)/src" - $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) "$(RELSYSDIR)/src" - $(INSTALL_DIR) "$(RELSYSDIR)/ebin" - $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin" - -release_docs_spec: - diff --git a/lib/toolbar/src/canvasbutton.erl b/lib/toolbar/src/canvasbutton.erl deleted file mode 100644 index 81e0ed43bb..0000000000 --- a/lib/toolbar/src/canvasbutton.erl +++ /dev/null @@ -1,239 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(canvasbutton). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,read,2}}]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Erlang Toolbar -% -%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Extension to GS used to imitate buttons but instead using images drawn -% on a canvas. Enables usage of .gif files as button images and not only -% .xbm (bitmap) files. -% -%%% Constants %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% --define(gray,{87,87,87}). -% -%%% Internal data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% canvasbutton() --record(canvasbutton,{image,rect,ul,ll}). -% -% cboptions() --record(cboptions, - {imagefile=nofile, % nofile | - % string() Name of image file - x=0, % integer() X coordinate relative the canvas - y=0, % integer() Y coordinate relative the canvas - width=10, % integer() Button width - height=10, % integer() Button heigth - fg=black, % atom() Foreground color - data=[]}). % term() Data associated with button events -% -%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% --export([create/1,create/2,read/2,press/1,release/1]). -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------- -% create(Canvas) => create(Canvas,[]) -% create(Canvas,OptionList) => canvasbutton() -% Canvas - GS canvas object -% OptionList - [{Option,Value}] -% Option, Value - see below -% Create a canvasbutton with the given image on Canvas -% -% Option Value Default Comment -% ---------------------------------------------------------------- -% image nofile | nofile Name of image file. Must be a bitmap -% string() file (.xbm) or a GIF file (.gif). -% x integer() 0 X coordinate relative to Canvas -% y integer() 0 Y coordinate relative to Canvas -% width integer() 10 Button width -% height integer() 10 Button height -% fg atom() black Foreground color, bitmaps only -% data term() [] Data associated with button events -% -% The process calling this function will receive the following events: -% {gs,GsObj,enter,{canvasbutton,Canvasbutton,Data},Args} -% {gs,GsObj,leave,{canvasbutton,Canvasbutton,Data},Args} -% {gs,GsObj,buttonpress,{canvasbutton,Canvasbutton,Data},Args} -% {gs,GsObj,buttonrelease,{canvasbutton,Canvasbutton,Data},Args} -% where GsObj and Args are a GS object and its Args field, respectively. -% -% Note that press/1 and release/1 has to be called explicitly to create -% the illusion of the button being pressed or released. -%---------------------------------------- -create(Canvas) -> - create(Canvas,[]). -create(Canvas,OptionList) -> - Options = sort_out_options(OptionList), - X = Options#cboptions.x, - Y = Options#cboptions.y, - W = Options#cboptions.width, - H = Options#cboptions.height, - - %% Buttons should have the same background color as the canvas - Bg = gs:read(Canvas,bc), - - %% Draw image - Image = create_image(Options#cboptions.imagefile,Canvas,Bg, - Options#cboptions.fg,X,Y,W,H), - - %% Draw upper left corner line - Ul = gs:create(line,Canvas,[{coords,[{X,Y+H},{X,Y},{X+W,Y}]}, - {fg,white},{width,2}]), - - %% Draw lower right corner line - Ll = gs:create(line,Canvas,[{coords,[{X,Y+H},{X+W,Y+H},{X+W,Y}]}, - {fg,?gray},{width,2}]), - - - %% Draw a rectangle around all (for event catching when width and - %% height of button is larger than image) - Rect = gs:create(rectangle,Canvas,[{coords,[{X,Y},{X+W,Y+H}]}, - {fill,Bg}, - {buttonpress,true}, - {buttonrelease,true}, - {enter,true},{leave,true}]), - - %% Now the canvas button is created - Canvasbutton = #canvasbutton{image=Image,rect=Rect,ul=Ul,ll=Ll}, - - Data = Options#cboptions.data, - gs:config(Rect,{data,{canvasbutton,Canvasbutton,Data}}), - gs:config(Image,{data,{canvasbutton,Canvasbutton,Data}}), - gs:config(Rect,lower), - gs:config(Image,raise), - - Canvasbutton. - -%---------------------------------------- -% read(Canvasbutton,coords) => [{L,T},{R,B}] -% Canvasbutton - canvasbutton() -% Read a Canvasbutton's coordinates -%---------------------------------------- -read(Canvasbutton,coords) -> - gs:read(Canvasbutton#canvasbutton.rect,coords). - -%---------------------------------------- -% press(Canvasbutton) -% Canvasbutton - canvasbutton() -% Create the illusion that Canvasbutton is pressed -%---------------------------------------- -press(Canvasbutton) -> - gs:config(Canvasbutton#canvasbutton.ul,{fg,?gray}), - gs:config(Canvasbutton#canvasbutton.ll,{fg,white}), - case Canvasbutton#canvasbutton.image of - noimage -> - ignore; - Image -> - gs:config(Image,{move,{-1,-1}}) - end. - -%---------------------------------------- -% release(Canvasbutton) -% Canvasbutton - canvasbutton() -% Create the illusion that Canvasbutton is released -%---------------------------------------- -release(Canvasbutton) -> - gs:config(Canvasbutton#canvasbutton.ul,{fg,white}), - gs:config(Canvasbutton#canvasbutton.ll,{fg,?gray}), - case Canvasbutton#canvasbutton.image of - noimage -> - ignore; - Image -> - gs:config(Image,{move,{1,1}}) - end. - - -%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------- -% create_image(ImageFile,Canvas,Bg,Fg,X,Y,W,H) => Image -% ImageFile - string() Image file, must exist and be a bitmap file ending -% with .xbm or a GIF file ending with .gif. -% Canvas - GS canvas object -% Bg - atom() Background color (bitmaps only) -% Fg - atom() Foreground color (bitmaps only) -% X, Y - int() X and Y coordinates for Image relative to Canvas -% W, H - int() Width and height of Image -% Image - GS canvas image object -%---------------------------------------- -create_image(nofile,_,_,_,_,_,_,_) -> - noimage; -create_image(ImageFile,Canvas,Bg,Fg,X,Y,W,H) -> - case lists:last(string:tokens(ImageFile,".")) of - "xbm" -> - gs:create(image,Canvas, - [{bitmap,ImageFile}, - {bg,Bg},{fg,Fg}, - {anchor,c}, - {coords,[{X+1+W/2,Y+1+H/2}]}, - {buttonpress,true}, - {buttonrelease,true}, - {enter,true},{leave,true}]); - "gif" -> - gs:create(image,Canvas, - [{load_gif,ImageFile}, - {anchor,c}, - {coords,[{X+W/2,Y+H/2}]}, - {buttonpress,true}, - {buttonrelease,true}, - {enter,true},{leave,true}]) - end. - -%---------------------------------------- -% sort_out_options(OptionList) => cboptions() -% OptionList - see create/2 -% Insert members of option list into a cboptions record. -%---------------------------------------- -sort_out_options(OptionList) -> - sort_out_options(OptionList,#cboptions{}). - -%---------------------------------------- -% sort_out_options(OptionList,Options) => cboptions() -% OptionList - see create/2 -% Options - cboptions() -% Called by sort_out_options/1. -%---------------------------------------- -sort_out_options([{image,Image}|Rest],Options) -> - sort_out_options(Rest,Options#cboptions{imagefile=Image}); -sort_out_options([{x,X}|Rest],Options) -> - sort_out_options(Rest,Options#cboptions{x=X}); -sort_out_options([{y,Y}|Rest],Options) -> - sort_out_options(Rest,Options#cboptions{y=Y}); -sort_out_options([{width,Width}|Rest],Options) -> - sort_out_options(Rest,Options#cboptions{width=Width}); -sort_out_options([{height,Height}|Rest],Options) -> - sort_out_options(Rest,Options#cboptions{height=Height}); -sort_out_options([{fg,Fg}|Rest],Options) -> - sort_out_options(Rest,Options#cboptions{fg=Fg}); -sort_out_options([{data,Data}|Rest],Options) -> - sort_out_options(Rest,Options#cboptions{data=Data}); -sort_out_options([],Options) -> - Options. diff --git a/lib/toolbar/src/toolbar.app.src b/lib/toolbar/src/toolbar.app.src deleted file mode 100644 index 16f03c497d..0000000000 --- a/lib/toolbar/src/toolbar.app.src +++ /dev/null @@ -1,30 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -{application, toolbar, - [{description, "Toolbar"}, - {vsn, "%VSN%"}, - {modules, [ - toolbar, - toolbar_graphics, - toolbar_lib, - toolbar_toolconfig, - canvasbutton - ]}, - {registered,[toolbar]}, - {applications, [kernel, stdlib, gs]}]}. diff --git a/lib/toolbar/src/toolbar.appup.src b/lib/toolbar/src/toolbar.appup.src deleted file mode 100644 index 7a435e9b22..0000000000 --- a/lib/toolbar/src/toolbar.appup.src +++ /dev/null @@ -1,19 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2001-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% -{"%VSN%",[],[]}. diff --git a/lib/toolbar/src/toolbar.erl b/lib/toolbar/src/toolbar.erl deleted file mode 100644 index b37c323008..0000000000 --- a/lib/toolbar/src/toolbar.erl +++ /dev/null @@ -1,579 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(toolbar). --compile([{nowarn_deprecated_function,{gs,start,1}}]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Erlang Toolbar -% -%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Main module -% -%%% Includes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% --include("toolbar.hrl"). -% -%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% --export([start/0,version/0]). --export([update/0,quit/0]). --export([create_tool_file/0,add_gs_contribs/0]). - -% --define (STARTUP_TIMEOUT, 20000). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------- -% start() => ok | already_started -%---------------------------------------- -start() -> - case whereis(toolbar) of - undefined -> - Self = self(), - PidInit = spawn(fun() -> init(Self) end), - init_ok (PidInit); - - _Pid -> - already_started - end. - - - -%%% init_ok /1 -%%% -%%% init_ok returns the pid from this process given from -%%% init/1 after its initialization, or else it timeouts. -%%% - -init_ok (PidInit) -> - %% Wait for a initialization completion message from - %% the spawned process before returning its Pid. - %% - - receive - {initialization_complete, PidInit} -> - PidInit - - %% (Conditional) Failure to start within the time limit will - %% result in termination - - after - ?STARTUP_TIMEOUT -> - exit(PidInit, kill), - exit({startup_timeout, ?MODULE}) - end. - - - -%---------------------------------------- -% version() -> string() -% Returns the version number. -%---------------------------------------- -version() -> - "1.1". - -%---------------------------------------- -% update() => ok | {error,not_started} -% Make a search for new tools (*.tool files) in the current path. -%---------------------------------------- -update() -> - call(update_toolbar). - -%---------------------------------------- -% quit() => ok | {error,not_started} -% Quit the Toolbar. -%---------------------------------------- -quit() -> - call(quit). - -%---------------------------------------- -% create_tool_file() => ok | {error,not_started} -% Start the GUI for creating .tool files. -%---------------------------------------- -create_tool_file() -> - call(create_tool_file). - -%---------------------------------------- -% add_gs_contribs() => ok | {error,not_started} -% Add GS contributions. -%---------------------------------------- -add_gs_contribs() -> - call(add_gs_contribs). - - -%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%============================================================================= -% Main loop -%============================================================================= - -%---------------------------------------- -% init() -%---------------------------------------- -init(PidCaller) -> - register (toolbar, self ()), - - %% Start GS - S = gs:start([{kernel,true}]), - - %% Draw main window - Window = toolbar_graphics:draw_window(S), - - %% Add system defined Tool icons to main window - toolbar_graphics:cursor(Window,busy), - NewWindow = add_tools(Window,code:get_path()), - toolbar_graphics:cursor(Window,arrow), - - %% Listen to configure events from the window - toolbar_graphics:listen_configure(NewWindow), - - %% Notify caller that the process appears - %% to have been started. - PidCaller ! {initialization_complete, self()}, - - loop(S,NewWindow,null,undefined). - -%---------------------------------------- -% loop(S,Window,LoopData,TimerRef) -% S - pid() GS -% Window - tbwindow record (see toolbar_graphics.erl) -% LoopData - term() -% TimerRef - undefined | timer_ref() -%---------------------------------------- -loop(S,Window,LoopData,TimerRef) -> - receive - %% test events - {ping, Pid} -> - Pid ! {toolbar, alive}, - loop (S, Window, LoopData, TimerRef); - - {stop, Pid} -> - Pid ! {toolbar, stopped}, - finished; - - %% ----- GS events ----- %% - - {gs,_Object,Event,Data,Args} -> - case toolbar_graphics:event(LoopData,Event,Data,Args) of - - noevent -> - loop(S,Window,LoopData,TimerRef); - - %% Display short information message - {display,Msg} -> - - {ok,Ref} = timer:apply_after(500,toolbar_graphics, - display_show,[Window,Msg]), - loop(S,Window,LoopData,Ref); - - %% Clear display area - display_clear -> - timer:cancel(TimerRef), - toolbar_graphics:display_clear(Window), - loop(S,Window,LoopData,undefined); - - %% New LoopData - {newData,NewLoopData} -> - loop(S,Window,NewLoopData,TimerRef); - - %% Icon button clicked, start corresponding tool/uc - {start,Start} -> - WinObj = toolbar_graphics:get_window(Window), - start_tool(Start,WinObj), - loop(S,Window,LoopData,TimerRef); - - %% Update Toolbar - update_toolbar -> - toolbar_graphics:cursor(Window,busy), - NewWindow = add_tools(Window,code:get_path()), - toolbar_graphics:cursor(Window,arrow), - loop(S,NewWindow,LoopData,TimerRef); - - %% Start Tool Configuration tool - create_tool_file -> - toolbar_toolconfig:start(), - loop(S,Window,LoopData,TimerRef); - - %% Add GS contributions - add_gs_contribs -> - toolbar_graphics:cursor(Window,busy), - GsDir = toolbar_lib:gs_contribs_dir(), - code:add_path(GsDir), - NewWindow = add_tools(Window,[GsDir]), - toolbar_graphics:cursor(Window,arrow), - loop(S,NewWindow,LoopData,TimerRef); - - %% Help - {help,Html} -> - toolbar_graphics:cursor(Window,busy), - WinObj = toolbar_graphics:get_window(Window), - tool_utils:open_help(WinObj, Html), - toolbar_graphics:cursor(Window,arrow), - loop(S,Window,LoopData,TimerRef); - - %% About help - about_help -> - WinObj = toolbar_graphics:get_window(Window), - Text = ["Help text is on HTML format", - "Requires Netscape to be up and running"], - tool_utils:notify(WinObj, Text), - loop(S,Window,LoopData,TimerRef); - - %% Window has been resized, redraw it - {redraw,Size} -> - NewWindow = toolbar_graphics:redraw_window(Window,Size), - loop(S,NewWindow,LoopData,TimerRef); - - %% Quit - quit -> - finished - end; - - %% ----- Events from user ----- %% - - %% Update Toolbar - update_toolbar -> - toolbar_graphics:cursor(Window,busy), - NewWindow = add_tools(Window,code:get_path()), - toolbar_graphics:cursor(Window,arrow), - loop(S,NewWindow,LoopData,TimerRef); - - %% Quit - quit -> - finished; - - %% Start Tool Configuration tool - create_tool_file -> - toolbar_toolconfig:start(), - loop(S,Window,LoopData,TimerRef); - - %% Add GS contributions - add_gs_contribs -> - toolbar_graphics:cursor(Window,busy), - GsDir = toolbar_lib:gs_contribs_dir(), - code:add_path(GsDir), - NewWindow = add_tools(Window,[GsDir]), - toolbar_graphics:cursor(Window,arrow), - loop(S,NewWindow,LoopData,TimerRef); - - Other -> - io:format("toolbar: unexp msg ~p~n",[Other]), - loop(S,Window,LoopData,TimerRef) - end. - -%---------------------------------------- -% call(Msg) => ok | {error,not_started} -% Msg - term() -% Send message to toolbar if it is started, otherwise return an error -%---------------------------------------- -call(Msg) -> - case whereis(toolbar) of - undefined -> - {error,not_started}; - _ -> - toolbar ! Msg, - ok - end. - - -%============================================================================= -% Addition of new tools -%============================================================================= -%---------------------------------------- -% add_tools(Window,Dirs) => NewWindow -% Window, NewWindow - tbwindow record (see toolbar_graphics.erl) -% Dirs - [string()] Directory names -% Calls add_tools2/2 recursively for a number of directories -%---------------------------------------- -add_tools(Window,[Dir|Rest]) when is_list(Dir) -> - - %% Add all tools in the directory Dir - NewWindow = add_tools2(Window,tool_files(Dir)), - - case filename:basename(Dir) of - %% Dir is an 'ebin' directory, check in '../priv' as well - "ebin" -> - NewerWindow = - add_tools2(NewWindow, - tool_files(filename:join(filename:dirname(Dir), - "priv"))), - add_tools(NewerWindow,Rest); - _ -> - add_tools(NewWindow,Rest) - end; -add_tools(Window,[]) -> - Window. - -%---------------------------------------- -% add_tools2(Window,ToolFiles) => NewWindow -% Window, NewWindow - tbwindow record (see toolbar_graphics.erl) -% ToolFiles - [string()] *.tool file names -% Calls add_tool/2 recursively for a number of .tool files in a directory -%---------------------------------------- -add_tools2(Window,[ToolFile|Rest]) -> - case add_tool(Window,ToolFile) of - {ok,NewWindow} -> - add_tools2(NewWindow,Rest); - {error,_Reason} -> - add_tools2(Window,Rest) - end; -add_tools2(Window,[]) -> - Window. - -%---------------------------------------- -% add_tool(Window,ToolFile) => {ok,NewWindow} | {error,Reason} -% Window, NewWindow - tbwindow record (see toolbar_graphics.erl) -% ToolFile - string() A .tool file -% Reason - noname | nostart | version | format | read | open -% Reads tool information from a .tool file and adds it to the toolbar -% Returns the new window information -%---------------------------------------- -add_tool(Window,ToolFile) -> - case tool_info(ToolFile) of - {ok,ToolInfo} -> - case toolbar_graphics:already_added(Window,ToolInfo) of - true -> - {ok,Window}; - false -> - NewWindow = toolbar_graphics:add_icon(Window,ToolInfo), - {ok,NewWindow} - end; - {error,Reason} -> - %% Log - {error,Reason} - end. - - -%============================================================================= -% Functions for getting *.tool configuration files -%============================================================================= - -%---------------------------------------- -% tool_files(Dir) => ToolFiles -% Dir - string() Directory name -% ToolFiles - [string()] -% Return the list of all files in Dir ending with .tool (appended to Dir) -%---------------------------------------- -tool_files(Dir) -> - case file:list_dir(Dir) of - {ok,Files} -> - filter_tool_files(Dir,Files); - {error,_Reason} -> - [] - end. - -%---------------------------------------- -% filter_tool_files(Dir,Files) => ToolFiles -% Dir - string() Directory name -% Files, ToolFiles - [string()] File names -% Filters out the files in Files ending with .tool and append them to Dir -%---------------------------------------- -filter_tool_files(_Dir,[]) -> - []; -filter_tool_files(Dir,[File|Rest]) -> - case filename:extension(File) of - ".tool" -> - [filename:join(Dir,File)|filter_tool_files(Dir,Rest)]; - _ -> - filter_tool_files(Dir,Rest) - end. - - -%============================================================================= -% Functions for retrieving tool information from *.tool files -%============================================================================= - -%---------------------------------------- -% tool_info(ToolFile) => {ok,ToolInfo} | {error,Reason} -% ToolFile - string() .tool file -% ToolInfo - toolinfo record -% Reason - nofile | format | noname | nostart -% Retreives tool information from ToolFile -%---------------------------------------- -tool_info(ToolFile) -> - case file:consult(ToolFile) of - {error,open} -> - {error,nofile}; - {error,read} -> - {error,format}; - {ok,[{version,Vsn},InfoTuple]} when is_tuple(InfoTuple)-> - case toolbar_lib:tool_info_syntax(Vsn,InfoTuple) of - - %% Syntax check ok, start additional checks - {ok,InfoList} -> - - tool_info2(filename:dirname(ToolFile), - InfoList,#toolinfo{}); - - %% Syntax error - Error -> - Error - end; - {ok,[{version,Vsn},ToolInfo]} when is_list(ToolInfo)-> - case toolbar_lib:tool_info_syntax(Vsn,ToolInfo) of - - %% Syntax check ok, start additional checks - {ok,InfoList} -> - tool_info2(filename:dirname(ToolFile), - InfoList,#toolinfo{}); - - %% Syntax error - Error -> - Error - end; - {ok,_Other} -> - {error,format} - end. - -%---------------------------------------- -% tool_info2(Dir,Info,ToolInfo) => {ok,ToolInfo} -% Dir - string() Directory where this .tool file is situated -% Info - [{Key,Val}] List of tuples in the .tool file -% ToolInfo - toolinfo record being filled in -% Used by tool_info2/1 -%---------------------------------------- -%%% Tool name -tool_info2(Dir,[{tool,Name}|Rest],TI) -> - tool_info2(Dir,Rest,TI#toolinfo{tool=Name}); - -%%% Start function -tool_info2(Dir,[{start,{M,F,A}}|Rest],TI) -> - tool_info2(Dir,Rest,TI#toolinfo{start={M,F,A}}); - -%%% Icon file -%%% It must exist since the icon is drawn immediately after this .tool -%%% file has been successfully read -%%% It must also end with a .gif or .xbm suffix -%%% Otherwise the icon is ignored! -%%% Uses absolute path: If a relative path is given, it is assumed to be -%%% relative to the directory of the .tool file -tool_info2(Dir,[{icon,Icon}|Rest],TI) -> - - %% Check that the image file ends with .xbm or .gif - case image_suffix(Icon) of - true -> - - %% Add absolute path (if necessary) - File = absolute_path(Dir,Icon), - - case toolbar_lib:legal_file(File) of - ok -> - tool_info2(Dir,Rest,TI#toolinfo{icon=File}); - _Error -> - %% LOG File does not exist or cannot be read - tool_info2(Dir,Rest,TI) - end; - - false -> - %% LOG Illegal icon file name - tool_info2(Dir,Rest,TI) - end; - -%%% Message string -tool_info2(Dir,[{message,Msg}|Rest],TI) -> - tool_info2(Dir,Rest,TI#toolinfo{message=Msg}); - -%%% Html file is found -%%% Check if file exists at "view-time", not now! -%%% Uses absolute path: If a relative path is given, it is assumed to be -%%% relative to the directory of the .tool file -tool_info2(Dir,[{html,Html}|Rest],TI) -> - - %% Check if the HTML file is a remote URL or a local file - case Html of - - %% http://... Remote URL, save as is - [$h,$t,$t,$p,$:,$/,$/|_] -> - tool_info2(Dir,Rest,TI#toolinfo{html=Html}); - - %% file:... Local file, save file with absolute path - [$f,$i,$l,$e,$:|File] -> - tool_info2(Dir,Rest,TI#toolinfo{html=absolute_path(Dir,File)}); - - %% Everything else is assumed to be a file name - %% Save file with absolute path - _ -> - tool_info2(Dir,Rest,TI#toolinfo{html=absolute_path(Dir,Html)}) - end; - -%%% Info has been traversed -tool_info2(_Dir,[],ToolInfo) -> - {ok,ToolInfo}. - -%---------------------------------------- -% image_suffix(File) => true | false -% File - string() File name -% Returns true if File end with an image suffix: gif or xbm -%---------------------------------------- -image_suffix(File) -> - case filename:extension(File) of - ".gif" -> - true; - ".xbm" -> - true; - _ -> - false - end. - -%---------------------------------------- -% absolute_path(Dir,File) => string() -% Dir, File - string() -% Given a directory and a file name, return the appended result if the file -% name does not already contain an absolute path. -% Dir is supposed to be an absolute path, if it is '.', it is replaced -% with the current working directory. -%---------------------------------------- -absolute_path(".",File) -> - {ok,Cwd} = file:get_cwd(), - absolute_path(Cwd,File); -absolute_path(Dir,File) -> - filename:join(Dir,File). - - -%============================================================================= -% Start of a tool -%============================================================================= - -%---------------------------------------- -% start_tool({Module,Function,Arguments}, GSobj) -% Module - atom() Module name -% Function - atom() Function name -% Argument - [term()] Function arguments -% GSobj - gs_obj() -% Applies the given function in order to start a tool. -%---------------------------------------- -start_tool({M,F,A}, GSobj) -> - spawn(fun() -> start_tool(M, F, A, GSobj) end). - -start_tool(M,F,A,GSobj) -> - case catch apply(M,F,A) of - {'EXIT',Reason} -> - String1 = io_lib:format("Failed to call apply(~p,~p,~p)", - [M,F,A]), - String2 = io_lib:format("Reason: ~p",[Reason]), - tool_utils:notify(GSobj,[String1,String2]), - false; - _ -> - true - end. diff --git a/lib/toolbar/src/toolbar.hrl b/lib/toolbar/src/toolbar.hrl deleted file mode 100644 index 1793cd1833..0000000000 --- a/lib/toolbar/src/toolbar.hrl +++ /dev/null @@ -1,34 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Erlang Toolbar -% -%%% Common data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Tool configuration information --record(toolinfo, - {tool, - start, - icon=nofile, - message="", - html=nofile}). -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/lib/toolbar/src/toolbar_graphics.erl b/lib/toolbar/src/toolbar_graphics.erl deleted file mode 100644 index c4c4273c63..0000000000 --- a/lib/toolbar/src/toolbar_graphics.erl +++ /dev/null @@ -1,404 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(toolbar_graphics). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,read,2}}]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Erlang Toolbar -% -%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Toolbar graphics. -% The Toolbar window looks something like this: -% -% |-----------------------------| -% | File Tools Help | -% |-----------------------------| -% | |-----| |-----| |-----| | -% | | | | | | | | -% | |Icon1| |Icon2|...|IconN| | -% | |-----| |-----| |-----| | -% |-----------------------------| -% | Help text area | -% |-----------------------------| -% -%%% Includes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% --include("toolbar.hrl"). -% -%%% Internal data structures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Toolbar window record --record(tbwindow, - {window,menubar,canvas,labelframe, - label,helpmenu, - no_of_buttons, - min_height,min_width,cur_height,icons}). -% -%%% Constants %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Window width --define(width,215). -% -% Icon width and height --define(icon,34). -% -% Margin around icons --define(pad,0). -% -% Default label width and height --define(wlabel,50). --define(hlabel,15). -% -% Default button width and height --define(wbutton,50). --define(hbutton,30). -% -%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% --export([event/4]). --export([draw_window/1,redraw_window/2,already_added/2,add_icon/2]). --export([get_window/1]). --export([cursor/2]). --export([listen_configure/1]). --export([display_show/2,display_clear/1]). -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------- -% event(Data,GsEvent,Data,Args) => Event -% Data - term() -% GsEvent - GS event -% Data, Args - Data and Arg fields associated with the GS event -% Event - {display,String} | display_clear | noevent | {start,{M,F,A}} | -% update_toolbar | create_tool_file | add_gs_contribs | -% {help,Html} | about_help | {redraw,{Width,Height}} | quit | -% {newData,NewData} -% String - string() -% M, F - atom() Module and function name -% A - [term()] Function argument -% Html - string() HTML file | nofile -% Width, Height - integer() -% NewData - term() -% Tries to convert a GS event to an internal toolbar event. The separation -% is intented to keep the implementation details of the graphics hidden -% for toolbar.erl. Pure graphical events triggered by the GS event will -% be executed by this function. -% The Data field is used for saving information between different events -% (without having to use put/get or ets). Right now it is only used to save -% the coordinates of the last canvasbutton pressed, making it possible to -% check if the canvasbutton is released with the mouse moved outside the -% button (= no action) or with the mouse still inside the button (= action). -%---------------------------------------- -%%% Mouse enters a icon, display short help message -event(_LoopData,enter,{canvasbutton,_Cbtn,{_Start,{message,String}}},_Args) -> - {display,String}; - -%% Mouse leaves a icon, clear display area -event(_LoopData,leave,{canvasbutton,_Cbtn,_Data},_Args) -> - display_clear; - -%% An icon is pressed, create graphical illusion of this -event(_LoopData,buttonpress,{canvasbutton,Canvasbutton,_},_Args) -> - canvasbutton:press(Canvasbutton), - {newData,canvasbutton:read(Canvasbutton,coords)}; - -%% An icon is released, create graphical illusion of this -event(LoopData,buttonrelease,{canvasbutton,Cbtn,{{start,Start},_Msg}}, - [_,X,Y|_]) -> - canvasbutton:release(Cbtn), - case within(X,Y,LoopData) of - true -> - {start,Start}; - false -> - noevent - end; - -%%% Update Toolbar button pressed -event(_LoopData,click,_Data,["Update Toolbar"|_]) -> - update_toolbar; - -%%% Tool configuration button pressed -event(_LoopData,click,_Data,["Create Tool File..."|_]) -> - create_tool_file; - -%%% Add GS contribution button pressed -event(_LoopData,click,_Data,["Add GS Contributions"|_]) -> - add_gs_contribs; - -%%% Help menu button selected -event(_LoopData,click,{help,Html},_Args) -> - {help,Html}; - -%%% About Help menu button selected -event(_LoopData,click,about_help,_Args) -> - about_help; - -%% Window resized, redraw it -event(_LoopData,configure,_Data,[Width,Height|_]) -> - {redraw,{Width,Height}}; - -%%% Quit button pressed -event(_LoopData,click,_Data,["Quit"|_]) -> - quit; - -%%% Window closed -event(_LoopData,destroy,_Data,_Args) -> - quit; - -event(_LoopData,_GsEvent,_Data,_Args) -> - noevent. - -%============================================================================= -% Main window functions -%============================================================================= - -%---------------------------------------- -% draw_window(S) => Window -% S - pid() GS -% Window - tbwindow record -% This functions create the main window, initially without any tool icons -%---------------------------------------- -draw_window(S) -> - - Norm = ?icon + 2*?pad, - - %% Main window - Win = gs:create(window,S,[{title,"Erlang Tools"},{width,?width}]), - - %% Menu bar with menu buttons - Menubar = gs:create(menubar,Win,[]), - - %% File menu - File = gs:create(menubutton,Menubar,[{label,{text,"File"}},{side,left}]), - FileM = gs:create(menu,File,[]), - gs:create(menuitem,FileM,[{label,{text,"Update Toolbar"}}]), - gs:create(menuitem,FileM,[{label,{text,"Quit"}}]), - - %% Tools menu - Tool = gs:create(menubutton,Menubar,[{label,{text,"Tools"}},{side,left}]), - ToolM = gs:create(menu,Tool,[]), - gs:create(menuitem,ToolM,[{label,{text,"Create Tool File..."}}]), - gs:create(menuitem,ToolM,[{label,{text,"Add GS Contributions"}}]), - - %% Help menu - Help = gs:create(menubutton,Menubar,[{label,{text,"Help"}},{side,right}]), - HelpM = gs:create(menu,Help,[]), - gs:create(menuitem,HelpM,[{label,{text,"About..."}}, - {data,about_help}]), - gs:create(menuitem,HelpM,[{label,{text,"Toolbar"}}, - {data,{help,toolbar_lib:help_file()}}]), - gs:create(menuitem,HelpM,[{label,{text,"OTP"}}, - {data,{help,toolbar_lib:otp_file()}}]), - gs:create(menuitem,HelpM,[{itemtype,separator}]), - - %% Check height of menu bar - H = gs:read(Menubar,height), - - %% Now the height of the window can be computed - Height = H+Norm+?hlabel+2*?pad, - gs:config(Win,{height,Height}), - - %% Canvas, here will the Tool canvasbuttons be inserted - Canvas = gs:create(canvas,Win,[{width,?width},{height,Norm},{x,0},{y,H}]), - - %% Label for displaying help messages and the frame containing it - LabelF = gs:create(frame,Win,[{bg,green},{bw,1}, - {width,?width},{height,?hlabel+2*?pad}, - {x,0},{y,H+Norm}]), - Label = gs:create(label,LabelF,[{align,w},{height,?hlabel}, - {width,?width},{x,?pad},{y,?pad}, - {label,{text,string:copies(" ",30)}}]), - - gs:config(Win,{map,true}), - - #tbwindow{window=Win, - menubar=Menubar,canvas=Canvas,labelframe=LabelF, - label=Label,helpmenu=HelpM, - no_of_buttons=0, - min_height=Height,min_width=?width,cur_height=Height, - icons=[]}. - -%---------------------------------------- -% redraw_window(Window,{NewWidth,NewHeight}) => NewWindow -% Window, NewWindow - tbwindow record -% NewWidth, NewHeight - integer() -% Redraw main window contents according to a new size -%---------------------------------------- -redraw_window(Window,{NewWidth,NewHeight}) -> - - MinWidth = Window#tbwindow.min_width, - if - NewWidth=<MinWidth -> - true; - true -> - gs:config(Window#tbwindow.canvas,{width,NewWidth}), - gs:config(Window#tbwindow.labelframe,{width,NewWidth}), - gs:config(Window#tbwindow.label,{width,NewWidth-2*?pad}) - end, - - MinHeight = Window#tbwindow.min_height, - if - NewHeight=<MinHeight -> - Window; - true -> - - %% Compute size difference - Diff = NewHeight - Window#tbwindow.cur_height, - - %% Resize button frame - Canvas = Window#tbwindow.canvas, - gs:config(Canvas,{height,gs:read(Canvas,height)+Diff}), - - %% Move label frame accordingly - LabelF = Window#tbwindow.labelframe, - gs:config(LabelF,{y,gs:read(LabelF,y)+Diff}), - - %% Return updated tbwindow record - Window#tbwindow{cur_height=NewHeight} - end. - -%---------------------------------------- -% already_added(Window,ToolInfo) => true | false -% Window - tbwindow record -% ToolInfo - toolinfo record -% Returns true if ToolInfo contains information about a tool that -% is already included in Window -%---------------------------------------- -already_added(Window,ToolInfo) -> - already_added2(Window#tbwindow.icons,ToolInfo#toolinfo.tool). - -%---------------------------------------- -% already_added2(ToolInfos,Tool) => true | false -% ToolInfos - [toolinfo record] -% Tool - atom() Tool name -%---------------------------------------- -already_added2([#toolinfo{tool=Tool}|_Rest],Tool) -> - true; -already_added2([_|Rest],Tool) -> - already_added2(Rest,Tool); -already_added2([],_ToolInfo) -> - false. - -%---------------------------------------- -% add_icon(Window,ToolInfo) => NewWindow -% Window, NewWindow - tbwindow record -% ToolInfo - toolinfo record -% Add an icon to the main window -%---------------------------------------- -add_icon(Window,ToolInfo) -> - Norm = ?icon + 2*?pad, - - %% Extend window if necessary - N = Window#tbwindow.no_of_buttons, - ReqWidth = N*Norm+Norm, - CurWidth = gs:read(Window#tbwindow.window,width), - if - ReqWidth>CurWidth -> - gs:config(Window#tbwindow.window,{width,ReqWidth}), - gs:config(Window#tbwindow.canvas,{width,ReqWidth}), - gs:config(Window#tbwindow.labelframe,{width,ReqWidth}), - gs:config(Window#tbwindow.label,{width,ReqWidth-2*?pad}); - true -> - true - end, - - %% Insert icon into button frame - canvasbutton:create(Window#tbwindow.canvas, - [{image,ToolInfo#toolinfo.icon}, - {x,N*Norm+?pad},{y,?pad}, - {width,?icon},{height,?icon}, - {data,{{start,ToolInfo#toolinfo.start}, - {message,ToolInfo#toolinfo.message}}}]), - - %% Insert tool name into help menu (if there is any help available) - case ToolInfo#toolinfo.html of - nofile -> - true; - Html -> - gs:create(menuitem,Window#tbwindow.helpmenu, - [{label,{text,ToolInfo#toolinfo.tool}}, - {data,{help,Html}}]) - end, - - MinWidth = gs:read(Window#tbwindow.window,width), - Window#tbwindow{no_of_buttons=N+1,min_width=MinWidth, - icons=[ToolInfo|Window#tbwindow.icons]}. - -%---------------------------------------- -% get_window(Window) -> gs_obj() -% Window - tbwindow record -%---------------------------------------- -get_window(Window) -> - Window#tbwindow.window. - -%---------------------------------------- -% cursor(Window,Cursor) -% Window - tbwindow record -% Cursor - arrow | busy -%---------------------------------------- -cursor(Window,Cursor) -> - gs:config(Window#tbwindow.window,{cursor,Cursor}). - -%---------------------------------------- -% listen_configure(Window) -% Window - tbwindow record -% Configure Window to listen for configure events -%---------------------------------------- -listen_configure(Window) -> - gs:config(Window#tbwindow.window,{configure,true}). - -%---------------------------------------- -% display_show(Window,Text) -% Window - tbwindow record -% Text - string() -% Display text in the help text area -%---------------------------------------- -display_show(Window,Text) -> - gs:config(Window#tbwindow.label,{label,{text,Text}}). - -%---------------------------------------- -% display_clear(Window) -% Window - tbwindow record -% Clear the help text area -%---------------------------------------- -display_clear(Window) -> - display_show(Window,""). - -%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------- -% within(X,Y,[{Left,Top},{Right,Bot}]) => true | false -% Return true if {X,Y} is within the given rectangle. -%---------------------------------------- -within(X,Y,[{L,T},{R,B}]) -> - if - X>=L, - X=<R, - Y>=T, - Y=<B -> - true; - true -> - false - end. diff --git a/lib/toolbar/src/toolbar_lib.erl b/lib/toolbar/src/toolbar_lib.erl deleted file mode 100644 index 9d3b9fdeb5..0000000000 --- a/lib/toolbar/src/toolbar_lib.erl +++ /dev/null @@ -1,223 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(toolbar_lib). --include_lib("kernel/include/file.hrl"). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Erlang Toolbar -% -%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Library functions -% -%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% --export([gs_contribs_dir/0,help_file/0,otp_file/0]). --export([error_string/1]). --export([legal_file/1]). --export([insert_newlines/1]). --export([tool_info_syntax/2]). -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------- -% gs_contribs_dir() => string() -% Return the directory of the GS contributions -%---------------------------------------- -gs_contribs_dir() -> - filename:join(code:lib_dir(gs),"contribs/ebin/"). - -%---------------------------------------- -% help_file() => string() -% Returns the address to the toolbar help file -%---------------------------------------- -help_file() -> - filename:join([code:lib_dir(toolbar),"doc", "html", "index.html"]). - -%---------------------------------------- -% otp_file() => string() -% Returns the address to the OTP documentation -%---------------------------------------- -otp_file() -> - filename:join([code:root_dir(),"doc", "index.html"]). - -%---------------------------------------- -% error_string(Reason) => string() -% Reason - nofile | format | noname | nostart | illegal | raccess | waccess -% Given Reason, returns a short "explanation string" -%---------------------------------------- -error_string(nofile) -> "File does not exist"; -error_string(format) -> "File on wrong format"; - -error_string(noname) -> "No tool name is specified"; -error_string(nostart) -> "No start function is specified"; - -error_string(illegal) -> "Illegal file name"; - -error_string(raccess) -> "File is not readable"; -error_string(waccess) -> "File is not writeable". - -%---------------------------------------- -% legal_file(File) => ok | directory | {error,nofile} | {error,raccess} -% File - string() File name -% Checks if File is an existing and readable file. -%---------------------------------------- -legal_file(File) -> - case file:read_file_info(File) of - - %% File exists... - {ok,#file_info{type=regular,access=Access}} -> - if - - %% ...but is read protected - Access/=read, - Access/=read_write -> - {error,raccess}; - - %% ...and is possible to read - true -> - ok - end; - - {ok,#file_info{type=directory}} -> - directory; - - %% File does not exist - _Error -> - {error,nofile} - end. - -%---------------------------------------- -% insert_newlines(Strings) => string() -% Strings - string() | [string()] -% If Strings is a list of strings, return a string where all these strings -% are concatenated with newlines in between, otherwise return Strings. -%---------------------------------------- -insert_newlines([String|Rest]) when is_list(String), Rest/=[]-> - String ++ "\n" ++ insert_newlines(Rest); -insert_newlines([Last]) -> - [Last]; -insert_newlines(Other) -> - Other. - -%---------------------------------------- -% tool_info_syntax(Version,ToolInfo) => {ok,CorrToolInfo} | {error,Reason} -% Version - string() -% ToolInfo - tuple() -% CorrToolInfo - list() -% Reason - version | format | noname | nostart -% Return a corrected (blanks removed etc) version of ToolInfo -% if the syntax of ToolInfo is correct (ie contains all -% mandatory elements and all values are of the specified type). -% -% Currently accepted versions: -% "0.1" (which should be "1.0") -% "1.1" (same as "0.1") -%---------------------------------------- -tool_info_syntax("1.1",ToolInfo) -> - tool_info_syntax("0.1",ToolInfo); -tool_info_syntax("0.1",ToolInfo) when is_tuple(ToolInfo) -> - syntax01(tuple_to_list(ToolInfo),false,false,[]); -tool_info_syntax("0.1",_) -> - {error,format}; -tool_info_syntax("1.2",ToolInfo) when is_list(ToolInfo)-> - syntax01(ToolInfo,false,false,[]); -tool_info_syntax(_Vsn,_) -> - {error,version}. - - -%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------- -% syntax01(List,NameF,StartF,Res) => {ok,Res} | {error,Reason} -% List - [tuple()] -% NameF, StartF - boolean() -% Res - [tuple()] -% Reason - format | noname | nostart -% Version 0.1 syntax check of .tool file. -%---------------------------------------- -syntax01([{tool,Str}|Rest],false,StartF,Res) when is_list(Str) -> - case string:strip(Str) of - [] -> - {error,format}; - Tool -> - syntax01(Rest,true,StartF,[{tool,Tool}|Res]) - end; -syntax01([{start,{M,F,A}}|Rest],NameF,false,Res) when is_atom(M), - is_atom(F), - is_list(A) -> - syntax01(Rest,NameF,true,[{start,{M,F,A}}|Res]); -syntax01([{icon,Str}|Rest],NameF,StartF,Res) when is_list(Str) -> - case string:strip(Str) of - [] -> - syntax01(Rest,NameF,StartF,Res); - Icon -> - syntax01(Rest,NameF,StartF,[{icon,Icon}|Res]) - end; -syntax01([{message,Str}|Rest],NameF,StartF,Res) when is_list(Str) -> - case string:strip(Str) of - [] -> - syntax01(Rest,NameF,StartF,Res); - Message -> - syntax01(Rest,NameF,StartF, - [{message,lists:sublist(Message,1,30)}|Res]) - end; -syntax01([{html,Str}|Rest],NameF,StartF,Res) when is_list(Str) -> - case string:strip(Str) of - [] -> - syntax01(Rest,NameF,StartF,Res); - Html -> - syntax01(Rest,NameF,StartF,[{html,Html}|Res]) - end; -%%The fields used by webtool must be removed -syntax01([_|Rest],NameF,StartF,Res) -> - syntax01(Rest,NameF,StartF,Res); - -syntax01([],true,true,Res) -> - {ok,Res}; -syntax01([],false,_,_) -> - {error,noname}; -syntax01([],_,false,_) -> - {error,nostart}; -syntax01(_,_,_,_) -> - {error,format}. - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/toolbar/src/toolbar_toolconfig.erl b/lib/toolbar/src/toolbar_toolconfig.erl deleted file mode 100644 index 479033fa22..0000000000 --- a/lib/toolbar/src/toolbar_toolconfig.erl +++ /dev/null @@ -1,549 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%% --module(toolbar_toolconfig). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,0}}]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Erlang Toolbar -% -%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Tool configuration tool, edit and creates .tool files -% This tool works separately from the toolbar. -% -%%% External data types %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% toolinfo() -- Tool configuration information --include("toolbar.hrl"). -% -%%% Internal data types %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% tfwindow() -- Toolfile configuration window --record(tfwindow, - {window, - fileentry, - toolentry,moduleentry,functionentry, - iconentry,messageentry,htmlentry, - label}). -% -%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% --export([start/0]). -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - --export([init/0]). % spawn - - -%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%---------------------------------------- -% start() => pid() -%---------------------------------------- -start() -> - spawn(toolbar_toolconfig,init,[]). - - -%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%============================================================================= -% Main loop -%============================================================================= - -%---------------------------------------- -% init() -%---------------------------------------- -init() -> - - %% Start GS (or get the pid if it is already running) - S = gs:start(), - - %% Draw the window - Window = draw_window(S), - - loop(S,Window). - -%---------------------------------------- -% loop(S,Window) -% S - pid() GS -% Window - tfwindow() -%---------------------------------------- -loop(S,Window) -> - receive - - %% 'Return' pressed in the 'File' entry - {gs,_Obj,keypress,file,['Return'|_]} -> - - %% Check if a file name is specified - case string:strip(gs:read(Window#tfwindow.fileentry,text)) of - - %% No file name specified, move focus to next entry - "" -> - move_focus(Window,file); - - %% A name is specified - String -> - - %% Add a .tool suffix to the file name if necessary - FileName = tool_file(String), - - %% Write the complete file name to the file entry - gs:config(Window#tfwindow.fileentry,{text,FileName}), - - %% Try to open the file - case file:consult(FileName) of - - %% File exists and seems ok - {ok,[{version,Vsn},T]} -> - - %% Check the syntax of the file contents - %% (All mandatory information specified, - %% correct types, etc) - case toolbar_lib:tool_info_syntax(Vsn,T) of - - %% Ok -- Show the file contents in the window - %% and move focus to the next entry - {ok,Info} -> - display(Window,"File: "++FileName++ - " opened"), - clear_info(Window), - show_info(Window,Info), - move_focus(Window,file); - - %% Erroneous version number -- Notify user - {error,version} -> - Win = Window#tfwindow.window, - tool_utils:notify(Win,[FileName, - "File has wrong version number"]); - - %% Other error -- Notify user - _Error -> - Win = Window#tfwindow.window, - tool_utils:notify(Win,[FileName, - "File is in erroneous format"]) - end; - - %% The file can not be read, show default values - %% according to the file name in the window and - %% move focus to the next entry - _ -> - display(Window,"File: "++FileName ++ - " could not be read, new file"), - Tool = filename:basename(FileName,".tool"), - clear_info(Window), - show_info(Window,[{tool,Tool}, - {start,{list_to_atom(Tool), - start,[]}}, - {icon,Tool++".gif"}, - {html,Tool++".html"}]), - move_focus(Window,file) - end - end, - loop(S,Window); - - %% 'Return' pressed in another entry, move focus to next entry - {gs,_Obj,keypress,Focus,['Return'|_]} -> - move_focus(Window,Focus), - loop(S,Window); - - %% Any oher keypress, clear the display - {gs,_Obj,keypress,_Data,_Args} -> - display_clear(Window), - loop(S,Window); - - %% 'Clear' button pressed, clear the window - {gs,_Obj,click,_Data,["Clear"|_]} -> - clear_info(Window), - loop(S,Window); - - %% 'Save' button pressed, save the given information to file - {gs,_Obj,click,_Data,["Save"|_]} -> - - %% Check if a file name is specified - case string:strip(gs:read(Window#tfwindow.fileentry,text)) of - - %% No file name specified, notify user - "" -> - Win = Window#tfwindow.window, - tool_utils:notify(Win, - "A file name must be specified"); - - %% A name is specified - String -> - - %% Add a .tool suffix to the file name if necessary - FileName = tool_file(String), - - %% Write the complete file name to the file entry - gs:config(Window#tfwindow.fileentry,{text,FileName}), - - %% Check the other information given - case check_info(Window) of - - %% If given info is correct, try to save - %% it to the file - {ok,ToolInfo} -> - Win = Window#tfwindow.window, - case save_info(Win,FileName,ToolInfo) of - - %% Ok, display confirmation - ok -> - display(Window, - "Tool information saved to "++ - FileName); - - %% Cancel, do nothing - cancel -> - ignore; - - %% Error, display error message - {error,Reason} -> - display(Window, - toolbar_lib:error_string(Reason)++ - FileName) - end; - - %% Given info incorrect, notify user - {error,Reason} -> - Win = Window#tfwindow.window, - Str = toolbar_lib:error_string(Reason), - tool_utils:notify(Win,Str) - end - end, - loop(S,Window); - - %% 'Stop' button, close window and exit - {gs,_Obj,click,_Data,["Stop"|_]} -> - gs:destroy(Window#tfwindow.window), - finished; - - %% Window closed, exit - {gs,_Obj,destroy,_Data,_Args} -> - finished; - - Other -> - io:format("toolbar_toolconfig: unexp msg: ~p~n",[Other]), - loop(S,Window) - end. - - -%============================================================================= -% Graphics -%============================================================================= - -%---------------------------------------- -% draw_window(S) -% S - pid() GS -% Draw the main window. -%---------------------------------------- -draw_window(S) -> - - %% ----- Open a new window ----- - Win = gs:create(window,S,[{width,400},{height,390}, - {title,"Create Tool File"}]), - - %% ----- Top frame containing a 'File name' label and entry ----- - Top = gs:create(frame,Win,[{x,0},{y,0},{width,400},{height,60},{bw,2}, - {keypress,true}]), - - %% File name - gs:create(label,Top,[{x,10},{y,10},{width,80},{height,30},{align,e}, - {keypress,true}, - {label,{text,"File name:"}}]), - File = gs:create(entry,Top,[{x,110},{y,10},{width,280},{height,30}, - {keypress,true},{data,file}]), - - %% ----- Middle frame containing other labels and entries ----- - Mid = gs:create(frame,Win,[{x,0},{y,60},{width,400},{height,250},{bw,2}, - {keypress,true}]), - - %% Tool name - gs:create(label,Mid,[{x,10},{y,10},{width,80},{height,30},{align,e}, - {keypress,true}, - {label,{text,"Tool name:"}}]), - Tool = gs:create(entry,Mid,[{x,110},{y,10},{width,280},{height,30}, - {keypress,true},{data,tool}]), - - %% Start function - gs:create(label,Mid,[{x,10},{y,60},{width,80},{height,30},{align,e}, - {keypress,true}, - {label,{text,"Start:"}}]), - Mod = gs:create(entry,Mid,[{x,110},{y,60},{width,135},{height,30}, - {keypress,true},{data,module}]), - Fun = gs:create(entry,Mid,[{x,245},{y,60},{width,135},{height,30}, - {keypress,true},{data,function}]), - - %% Icon file - gs:create(label,Mid,[{x,10},{y,110},{width,80},{height,30},{align,e}, - {keypress,true}, - {label,{text,"Icon file:"}}]), - Icon = gs:create(entry,Mid,[{x,110},{y,110},{width,280},{height,30}, - {keypress,true},{data,icon}]), - - %% Message - gs:create(label,Mid,[{x,10},{y,160},{width,80},{height,30},{align,e}, - {keypress,true}, - {label,{text,"Message:"}}]), - Msg = gs:create(entry,Mid,[{x,110},{y,160},{width,280},{height,30}, - {keypress,true},{data,message}]), - - %% HTML file - gs:create(label,Mid,[{x,10},{y,210},{width,80},{height,30},{align,e}, - {keypress,true}, - {label,{text,"HTML:"}}]), - Html = gs:create(entry,Mid,[{x,110},{y,210},{width,280},{height,30}, - {keypress,true},{data,html}]), - - %% ----- Bottom frame containing the buttons ----- - Bot = gs:create(frame,Win,[{x,0},{y,310},{width,400},{height,50}, - {bw,2},{keypress,true}]), - - gs:create(button,Bot,[{x,75},{y,10},{width,50},{height,30}, - {keypress,true}, - {label,{text,"Clear"}}]), - gs:create(button,Bot,[{x,175},{y,10},{width,50},{height,30}, - {keypress,true}, - {label,{text,"Save"}}]), - gs:create(button,Bot,[{x,275},{y,10},{width,50},{height,30}, - {keypress,true}, - {label,{text,"Stop"}}]), - - %% ----- Label for displaying help messages ----- - Lbl = gs:create(label,Win,[{x,0},{y,360},{width,400},{height,30},{bw,2}, - {relief,raised}, - {keypress,true}, - {align,c},{label,{text,""}}]), - - gs:config(Win,{map,true}), - gs:config(File,{setfocus,true}), - - #tfwindow{window=Win, - fileentry=File, - toolentry=Tool, - moduleentry=Mod, - functionentry=Fun, - iconentry=Icon, - messageentry=Msg, - htmlentry=Html, - label=Lbl}. - -%---------------------------------------- -% move_focus(Window,Focus) -% Window - tfwindow() -% Focus - file | tool | module | function | icon | message | html | none -% Move the input focus to the entry following Focus -%---------------------------------------- -move_focus(Window,file) -> - gs:config(Window#tfwindow.toolentry,{setfocus,true}); -move_focus(Window,tool) -> - gs:config(Window#tfwindow.moduleentry,{setfocus,true}); -move_focus(Window,module) -> - gs:config(Window#tfwindow.functionentry,{setfocus,true}); -move_focus(Window,function) -> - gs:config(Window#tfwindow.iconentry,{setfocus,true}); -move_focus(Window,icon) -> - gs:config(Window#tfwindow.messageentry,{setfocus,true}); -move_focus(Window,message) -> - gs:config(Window#tfwindow.htmlentry,{setfocus,true}); -move_focus(Window,html) -> - gs:config(Window#tfwindow.htmlentry,{setfocus,false}); -move_focus(_Window,none) -> - true. - -%---------------------------------------- -% display(Window,Text) -% Window - tfwindow() -% Text - string() -% Display a help message in the window -%---------------------------------------- -display(Window,Text) -> - gs:config(Window#tfwindow.label,{label,{text,Text}}). - -%---------------------------------------- -% display_clear(Window) -% Window - tfwindow() -% Clear the help message display -%---------------------------------------- -display_clear(Window) -> - display(Window,""). - -%---------------------------------------- -% clear_info(Window) -% Window - tfwindow() -% Clear the entries of Window (except the file entry) -%---------------------------------------- -clear_info(Window) -> - gs:config(Window#tfwindow.toolentry,{text,""}), - gs:config(Window#tfwindow.moduleentry,{text,""}), - gs:config(Window#tfwindow.functionentry,{text,""}), - gs:config(Window#tfwindow.iconentry,{text,""}), - gs:config(Window#tfwindow.messageentry,{text,""}), - gs:config(Window#tfwindow.htmlentry,{text,""}). - -%---------------------------------------- -% show_info(Window,List) -% Window - tfwindow() -% List - [{Key,Val}] -% Key - tool, Val - string() -% Key - start, Val - {atom(),atom(),_} -% Key - icon, Val - string() -% Key - message, Val - string() -% Key - html, Val - string() -% Display the different Val's in the appropriate entries of Window -%---------------------------------------- -show_info(_Window,[]) -> - ok; -show_info(Window,[{tool,Tool}|Rest]) -> - gs:config(Window#tfwindow.toolentry,{text,Tool}), - show_info(Window,Rest); -show_info(Window,[{start,{M,F,_}}|Rest]) -> - gs:config(Window#tfwindow.moduleentry,{text,M}), - gs:config(Window#tfwindow.functionentry,{text,F}), - show_info(Window,Rest); -show_info(Window,[{icon,Icon}|Rest]) -> - gs:config(Window#tfwindow.iconentry,{text,Icon}), - show_info(Window,Rest); -show_info(Window,[{message,Message}|Rest]) -> - gs:config(Window#tfwindow.messageentry,{text,Message}), - show_info(Window,Rest); -show_info(Window,[{html,Html}|Rest]) -> - gs:config(Window#tfwindow.htmlentry,{text,Html}), - show_info(Window,Rest). - - -%============================================================================= -% Retrieve user specified information -%============================================================================= - -%---------------------------------------- -% check_info(Window) => {ok,ToolInfo} | {error,Reason} -% Window - tfwindow() -% ToolInfo - toolinfo() -% Reason - noname | nostart -% Check the information given in the entries and insert it into ToolInfo -% if all mandatory information is given. -%---------------------------------------- -check_info(Window) -> - - %% First check mandatory elements: name and start function - Tool = gs:read(Window#tfwindow.toolentry,text), - M = gs:read(Window#tfwindow.moduleentry,text), - F = gs:read(Window#tfwindow.functionentry,text), - - if - Tool/="",M/="",F/="" -> - ToolInfo = - #toolinfo{tool=Tool, - start={list_to_atom(M),list_to_atom(F),[]}, - icon=gs:read(Window#tfwindow.iconentry,text), - message=gs:read(Window#tfwindow.messageentry,text), - html=gs:read(Window#tfwindow.htmlentry,text)}, - {ok,ToolInfo}; - - Tool=="" -> - {error,noname}; - - true -> - {error,nostart} - end. - - -%============================================================================= -% Save information to file -%============================================================================= - -%---------------------------------------- -% save_info(Win,File,ToolInfo) => ok | cancel | {error,waccess} -% Win - GS object -% File - string() -% ToolInfo - toolinfo() -% Saves the information in ToolInfo to File on a predefined format. -%---------------------------------------- -save_info(Win,File,ToolInfo) -> - - %% First check if file already exists - case file:read_file_info(File) of - {ok,_FileInfo} -> - - %% Request the user to confirm that the file should - %% be overwritten - case tool_utils:confirm(Win,[File, - "exists, will be overwritten"]) of - ok -> - save_info2(File,ToolInfo); - cancel -> - cancel - end; - - {error,_Reason} -> % _Reason = "No such file or directory" - save_info2(File,ToolInfo) - end. - -%---------------------------------------- -% save_info2(File,ToolInfo) => ok | {error,waccess} -% File - string() File name -% ToolInfo - toolinfo record -% Called by save_info/3 -%---------------------------------------- -save_info2(File,ToolInfo) -> - case file:open(File, [write]) of - {ok,Fd} -> - io:format(Fd,"{version,\"~s\"}.~n",[toolbar:version()]), - io:format(Fd,"{{tool,\"~s\"},~n",[ToolInfo#toolinfo.tool]), - io:format(Fd," {start,~w}",[ToolInfo#toolinfo.start]), - case ToolInfo#toolinfo.icon of - "" -> ignore; - Icon -> io:format(Fd,",~n {icon,\"~s\"}",[Icon]) - end, - case ToolInfo#toolinfo.message of - "" -> ignore; - Message -> io:format(Fd,",~n {message,\"~s\"}",[Message]) - end, - case ToolInfo#toolinfo.html of - "" -> ignore; - Html -> io:format(Fd,",~n {html,\"~s\"}",[Html]) - end, - io:format(Fd,"}.~n",[]), - file:close(Fd), - ok; - _Error -> - {error,waccess} - end. - - -%============================================================================= -% Auxiliary functions -%============================================================================= - -%---------------------------------------- -% tool_file(File) => string() -% File - string() -% Return a file name consisting of File with the suffix .tool added, -% if File does not already have this suffix. -%---------------------------------------- -tool_file(File) -> - case filename:extension(File) of - ".tool" -> File; - _ -> File ++ ".tool" - end. diff --git a/lib/toolbar/vsn.mk b/lib/toolbar/vsn.mk deleted file mode 100644 index e84fb4e37b..0000000000 --- a/lib/toolbar/vsn.mk +++ /dev/null @@ -1,10 +0,0 @@ -TOOLBAR_VSN = 1.4.2.3 - - - - - - - - - diff --git a/lib/tools/test/xref_SUITE.erl b/lib/tools/test/xref_SUITE.erl index 3e9eaf259c..353275ae3b 100644 --- a/lib/tools/test/xref_SUITE.erl +++ b/lib/tools/test/xref_SUITE.erl @@ -1098,6 +1098,7 @@ read_expected(Version) -> {POS1+1,{FF,{mod17,fun17,0}}}, {POS1+2,{FF,{erlang,spawn,1}}}, {POS1+2,{FF,{read,local,0}}}, + {POS1+3,{FF,{erlang,binary_to_term,1}}}, {POS1+3,{FF,{erlang,spawn,1}}}, {POS1+4,{FF,{dist,func,0}}}, {POS1+4,{FF,{erlang,spawn,1}}}, @@ -1206,7 +1207,6 @@ read_expected(Version) -> OKB1 = [{POS13+1,{FF,{erts_debug,apply,4}}}, {POS13+2,{FF,{erts_debug,apply,4}}}, {POS13+3,{FF,{erts_debug,apply,4}}}, - {POS1+3, {FF,{erlang,binary_to_term,1}}}, {POS3+1, {FF,{erlang,spawn,3}}}, {POS3+2, {FF,{erlang,spawn,3}}}, {POS3+3, {FF,{erlang,spawn_link,3}}}, diff --git a/lib/tv/AUTHORS b/lib/tv/AUTHORS deleted file mode 100644 index 7736a75b2f..0000000000 --- a/lib/tv/AUTHORS +++ /dev/null @@ -1,5 +0,0 @@ -Original Authors and Contributors: - -Fredrik Gustafson - - diff --git a/lib/tv/Makefile b/lib/tv/Makefile deleted file mode 100644 index 1c6d4b54f6..0000000000 --- a/lib/tv/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1997-2009. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Common Macros -# ---------------------------------------------------- - -SUB_DIRECTORIES = src priv doc/src - -include vsn.mk -VSN = $(TV_VSN) - -SPECIAL_TARGETS = - -# ---------------------------------------------------- -# Default Subdir Targets -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_subdir.mk diff --git a/lib/tv/doc/html/.gitignore b/lib/tv/doc/html/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/tv/doc/html/.gitignore +++ /dev/null diff --git a/lib/tv/doc/man3/.gitignore b/lib/tv/doc/man3/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/tv/doc/man3/.gitignore +++ /dev/null diff --git a/lib/tv/doc/pdf/.gitignore b/lib/tv/doc/pdf/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/tv/doc/pdf/.gitignore +++ /dev/null diff --git a/lib/tv/doc/src/Makefile b/lib/tv/doc/src/Makefile deleted file mode 100644 index 413eb8f634..0000000000 --- a/lib/tv/doc/src/Makefile +++ /dev/null @@ -1,138 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1997-2012. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Application version -# ---------------------------------------------------- -include ../../vsn.mk -VSN=$(TV_VSN) -APPLICATION=tv - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN) - -# ---------------------------------------------------- -# Target Specs -# ---------------------------------------------------- -XML_APPLICATION_FILES = ref_man.xml -XML_REF3_FILES = tv.xml - -XML_PART_FILES = \ - part.xml \ - part_notes.xml - -XML_CHAPTER_FILES = \ - table_visualizer_chapter.xml \ - notes.xml - -BOOK_FILES = book.xml - -XML_FILES = \ - $(BOOK_FILES) $(XML_CHAPTER_FILES) \ - $(XML_PART_FILES) $(XML_REF3_FILES) $(XML_APPLICATION_FILES) - -GIF_FILES = tv_start.gif \ - tv_start_mnesia.gif \ - tv_start_system.gif \ - tv_start_system_unreadable.gif \ - tv_start_pid_sorted.gif \ - tv_start_other_node.gif \ - tv_table_browser.gif \ - tv_table_browser_updated.gif \ - set_poll_int.gif \ - tv_record_editor_mnesia.gif \ - tv_search_window.gif \ - tv_search_result.gif \ - tv_row_marked.gif \ - tv_row_marked_popup.gif \ - info_window.gif \ - tv_create_table.gif - -# ---------------------------------------------------- - -HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \ - $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html) - -INFO_FILE = ../../info -EXTRA_FILES = \ - $(DEFAULT_GIF_FILES) \ - $(DEFAULT_HTML_FILES) \ - $(XML_REF3_FILES:%.xml=$(HTMLDIR)/%.html) \ - $(XML_CHAPTER_FILES:%.xml=$(HTMLDIR)/%.html) - -MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3) - -HTML_REF_MAN_FILE = $(HTMLDIR)/index.html - -TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf - -# ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- -XML_FLAGS += -DVIPS_FLAGS += - -# ---------------------------------------------------- -# Targets -# ---------------------------------------------------- -$(HTMLDIR)/%.gif: %.gif - $(INSTALL_DATA) $< $@ - -docs: pdf html man - -$(TOP_PDF_FILE): $(XML_FILES) - -pdf: $(TOP_PDF_FILE) - -html: gifs $(HTML_REF_MAN_FILE) - - -clean clean_docs: - rm -rf $(HTMLDIR)/* - rm -f $(MAN3DIR)/* - rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo) - rm -f errs core *~ - -man: $(MAN3_FILES) - -gifs: $(GIF_FILES:%=$(HTMLDIR)/%) - -debug opt: - - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_docs_spec: docs - $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DIR) "$(RELSYSDIR)/doc/html" - $(INSTALL_DATA) $(HTMLDIR)/* \ - "$(RELSYSDIR)/doc/html" - $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)" - $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3" - $(INSTALL_DATA) $(MAN3_FILES) "$(RELEASE_PATH)/man/man3" - -release_spec: - diff --git a/lib/tv/doc/src/book.xml b/lib/tv/doc/src/book.xml deleted file mode 100644 index b0d05d290b..0000000000 --- a/lib/tv/doc/src/book.xml +++ /dev/null @@ -1,48 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE book SYSTEM "book.dtd"> - -<book xmlns:xi="http://www.w3.org/2001/XInclude"> - <header titlestyle="normal"> - <copyright> - <year>1997</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>Table Visualizer (TV)</title> - <prepared></prepared> - <docno></docno> - <date></date> - <rev>2.0.3</rev> - </header> - <insidecover> - </insidecover> - <pagetext>Table Visualizer (TV)</pagetext> - <preamble> - </preamble> - <parts lift="no"> - <xi:include href="part.xml"/> - </parts> - <applications> - <xi:include href="ref_man.xml"/> - </applications> - <releasenotes> - <xi:include href="notes.xml"/> - </releasenotes> - <listofterms></listofterms> - <index></index> -</book> - - diff --git a/lib/tv/doc/src/fascicules.xml b/lib/tv/doc/src/fascicules.xml deleted file mode 100644 index c075478967..0000000000 --- a/lib/tv/doc/src/fascicules.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE fascicules SYSTEM "fascicules.dtd"> - -<fascicules> - <fascicule file="part" href="part_frame.html" entry="no"> - User's Guide - </fascicule> - <fascicule file="ref_man" href="ref_man_frame.html" entry="yes"> - Reference Manual - </fascicule> - <fascicule file="part_notes" href="part_notes_frame.html" entry="no"> - Release Notes - </fascicule> - <fascicule file="" href="../../../../doc/print.html" entry="no"> - Off-Print - </fascicule> -</fascicules> - - diff --git a/lib/tv/doc/src/info_window.gif b/lib/tv/doc/src/info_window.gif Binary files differdeleted file mode 100644 index 7913fc4230..0000000000 --- a/lib/tv/doc/src/info_window.gif +++ /dev/null diff --git a/lib/tv/doc/src/info_window.ps b/lib/tv/doc/src/info_window.ps deleted file mode 100644 index b459523d0f..0000000000 --- a/lib/tv/doc/src/info_window.ps +++ /dev/null @@ -1,814 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./info_window.tmp.eps) -%%CreationDate: (Tue Jun 12 16:12:33 2001) -%%BoundingBox: 0 60 377 354 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 60 377 354 -userdict begin -%%BeginData: -DisplayImage -0 60 -377.000000 294.000000 -12 -590 460 -1 -0 -0 -8 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -b22222 -828282 -000a01ff01ff0137000b0208040001ff01ff013700000208040000000208040002ff02ff -0237000002080400000002080400020000ff00ff00340400020000000208040000000202 -04060200000004ff04ff0434020000000405020204000000020204000209000d02ff02ff -022b00000202040000000202040002080000020d040002ea010102060101021d01020229 -010102e700000202040000000202040002080000020d040002d801070209010102060101 -020e0101020b0101022601000203010102e700000202040000000202040002080000020d -040002db0101020c010102060101020e0101020b01010225010102ed0000020204000000 -0202040002080000020204060203040002db010102040103020301010200010102030101 -020201030207010102020101020001010202010402010103020201010200010102010101 -020001010201010102030103020101040201010102020103020301010200010102d70000 -02020400000004030208000002020400030400000203040002db01010203010102010101 -020201020200010102020101020101010201010102060101020201020200010102020101 -020201010201010102010101020001010201010202000102020001010201010102010101 -02010101020301010201010102010101020201020200010102d6000004030101020b0000 -02030400030200000204040002db01010207010102020101020101010202010102010101 -020101010206010102020101020101010202010102020101020101010201010202030101 -020101010201010102050101020101010203010102010101020101010202010102010101 -02d90103020b000002030400030200000204040002db0101020401040202010102010101 -020201010201010502060101020201010201010102020101020201010201010102010101 -020401010201010102010101020201040201010102030101020101010201010102020101 -0201010102d90103020b000002040400030000000205040002db01010203010102010101 -02020101020101010202010102010101020a010102020101020101010202010102020101 -020101010201010102040101020101010201010102010101020101010201010102030101 -0201010102010101020201010201010102d90103020b0000020404000300000002050400 -02db01010203010102010101020201010201010102020101020101010202010002060101 -020201010201010102020101020201010201010102010101020401010201010102010101 -020101010201010102010101020301010201010102010101020201010201010102d90103 -020b0000020500000206040002db01010204010202000101020101040203010102020103 -020701010202010102010101020201010203010302020101020401010201010102010101 -0202010202000101020101020201010102020103020301010201010102d90103020b0000 -020d040002ff02ff022d0103020b0000020d040002ff02ff022d0103020b0000020d0400 -02ff02ff022d0103020c040d02ff02ff022e010302ff02ff0249010302ff02ff02490103 -020200ff00ff00420400020201030202000004ff04ff04420202010302ff02ff02490103 -020200ff00ff004302020103020200ff00ff00420700020201030202000105ff05ff053f -0701020201030202000105ff05ff053f0701020201030202000105ff05ff053f07010202 -01030202000105ff05ff053f0701020201030202000105ff05ff053f0701020201030202 -0001050b0604050406000503060205ff05ff052107010202010302020001050b0600050f -060005ff05ff052107010202010302020001050b060005060602050506000503060205ff -05ff051a07010202010302020001050b06000508060005050600050206000502060005ff -05ff051907010202010302020001050b06030505060005050600050206000502060005ff -05ff051907010202010302020001050b060005080600050506000502060405ff05ff0519 -07010202010302020001050b060005080600050506000502060005ff05ff051d07010202 -010302020001050b06000508060005050600050206000502060005ff05ff051907010202 -010302020001050b060005080600050506000503060205ff05ff051a0701020201030202 -000105ff05ff053f07010202010302020001050a060605ff05ff052d0701020201030202 -0001050a060605ff05ff052d0701020201030202000105ff05ff053f0701020201030202 -000105ff05ff053f0701020201030202000105ff05ff053f0701020201030202000107ff -07ff0741020201030202000007ff07ff074202020103020205ff05ff0543020201030202 -05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202 -05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202 -05ff05ff054302020103020205ff05ff054302020103020205ff05ff0543020201030202 -05ff05ff0543020201030202050400770501007705010077050100770558020201030202 -050400760700050100760700050100760700050100760700055802020103020205040001 -057307010501000105730701050100010573070105010001057307010558020201030202 -050400010573070105010001057307010501000105730701050100010573070105580202 -010302020504000105730701050100010573070105010001057307010501000105730701 -055802020103020205040001057307010501000105730701050100010573070105010001 -057307010558020201030202050400010573070105010001057307010501000105730701 -050100010573070105580202010302020504000105730701050100010573070105010001 -057307010501000105730701055802020103020205040001057307010501000105730701 -050100010573070105010001057307010558020201030202050400010573070105010001 -057307010501000105730701050100010573070105580202010302020504000105730701 -050100010573070105010001057307010501000105730701055802020103020205040001 -057307010501000105730701050100010573070105010001057307010558020201030202 -05040001051d010405080100050601020510010405050100051f07010501000105080102 -0514010005110102050b010005050100050601000520070105010001052c010205050100 -053c070105010001052101020504010005480701055802020103020205040001051f0100 -050a0100050801000512010005070100051f070105010001050801000501010005250100 -05020100050a0100050501000528070105010001052b0100050201000542070105010001 -05200100050201000503010005480701055802020103020205040001051f010005040102 -05020100050001010505010005030102050b01000504010105000100051f070105010001 -050801000501010005030102050301020503010205030102050901000506010205020104 -05010104050201020502010005000101050301010500010005020102050b070105010001 -052b0100050601020502010405020102052e070105010001052001000505010405020102 -050201000500010105030102050301010500010005020102052407010558020201030202 -05040001051f010005030100050201000501010105010100050401000502010005020100 -050a01000503010005010101051f07010501000105080100050101000502010005020100 -050101000502010005040100050201000502010005090100050401000502010005030100 -0505010005060100050201010501010005010100050101010501010005020100050a0701 -05010001052c010005070100050601000501010005020100052d07010501000105210100 -050601000503010005020100050101010501010005010100050201000501010005010101 -050101000502010005230701055802020103020205040001051f01000507010005010100 -05020100050401000502010005020100050a01000503010005020100051f070105010001 -0508010305060100050101000508010005020100050e0101050201000502010005030100 -05050100050601000502010005020100050101000502010005010100050e070105010001 -052d010105050100050501000502010005020100052d0701050100010522010105040100 -050301000502010005010100050901000501010005020100050101000502010005230701 -055802020103020205040001051f01000504010305010100050201000504010005020104 -050a01000503010005020100051f07010501000105080100050201000502010305020102 -050501000502010005100100050101040503010005050100050601000502010005020100 -050101000502010005020102050b070105010001052f0100050401000504010005030104 -052d07010501000105240100050301000503010005020100050101000506010305010100 -050201000501010405230701055802020103020205040001051f01000503010005020100 -05010100050201000504010005020100050e01000503010005020100051f070105010001 -05080100050201000501010005020100050501000504010005020100050c010005020100 -050101000507010005050100050601000502010005020100050101000502010005050100 -050a070105010001052b0100050201000504010005030100050401000531070105010001 -052001000502010005030100050301000502010005010100050501000502010005010100 -050201000501010005270701055802020103020205040001051f01000503010005020100 -0501010105010100050401000502010005020100050a01000503010005010101051f0701 -050100010508010005020100050101000502010005010100050201000504010005020100 -050201000508010005020100050101000502010005030100050501000506010005020100 -0502010005010100050101010501010005020100050a070105010001052b010005020100 -05040100050201000505010005020100052d070105010001052001000502010005030100 -050301000502010005010100050501000502010005010100050101010501010005020100 -05230701055802020103020205040001051f010005040103050101000500010105050100 -05030102050901040502010105000100051f070105010001050801030503010305020102 -0505010005030102050a0102050301020505010105040101050401000502010005020100 -050201010500010005020102050b070105010001052c0102050501000502010405020102 -052e07010501000105210102050501010502010205020100050601030502010105000100 -050201020524070105580202010302020504000105730701050100010560010005110701 -05010001057307010501000105470100052a070105580202010302020504000105730701 -05010001055c010005020100051107010501000105730701050100010543010005020100 -052a07010558020201030202050400010573070105010001055d01020512070105010001 -057307010501000105440102052b07010558020201030202050400010573070105010001 -057307010501000105730701050100010573070105580202010302020504000105730701 -050100010573070105010001057307010501000105730701055802020103020205040001 -057307010501000105730701050100010573070105010001057307010558020201030202 -050400010573070105010001057307010501000105730701050100010573070105580202 -010302020504000105730701050100010573070105010001057307010501000105730701 -055802020103020205040001057307010501000105730701050100010573070105010001 -05730701055802020103020205040001057400ff00c20504020201030202050400010574 -00ff00c1070005040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105d101ff0158050a0701 -05040202010302020504000105d1010000ff00560100050a070105040202010302020504 -000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056 -0100050a070105040202010302020504000105d1010000ff00560100050a070105040202 -010302020504000105d1010000ff00560100050a070105040202010302020504000105d1 -010000ff00560100050a0701050402020103020205040001050a01040508010005060102 -05100104059701000010010000ff00440100050a0701050402020103020205040001050c -0100050a01000508010005120100059901000010010000ff00440100050a070105040202 -0103020205040001050c01000504010205020100050001010505010005030102050b0100 -050301000502010005010100050001010503010205040101057c01000008010200020104 -0002010200ff003c0100050a0701050402020103020205040001050c0100050301000502 -01000501010105010100050401000502010005020100050a010005030100050201000501 -010105010100050101000502010005030101057c01000007010000020100000301000003 -01000002010000ff003b0100050a0701050402020103020205040001050c010005070100 -0501010005020100050401000502010005020100050a0100050401000501010005010100 -050201000501010005020100058201000007010000020100000301000003010000ff003f -0100050a0701050402020103020205040001050c01000504010305010100050201000504 -010005020104050a01000504010005010100050101000502010005010104058201000007 -0104000301000004010200ff003c0100050a0701050402020103020205040001050c0100 -050301000502010005010100050201000504010005020100050e01000505010005000100 -0501010005020100050101000586010000070100000701000007010000ff003b0100050a -0701050402020103020205040001050c0100050301000502010005010101050101000504 -01000502010005020100050a010005050101050201010501010005010100050201000503 -0101057c0100000701000002010000030100000301000002010000ff003b0100050a0701 -050402020103020205040001050c01000504010305010100050001010505010005030102 -050b01000506010005020100050001010503010205040101057c01000008010200050101 -0002010200ff003c0100050a0701050402020103020205040001053e010005020100058d -010000ff00560100050a0701050402020103020205040001053b01000500010005030100 -058d010000ff00560100050a0701050402020103020205040001053c010005040100058d -010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a -070105040202010302020504000105d1010000ff00560100050a07010504020201030202 -0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff -00560100050a070105040202010302020504000105d101ff0158050a0701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105d101ff0158050a070105040202010302020504000105d10100 -00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701 -05040202010302020504000105d1010000ff00560100050a070105040202010302020504 -000105d1010000ff00560100050a070105040202010302020504000105d10100000a0101 -00a2010100a40100050a070105040202010302020504000105d101000009010000700100 -002a01000008010000a30100050a0701050402020103020205040001050a010405080100 -050601020510010405050100059001000009010000040102001901000006010000190100 -000a0100000601020013010000040101000a010200040100000c01010002010000070100 -00a30100050a0701050402020103020205040001050c0100050a01000508010005120100 -050701000590010000090100000601000019010000210100000a01000008010000120100 -0004010000010100000801000002010000020101000b0100000101000002010000060100 -00a30100050a0701050402020103020205040001050c0100050401020502010005000101 -0505010005030102050b0100050401010500010005030101058a01000009010000060100 -000301020003010200030102000201040002010200030102000201000000010100090104 -0002010200020100000001010005010000030102000a01000005010000010100000c0100 -0001010000000100000b010000010100000301000005010000a30100050a070105040202 -0103020205040001050c0100050301000502010005010101050101000504010005020100 -05020100050a0100050301000501010105030101058a0100000901000006010000020100 -000201000001010000020100000101000002010000030100000601000002010000020100 -0001010100010100000a0100000301000002010000010101000101000004010000020100 -00020100000801000006010000010100000c010000030100000b01000001010000040100 -0004010000a30100050a0701050402020103020205040001050c01000507010005010100 -05020100050401000502010005020100050a010005030100050201000590010000070101 -000701000002010000020100000101000009010000030100000601000002010000020100 -0001010000020100000a0100000701000001010000020100000401000002010000020100 -000701000007010000010100000a010100040100000b0100000101000005010000040101 -00a10100050a0701050402020103020205040001050c0100050401030501010005020100 -0504010005020104050a0100050301000502010005900100000901000006010000020100 -000201000001010000060103000301000006010000020100000201000001010000020100 -000a01000004010300010100000201000004010000020104000801000006010000010100 -000c010000030100000b010000010100000401000004010000a30100050a070105040202 -0103020205040001050c0100050301000502010005010100050201000504010005020100 -050e01000503010005020100059001000009010000060100000201000002010000010100 -0005010000020100000301000006010000020100000201000001010000020100000a0100 -000301000002010000010100000201000004010000020100000d01000005010000010100 -000c010000030100000b010000010100000301000005010000a30100050a070105040202 -0103020205040001050c0100050301000502010005010101050101000504010005020100 -05020100050a0100050301000501010105030101058a0100000901000006010000020100 -000201000001010000020100000101000002010000030100000601000002010000020100 -0001010000020100000a0100000301000002010000010101000101000004010000020100 -000201000003010100040100000401000001010000030101000201000002010000030100 -000501010003010000010100000201000006010000a30100050a07010504020201030202 -05040001050c010005040103050101000500010105050100050301020509010405020101 -0500010005030101058a0100000901000006010000030102000301020003010300040101 -00040100000301020002010000020100000b010100020103000101000000010100050100 -000301020004010100050100000401010004010100030102000201040003010100040101 -000201000007010000a30100050a070105040202010302020504000105d1010000090100 -003a01050027010000060100002a01000008010000a30100050a07010504020201030202 -0504000105d10100000a010100640101003b010100a40100050a07010504020201030202 -0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff -00560100050a070105040202010302020504000105d1010000ff00560100050a07010504 -0202010302020504000105d1010000ff00560100050a0701050402020103020205040001 -05d1010000ff00560100050a070105040202010302020504000105d101ff0158050a0701 -05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff -0535070105040202010302020504000105ff05ff05350701050402020103020205040001 -05ff05ff0535070105040202010302020504000105ff05ff053507010504020201030202 -0504000105ff05ff0535070105040202010302020504000105ff05ff0535070105040202 -010302020504000105ff05ff0535070105040202010302020504000105ff05ff05350701 -05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff -0535070105040202010302020504000105ff05ff05350701050402020103020205040001 -05ff05ff0535070105040202010302020504000105ff05ff053507010504020201030202 -0504000105ff05ff0535070105040202010302020504000105ff05ff0535070105040202 -010302020504000105ff05ff0535070105040202010302020504000105ff05ff05350701 -05040202010302020504000105ff05ff0535070105040202010302020504000105ff05ff -0535070105040202010302020504000105d101ff0158050a070105040202010302020504 -000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056 -0100050a070105040202010302020504000105d1010000ff00560100050a070105040202 -010302020504000105d1010000ff00560100050a070105040202010302020504000105d1 -010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a -0701050402020103020205040001050a0104050801000506010205100100050201000597 -010000080102001901000006010000190100000a01000006010200f60100050a07010504 -02020103020205040001050c0100050a010005080100051001010501010005970100000a -01000019010000210100000a01000008010000f60100050a070105040202010302020504 -0001050c0100050401020502010005000101050501000503010205090101050101000502 -010205020101050001000503010205040101057c0100000a010000030102000301020003 -010200020104000201020003010200020100000001010009010400020102000201000000 -0101000501000003010200ef0100050a0701050402020103020205040001050c01000503 -010005020100050101010501010005040100050201000502010005080100050001000500 -01000501010005020100050101000500010005000100050101000502010005030101057c -0100000a0100000201000002010000010100000201000001010000020100000301000006 -010000020100000201000001010100010100000a01000003010000020100000101010001 -010000040100000201000002010000ee0100050a0701050402020103020205040001050c -010005070100050101000502010005040100050201000502010005080100050001000500 -010005050100050101000500010005000100050101000502010005820100000a01000002 -010000020100000101000009010000030100000601000002010000020100000101000002 -0100000a010000070100000101000002010000040100000201000002010000ee0100050a -0701050402020103020205040001050c0100050401030501010005020100050401000502 -01040508010005010101050201030501010005000100050001000501010405820100000a -010000020100000201000001010000060103000301000006010000020100000201000001 -010000020100000a0100000401030001010000020100000401000002010400ee0100050a -0701050402020103020205040001050c0100050301000502010005010100050201000504 -010005020100050c01000501010105010100050201000501010005000100050001000501 -010005860100000a01000002010000020100000101000005010000020100000301000006 -010000020100000201000001010000020100000a01000003010000020100000101000002 -0100000401000002010000f20100050a0701050402020103020205040001050c01000503 -010005020100050101010501010005040100050201000502010005080100050201000501 -010005020100050101000500010005000100050101000502010005030101057c0100000a -010000020100000201000001010000020100000101000002010000030100000601000002 -0100000201000001010000020100000a0100000301000002010000010101000101000004 -0100000201000002010000ee0100050a0701050402020103020205040001050c01000504 -010305010100050001010505010005030102050901000502010005020103050101000500 -0100050001000502010205040101057c0100000a01000003010200030102000301030004 -010100040100000301020002010000020100000b01010002010300010100000001010005 -01000003010200ef0100050a070105040202010302020504000105d10100003e010500ff -00110100050a070105040202010302020504000105d1010000ff00560100050a07010504 -0202010302020504000105d1010000ff00560100050a0701050402020103020205040001 -05d1010000ff00560100050a070105040202010302020504000105d1010000ff00560100 -050a070105040202010302020504000105d1010000ff00560100050a0701050402020103 -02020504000105d1010000ff00560100050a070105040202010302020504000105d101ff -0158050a070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105d101ff0158050a070105040202 -010302020504000105d1010000ff00560100050a070105040202010302020504000105d1 -010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a -070105040202010302020504000105d1010000ff00560100050a07010504020201030202 -0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff -00560100050a0701050402020103020205040001050a0104050801000506010205100100 -05020100051d010305130100050b0100051c0100053501000009010000ff004b0100050a -0701050402020103020205040001050c0100050a0100050801000510010105010100051d -010005020100051f0100051c0100053501000009010000ff004b0100050a070105040202 -0103020205040001050c0100050401020502010005000101050501000503010205090101 -050101000502010205020101050001000503010205090100050201000502010205030101 -050001000502010205030102050201040502010205020100050001010503010205030101 -0500010005030101052f0100000701040001010000000101000201000002010000020102 -00ff00350100050a0701050402020103020205040001050c010005030100050201000501 -010105010100050401000502010005020100050801000500010005000100050101000502 -010005010100050001000500010005010100050201000508010005020100050101000502 -010005010100050101010504010005020100050201000503010005030100050201000501 -0101050101000501010005020100050101000501010105030101052f0100000901000003 -0101000101000001010000020100000101000002010000ff00340100050a070105040202 -0103020205040001050c0100050701000501010005020100050401000502010005020100 -050801000500010005000100050501000501010005000100050001000501010005020100 -050801030502010005020100050101000502010005040100050201000507010005030100 -050201000501010005050100050201000501010005020100053501000009010000030100 -0005010000020100000101000002010000ff00340100050a070105040202010302020504 -0001050c0100050401030501010005020100050401000502010405080100050101010502 -010305010100050001000500010005010104050801000501010005020104050101000502 -010005040100050301020504010005030104050101000505010405010100050201000535 -0100000901000003010000050100000201000001010400ff00340100050a070105040202 -0103020205040001050c0100050301000502010005010100050201000504010005020100 -050c010005010101050101000502010005010100050001000500010005010100050c0100 -050201000501010005050100050201000504010005060100050301000503010005050100 -050501000505010005020100053501000009010000030100000501000002010000010100 -00ff00380100050a0701050402020103020205040001050c010005030100050201000501 -010105010100050401000502010005020100050801000502010005010100050201000501 -010005000100050001000501010005020100050801000502010005010100050201000501 -010005010101050401000502010005020100050301000503010005020100050101000505 -010005020100050101000501010105030101052f01000009010000030100000501000001 -0101000101000002010000ff00340100050a0701050402020103020205040001050c0100 -050401030501010005000101050501000503010205090100050201000502010305010100 -050001000500010005020102050901000502010005020102050301010500010005040100 -0503010205050101050201020502010005060102050301010500010005030101052f0100 -000a01010001010000060101000001000002010200ff00350100050a0701050402020103 -020205040001056901000566010000ff00560100050a0701050402020103020205040001 -05650100050201000566010000ff00560100050a07010504020201030202050400010566 -01020567010000ff00560100050a070105040202010302020504000105d1010000ff0056 -0100050a070105040202010302020504000105d1010000ff00560100050a070105040202 -010302020504000105d1010000ff00560100050a070105040202010302020504000105d1 -010000ff00560100050a070105040202010302020504000105d101ff0158050a07010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105d101ff0158050a0701050402020103020205040001 -05d1010000ff00560100050a070105040202010302020504000105d1010000ff00560100 -050a070105040202010302020504000105d1010000ff00560100050a0701050402020103 -02020504000105d1010000ff00560100050a070105040202010302020504000105d10100 -00ff00560100050a070105040202010302020504000105d10100000b0100002a010000ff -001d0100050a0701050402020103020205040001050a0103053401020513010005190100 -0503010005130104050801000506010205280100000a010000040101000a010200040100 -000c01010002010000ff001c0100050a0701050402020103020205040001050a01000502 -01000532010005020100052d01000503010005150100050a010005080100052801000009 -01000004010000010100000801000002010000020101000b0100000101000002010000ff -001b0100050a0701050402020103020205040001050a0100050201000501010005000101 -050301020503010205030102050301020503010205090100050201000501010005020100 -050101000500010105030102050201000500010105030101050001000508010405010100 -0500010105030102050b0100050401020502010005000101050501000503010205040101 -051a0100000801000005010000010100000c01000001010000000100000b010000010100 -0003010000ff001a0100050a0701050402020103020205040001050a0100050201000501 -010105010100050101000502010005010100050201000501010005020100050101000502 -010005010100050201000508010005020100050101000502010005010101050101000504 -010005020101050101000501010005010101050a01000503010105010100050101000502 -0100050a0100050301000502010005010101050101000504010005020100050201000503 -0101051a0100000701000006010000010100000c010000030100000b0100000101000004 -010000ff00190100050a0701050402020103020205040001050a01030502010005050100 -050201000501010005050100050201000501010005050100050c01000502010005010100 -050001000500010005010100050201000504010005020100050201000501010005020100 -050a010005030100050201000501010005020100050a0100050701000501010005020100 -05040100050201000502010005200100000601000007010000010100000a010100040100 -000b0100000101000005010000ff00180100050a0701050402020103020205040001050a -010005050100050501000502010005010100050501040502010205030102050901000502 -010005010100050001000500010005010100050201000504010005020100050201000501 -010005020100050a0100050301000502010005010104050a010005040103050101000502 -0100050401000502010405200100000701000006010000010100000c010000030100000b -0100000101000004010000ff00190100050a0701050402020103020205040001050a0100 -050501000505010005020100050101000505010005090100050501000508010005020100 -050101000500010005000100050101000502010005040100050201000502010005010100 -05020100050a0100050301000502010005010100050e0100050301000502010005010100 -05020100050401000502010005240100000801000005010000010100000c010000030100 -000b0100000101000003010000ff001a0100050a0701050402020103020205040001050a -010005050100050501000502010005010100050201000501010005020100050101000502 -010005010100050201000508010005020100050101000500010005000100050101000502 -01000504010005020100050201000501010005010101050a010005030100050201000501 -010005020100050a01000503010005020100050101010501010005040100050201000502 -010005030101051a01000009010000040100000101000003010100020100000201000003 -01000005010100030100000101000002010000ff001b0100050a07010504020201030202 -05040001050a0100050501000506010205030102050301020503010205030102050a0102 -050301000500010005020100050201000504010005020100050201000502010105000100 -050b0101050101000502010005020102050b010005040103050101000500010105050100 -0503010205040101051a0100000a01000004010100040101000301020002010400030101 -000401010002010000ff001c0100050a0701050402020103020205040001056901000566 -0100000b0100002a010000ff001d0100050a070105040202010302020504000105650100 -050201000566010000ff00560100050a0701050402020103020205040001056601020567 -010000ff00560100050a070105040202010302020504000105d1010000ff00560100050a -070105040202010302020504000105d1010000ff00560100050a07010504020201030202 -0504000105d1010000ff00560100050a070105040202010302020504000105d1010000ff -00560100050a070105040202010302020504000105d101ff0158050a0701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105d101ff0158050a070105040202010302020504000105d10100 -00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701 -05040202010302020504000105d1010000ff00560100050a070105040202010302020504 -000105d1010000ff00560100050a070105040202010302020504000105d1010000ff0056 -0100050a070105040202010302020504000105d1010000ff00560100050a070105040202 -0103020205040001050a0100050201000527010105090102051301000517010305590100 -00ff00560100050a0701050402020103020205040001050a01010501010005260100050a -010005020100052b0100050201000558010000ff00560100050a07010504020201030202 -05040001050a01010501010005020102050201010500010005030102050a010205040100 -050a01000502010005010100050201000501010005000101050301020502010005000101 -050301010500010005080100050201000501010005000101050301020503010205030102 -0503010205030102050401010528010000ff00560100050a070105040202010302020504 -0001050a0100050001000500010005010100050201000501010005000100050001000501 -010005020100050801000502010005010104050801000502010005010100050201000501 -010105010100050401000502010105010100050101000501010105080100050201000501 -010105010100050101000502010005010100050201000501010005020100050101000502 -01000501010005020100050301010528010000ff00560100050a07010504020201030202 -05040001050a010005000100050001000505010005010100050001000500010005010100 -05020100050801000502010005030100050a010005020100050101000500010005000100 -050101000502010005040100050201000502010005010100050201000508010305020100 -050501000502010005010100050501000502010005010100050501000532010000ff0056 -0100050a0701050402020103020205040001050a01000501010105020103050101000500 -01000500010005010104050801000502010005030100050a010005020100050101000500 -010005000100050101000502010005040100050201000502010005010100050201000508 -010005050100050501000502010005010100050501040502010205030102052f010000ff -00560100050a0701050402020103020205040001050a0100050101010501010005020100 -05010100050001000500010005010100050c01000502010005030100050a010005020100 -050101000500010005000100050101000502010005040100050201000502010005010100 -050201000508010005050100050501000502010005010100050501000509010005050100 -052e010000ff00560100050a0701050402020103020205040001050a0100050201000501 -010005020100050101000500010005000100050101000502010005080100050201000503 -0100050a0100050201000501010005000100050001000501010005020100050401000502 -010005020100050101000501010105080100050501000505010005020100050101000502 -0100050101000502010005010100050201000501010005020100050301010528010000ff -00560100050a0701050402020103020205040001050a0100050201000502010305010100 -050001000500010005020102050a010205040100050b0102050301000500010005020100 -050201000504010005020100050201000502010105000100050801000505010005060102 -05030102050301020503010205030102050401010528010000ff00560100050a07010504 -02020103020205040001056901000566010000ff00560100050a07010504020201030202 -0504000105650100050201000566010000ff00560100050a070105040202010302020504 -0001056601020567010000ff00560100050a070105040202010302020504000105d10100 -00ff00560100050a070105040202010302020504000105d1010000ff00560100050a0701 -05040202010302020504000105d1010000ff00560100050a070105040202010302020504 -000105d1010000ff00560100050a070105040202010302020504000105d101ff0158050a -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000105ff05ff0535070105040202010302020504000105ff -05ff0535070105040202010302020504000105ff05ff0535070105040202010302020504 -000105ff05ff0535070105040202010302020504000105ff05ff05350701050402020103 -02020504000105ff05ff0535070105040202010302020504000105ff05ff053507010504 -0202010302020504000105ff05ff0535070105040202010302020504000105ff05ff0535 -070105040202010302020504000107ff07ff073705040202010100040504000007ff07ff -0738050400050202040005ff05ff054300000202040000000202040005ff05ff05430000 -0202040000000202040005ff05ff054300000202040000000202040005ff05ff05430000 -0202040000000202040005ff05ff0543000002020400000002020400000502ff02ff0237 -00060202040000000208040002ff02ff023700000208040000000208040002ff02ff0237 -00000208040000000208040001ff01ff01370000020804000000040901ff01ff01370000 -0409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 60 377 354 -%%EOF diff --git a/lib/tv/doc/src/note.gif b/lib/tv/doc/src/note.gif Binary files differdeleted file mode 100644 index 6fffe30419..0000000000 --- a/lib/tv/doc/src/note.gif +++ /dev/null diff --git a/lib/tv/doc/src/notes.xml b/lib/tv/doc/src/notes.xml deleted file mode 100644 index 4f066e5c70..0000000000 --- a/lib/tv/doc/src/notes.xml +++ /dev/null @@ -1,288 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE chapter SYSTEM "chapter.dtd"> - -<chapter> - <header> - <copyright> - <year>2004</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>TV Release Notes</title> - <prepared>otp_appnotes</prepared> - <docno>nil</docno> - <date>nil</date> - <rev>nil</rev> - <file>notes.xml</file> - </header> - <p>This document describes the changes made to the TV application.</p> - -<section><title>TV 2.1.4.10</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Misc build updates</p> - <p> - Own Id: OTP-10784</p> - </item> - </list> - </section> - -</section> - -<section><title>TV 2.1.4.9</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p>The GS applications is now deprecated and will be - removed in the R16 release. The following GS-based - applications have been superseded by the Observer - application and will removed in R16: Appmon, Pman, - Tv.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-9907</p> - </item> - </list> - </section> - -</section> - -<section><title>TV 2.1.4.8</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Eliminate use of deprecated regexp module</p> - <p> - Own Id: OTP-9810</p> - </item> - </list> - </section> - -</section> - -<section><title>TV 2.1.4.7</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - tv: Allow table viewer to display refs, ports and small - binaries</p> - <p> - Table viewer displayed #Port, #Ref, or #Bin as place - holders for their respective object types in ets and - mnesia tables. This can make table viewer difficult to - use when viewing tables containing those data types. It - doesn't make sense to render large binaries so #Bin will - still be used for binaries that exceed 100 bytes. (Thanks - to Blaine whittle)</p> - <p> - Own Id: OTP-9153</p> - </item> - </list> - </section> - -</section> - -<section><title>TV 2.1.4.6</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - With some window managers (e.g. stumpwm), <c>tv</c> would - constantly restart while trying to open a table. (Thanks - to Dmitriy Budashny.)</p> - <p> - Own Id: OTP-8751</p> - </item> - </list> - </section> - -</section> - -<section><title>TV 2.1.4.5</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Warnings due to new autoimported BIFs removed</p> - <p> - Own Id: OTP-8674 Aux Id: OTP-8579 </p> - </item> - </list> - </section> - -</section> - -<section><title>TV 2.1.4.4</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - The documentation is now built with open source tools - (xsltproc and fop) that exists on most platforms. One - visible change is that the frames are removed.</p> - <p> - Own Id: OTP-8201</p> - </item> - </list> - </section> - -</section> - -<section><title>TV 2.1.4.3</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Updated the application with new tags for automatic updates - of copyright notices. - </p> - <p> - Own Id: OTP-7851 - </p> - </item> - </list> - </section> - -</section> - -<section><title>TV 2.1.4.2</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Minor updates.</p> - <p> - Own Id: OTP-7261</p> - </item> - </list> - </section> - -</section> - - <section> - <title>TV 2.1.4.1</title> - - <section> - <title>Improvements and New Features</title> - <list type="bulleted"> - <item> - <p>Minor Makefile changes.</p> - <p>Own Id: OTP-6689</p> - </item> - <item> - <p>Obsolete guard tests (such as list()) have been replaced - with the modern guard tests (such as is_list()).</p> - <p>Own Id: OTP-6728</p> - </item> - </list> - </section> - </section> - - <section> - <title>TV 2.1.4</title> - - <section> - <title>Improvements and New Features</title> - <list type="bulleted"> - <item> - <p>Removed some dead code from - <c>tv_pg_gridfcns:mark_cell_and_notify/4</c> - and <c>tv_nodewin:handle_error/1</c>.</p> - <p>Own Id: OTP-6455</p> - </item> - </list> - </section> - </section> - - <section> - <title>TV 2.1.3</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>A compiler warning has been fixed.</p> - <p>Own Id: OTP-6016</p> - </item> - </list> - </section> - - <section> - <title>Improvements and New Features</title> - <list type="bulleted"> - <item> - <p>Notification windows are now centered over a parent - window.</p> - <p>Own Id: OTP-6014 Aux Id: OTP-5987</p> - </item> - </list> - </section> - </section> - - <section> - <title>TV 2.1.2</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>Some dead code reported by Dialyzer was eliminated. </p> - <p>A - bug in 'dbg' when tracing to wrap trace files has been - corrected. It failed to delete any already existing wrap - trace files with the same names when starting a new wrap - trace.</p> - <p>Own Id: OTP-5329</p> - </item> - <item> - <p>The graphic applications now search for HTML - documentation in the correct place.</p> - <p>Own Id: OTP-5381</p> - </item> - </list> - </section> - </section> - - <section> - <title>TV 2.1.1</title> - - <section> - <title>Fixed Bugs and Malfunctions</title> - <list type="bulleted"> - <item> - <p>TV no longer crashes on Mac OS X. (Thanks to Sean Hinde.)</p> - <p>Own Id: OTP-5219</p> - </item> - </list> - </section> - </section> -</chapter> - - diff --git a/lib/tv/doc/src/part.xml b/lib/tv/doc/src/part.xml deleted file mode 100644 index b82c66b05a..0000000000 --- a/lib/tv/doc/src/part.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE part SYSTEM "part.dtd"> - -<part xmlns:xi="http://www.w3.org/2001/XInclude"> - <header> - <copyright> - <year>1997</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>TV User's Guide</title> - <prepared>Fredrik Gustafson</prepared> - <docno></docno> - <date>1997-06-04</date> - <rev>1.0.1</rev> - <file>part.xml</file> - </header> - <description> - <p>The Table Visualizer application, <em>TV</em>, enables the user - to examine ETS and Mnesia tables. Once a certain table has been - opened in the tool, the content may be viewed in various levels - of detail.</p> - </description> - <xi:include href="table_visualizer_chapter.xml"/> -</part> - - diff --git a/lib/tv/doc/src/part_notes.xml b/lib/tv/doc/src/part_notes.xml deleted file mode 100644 index 6fdf2ba2dd..0000000000 --- a/lib/tv/doc/src/part_notes.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE part SYSTEM "part.dtd"> - -<part xmlns:xi="http://www.w3.org/2001/XInclude"> - <header> - <copyright> - <year>2004</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>TV Release Notes</title> - <prepared></prepared> - <docno></docno> - <date>2004-09-07</date> - <rev>1.0</rev> - <file>part_notes.sgml</file> - </header> - <description> - <p>The Table Visualizer application, <em>TV</em>, enables the user - to examine ETS and Mnesia tables. Once a certain table has been - opened in the tool, the content may be viewed in various levels - of detail.</p> - </description> - <xi:include href="notes.xml"/> -</part> - - diff --git a/lib/tv/doc/src/ref_man.xml b/lib/tv/doc/src/ref_man.xml deleted file mode 100644 index 26cc0371b0..0000000000 --- a/lib/tv/doc/src/ref_man.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE application SYSTEM "application.dtd"> - -<application xmlns:xi="http://www.w3.org/2001/XInclude"> - <header> - <copyright> - <year>1997</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>TV Reference Manual</title> - <prepared>Fredrik Gustafson</prepared> - <docno></docno> - <date>1997-06-04</date> - <rev>1.0.1</rev> - <file>application.sgml</file> - </header> - <description> - <p>The TV application enables the user - to examine ETS and Mnesia tables. Once a certain table has been - opened in the tool, the content may be viewed in various levels - of detail.</p> - </description> - <xi:include href="tv.xml"/> -</application> - - diff --git a/lib/tv/doc/src/set_poll_int.gif b/lib/tv/doc/src/set_poll_int.gif Binary files differdeleted file mode 100644 index c09c84322f..0000000000 --- a/lib/tv/doc/src/set_poll_int.gif +++ /dev/null diff --git a/lib/tv/doc/src/set_poll_int.ps b/lib/tv/doc/src/set_poll_int.ps deleted file mode 100644 index cceb30486f..0000000000 --- a/lib/tv/doc/src/set_poll_int.ps +++ /dev/null @@ -1,483 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./set_poll_int.tmp.eps) -%%CreationDate: (Tue Jun 12 16:08:39 2001) -%%BoundingBox: 0 17 200 154 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 17 200 154 -userdict begin -%%BeginData: -DisplayImage -0 17 -200.000000 137.000000 -12 -315 215 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -828282 -aa2455 -c3c3c3 -000000 -000000 -000000 -000000 -000000 -000000 -000000 -000a01ff0124000b0208040001ff012400000208040000000208040002ff022400000208 -0400000002080400020000ff0021040002000000020804000000020204060200000004ff -0421020000000405020204000000020204000209000d02ff021800000202040000000202 -040002080000020d04000281010102020101023701010254000002020400000002020400 -02080000020d040002580103020b010002070104020a01010202010102060101020b0100 -02210101025400000202040000000202040002080000020d040002570101020101010209 -01010207010102010101020901010202010102060101020a010102210101025400000202 -040000000202040002080000020204060203040002570101020601030201010402050101 -020101010201010302030101020201010206010102020101020001010201010402010103 -020201010200010102000101020101010202010302030101025400000202040000000403 -020800000202040003040000020304000257010202040101020101010201010102070101 -020101010200010102010101020201010202010102060101020201020200010102010101 -020201010201010102010101020001010200010102010101020101010201010102020101 -0254000004030101020b0000020304000302000002040400025801030202010102010101 -020101010207010102010100020101010201010102020101020201010206010102020101 -020101010201010102020101020101010201010202020101020101010205010102020101 -02570103020b0000020304000302000002040400025a0102020101050201010102070103 -020201010201010102020101020201010206010102020101020101010201010102020105 -020101010204010102000100020301040202010102570103020b00000204040003000000 -02050400025b010102010101020501010207010102040101020101010202010102020101 -020601010202010102010101020101010202010102050101020401010200010002020101 -020101010202010102570103020b00000204040003000000020504000257010102010101 -020101010202010002010101020701010204010102010101020201010202010102060101 -020201010201010102010101020201010202010002010101020501010203010102010101 -0202010102570103020b0000020500000206040002580103020301030203010202050101 -020501030203010102020101020601010202010102010101020201020201010302020101 -0205010102040102020001010201010102570103020b0000020d040002ff021a0103020b -0000020d040002ff021a0103020b0000020d040002ff021a0103020c040d02ff021b0103 -02ff0236010302ff02360103020200ff002f0400020201030202000004ff042f02020103 -02ff02360103020205ff053002020103020205ff053002020103020205ff053002020103 -020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530 -02020103020205ff053002020103020205ff053002020103020205ff0530020201030202 -05e5003b050e02020103020205e5003a0600050e02020103020205e5000105370601050e -02020103020205e5000105370601050e02020103020205e5000105370601050e02020103 -020205e5000105370601050e02020103020205e5000105370601050e02020103020205e5 -000105370601050e02020103020205e5000105370601050e020201030202051b000105c7 -000105150102050201000502010005160601050e020201030202051a0003050b01000503 -0100051e010205090103050a010205030102050501000568000105140100050201000501 -01000501010005170601050e02020103020205190005050a010005030100052001000509 -010005020100050b010005050100056f0001051401000502010005010100050001000518 -0601050e0202010302020518000205010002050901010501010105020102050201000500 -010105020100050201000502010205050100050901000502010005020102050501000505 -010005030102050201000500010105030101050001000559000105140100050201000501 -010105190601050e02020103020205170002050300020508010105010101050101000502 -010005010101050101000501010005020100050101000502010005040100050901000502 -010005010100050201000504010005050100050501000502010105010100050101000501 -0101055900010514010005020100050101000500010005180601050e0202010302020516 -000205050002050701000500010105000100050501000501010005020100050101000502 -010005050100050401000509010305020100050201000504010005050100050501000502 -010005020100050101000502010005590001051401000502010005010100050101000517 -0601050e0202010302020515060205070602050601000500010105000100050201030501 -010005020100050101000502010005020103050401000509010005050100050201000504 -010005050100050501000502010005020100050101000502010005590001051401000502 -0100050101000501010005170601050e0202010302020516060205050602050701000503 -010005010100050201000501010005020100050101000502010005010100050201000504 -010005090100050501000502010005040100050501000505010005020100050201000501 -010005020100055900010514010005020100050101000502010005160601050e02020103 -020205170602050306020508010005030100050101000502010005010100050201000501 -010005010101050101000502010005040100050901000505010005020100050401000505 -010005050100050201000502010005010100050101010559000105150102050201000502 -010005160601050e02020103020205180602050106020509010005030100050201030501 -010005020100050201010500010005020103050401000509010005060102050501000505 -010005050100050201000502010005020101050001000559000105370601050e02020103 -020205190605056a01000559000105370601050e020201030202051a0603056701000502 -01000559000105370601050e020201030202051b060105690102055a000105370601050e -02020103020205e5000105370601050e02020103020205e5000105370601050e02020103 -020205e5000105370601050e02020103020205e5000105370601050e02020103020205e5 -000105370601050e02020103020205e5000105370601050e02020103020205e500010639 -050e02020103020205e50000063a050e02020103020205ff053002020103020205ff0530 -02020103020205ff053002020103020205ff053002020103020205ff0530020201030202 -05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202 -0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff -053002020103020205ff053002020103020205ff053002020103020205ff053002020103 -020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530 -02020103020205e5003b050e02020103020205e5003a0600050e02020103020205e50001 -05370601050e02020103020205e5000105370601050e02020103020205e5000105370601 -050e02020103020205e5000105370601050e02020103020205e5000105370601050e0202 -0103020205e5000105370601050e02020103020205e5000105370601050e020201030202 -051a060105c8000105070102051f010205090601050e02020103020205190603050e0100 -050c0100051a01000506010005100103050a010205030102050501000554000105060100 -050201000520010005090601050e02020103020205180605050d0100050c0100051a0100 -0518010005020100050b010005050100055b000105060100050201000502010205020100 -0500010105030102050301020505010005090601050e0202010302020517060207010602 -050b01000500010005020100050201000501010405020102050201010500010005030102 -050201040502010205030102050901000502010005020102050501000505010005030102 -050201000500010105030101050001000545000105060100050501000502010005010101 -05010100050101000502010005010100050201000504010005090601050e020201030202 -0516060207030602050a0100050001000502010005020100050301000503010005020100 -050101000500010005000100050101000502010005030100050601000502010005020100 -050801000502010005010100050201000504010005050100050501000502010105010100 -050101000501010105450001050601000509010005010100050201000501010005050100 -050201000504010005090601050e02020103020205150602070506020509010005000100 -050201000502010005030100050301000502010005010100050001000500010005050100 -050301000506010005020100050c01030502010005020100050401000505010005050100 -050201000502010005010100050201000545000105060100050601030501010005020100 -05010100050501040504010005090601050e020201030202051400020707000205070100 -050201000501010005020100050301000503010005020100050101000500010005000100 -05020103050301000506010005020100050c010005050100050201000504010005050100 -050501000502010005020100050101000502010005450001050601000502010005010100 -05020100050101000502010005010100050501000508010005090601050e020201030202 -051500020705000205080104050101000502010005030100050301000502010005010100 -05000100050001000501010005020100050301000506010005020100050c010005050100 -050201000504010005050100050501000502010005020100050101000502010005450001 -050601000502010005010100050201000501010005020100050101000502010005010100 -050201000504010005090601050e02020103020205160002070300020509010005020100 -050101000501010105030100050301000502010005010100050001000500010005010100 -050201000503010005060100050201000502010005080100050501000502010005040100 -050501000505010005020100050201000501010005010101054500010507010205030103 -050101000502010005020102050301020505010005090601050e02020103020205170002 -07010002050a010005020100050201010500010005040101050201020502010005000100 -050001000502010305040101050401000503010205090100050601020505010005050100 -05050100050201000502010005020101050001000545000105370601050e020201030202 -05180005057f01000545000105370601050e02020103020205190003057c010005020100 -0545000105370601050e020201030202051a0001057e01020546000105370601050e0202 -0103020205e5000105370601050e02020103020205e5000105370601050e020201030202 -05e5000105370601050e02020103020205e5000105370601050e02020103020205e50001 -05370601050e02020103020205e5000105370601050e02020103020205e500010639050e -02020103020205e50000063a050e02020103020205ff053002020103020205ff05300202 -0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff -053002020103020205ff053002020103020205ff053002020103020205ff053002020103 -020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530 -02020103020205ff053002020103020205ff053002020103020205ff0530020201030202 -05ff053002020103020205ff053002020103020205ff0530020201030202057601000534 -0100058202020103020205110103050a01020503010205090104050a010005200102050b -0100052a0100050a010005810202010302020511010005020100050b010005050100050b -0100050c010005220100050b0100052a0100050a01000581020201030202051101000502 -0100050201020505010005050100050b0100050301000500010105020104050201020502 -01000500010105020100050201000502010205050100050a010005050102050301020503 -010205030102050201000500010105030101050001000502010205050100050401010579 -020201030202051101000502010005010100050201000504010005050100050b01000503 -010105010100050301000503010005020100050101010501010005010100050201000501 -01000502010005040100050a010005040100050201000501010005020100050101000502 -010005010100050201000501010105010100050101000501010105010100050201000504 -01000504010105790202010302020511010305020100050201000504010005050100050b -010005030100050201000503010005030100050201000501010005050100050201000505 -010005040100050a01000504010005050100050201000501010005050100050201000501 -010005020100050101000502010005010100050801000580020201030202051101000505 -0100050201000504010005050100050b0100050301000502010005030100050301040501 -010005060100050001000503010305040100050a01000505010205020104050101000505 -010005020100050101000502010005010100050201000502010205050100058002020103 -02020511010005050100050201000504010005050100050b010005030100050201000503 -010005030100050501000506010005000100050201000502010005040100050a01000508 -010005010100050501000505010005020100050101000502010005010100050201000505 -01000504010005800202010302020511010005050100050201000504010005050100050b -010005030100050201000503010005030100050201000501010005070100050301000502 -010005040100050b01000503010005020100050101000502010005010100050201000501 -010005020100050101000502010005010100050101010501010005020100050301000505 -010105790202010302020511010005060102050501000505010005090104050101000502 -0100050401010502010205020100050701000504010305040100050b0100050401020503 -010205030102050301020502010005020100050201010500010005020102050401000505 -010105790202010302020576010005340100058202020103020205ff0530020201030202 -05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202 -0103020205ff053002020103020205ff053002020103020205ff053002020103020205ff -053002020103020205ff053002020103020205ff053002020103020205ff053002020103 -020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530 -02020103020205ff053002020103020205ff0530020201030202056f0100050401020504 -010105b0020201030202056e01010503010005020100050201000501010005af02020103 -0202056d01000500010005070100050201000501010005af020201030202056f01000507 -0100050201000501010005af020201030202056f010005060100050301000501010005af -020201030202056f010005050100050401000501010005af020201030202056f01000504 -0100050501000501010005af020201030202056f010005030100050601000501010005af -020201030202056d0104050101040503010105b002020103020205ff0530020201030202 -05ff053002020103020205ff053002020103020205ff053002020103020205ff05300202 -01030202050d06ff0614050d020201030202050d06ff06130000050d020201030202050d -06010856001d089b0001050d020201030202050d06010856001c0600089b0001050d0202 -01030202050d060108560001050b06000000050b0601089b0001050d020201030202050d -060108560001050b06000000050b0601089b0001050d020201030202050d060108560001 -050b06000000050b0601089b0001050d020201030202050d060108560001050b06000000 -050b0601089b0001050d020201030202050d060108560001050b06000000050b0601089b -0001050d020201030202050d060108560001050b06000000050b0601089b0001050d0202 -01030202050d060108560001050b06000000050b0601089b0001050d020201030202050d -060108560001050b06000000050b0601089b0001050d020201030202050d060108560001 -050b06000000050b0601089b0001050d020201030202050d060108560001050b06000000 -050b0601089b0001050d020201030202050d060108560001050b06000000050b0601089b -0001050d020201030202050d060108560001060c0000060d089b0001050d020201030202 -050d060108560000061c089b0001050d020201030202050d060100ff0012050d02020103 -0202050d060000ff0013050d02020103020205ff053002020103020205ff053002020103 -020205ff053002020103020205ff053002020103020205ff053002020103020205ff0530 -02020103020205ff053002020103020205ff053002020101000405ff0530000502020400 -05ff053000000202040000000202040005ff053000000202040000000202040005ff0530 -00000202040000000202040005ff053000000202040000000202040005ff053000000202 -0400000002020400000502ff022400060202040000000208040002ff0224000002080400 -00000208040002ff022400000208040000000208040001ff012400000208040000000409 -01ff012400000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 17 200 154 -%%EOF diff --git a/lib/tv/doc/src/table_visualizer_chapter.xml b/lib/tv/doc/src/table_visualizer_chapter.xml deleted file mode 100644 index 13757dff59..0000000000 --- a/lib/tv/doc/src/table_visualizer_chapter.xml +++ /dev/null @@ -1,658 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE chapter SYSTEM "chapter.dtd"> - -<chapter> - <header> - <copyright> - <year>1997</year><year>2013</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - </legalnotice> - - <title>The Table Visualizer</title> - <prepared>EPK/TK Fredrik Gustafson</prepared> - <responsible></responsible> - <docno></docno> - <approved>EPK/TK (Fredrik Gustafson)</approved> - <checked></checked> - <date>1998-01-19</date> - <rev>C</rev> - <file>table_visualizer.xml</file> - </header> - <warning> - <p> - The TV application has been superseded by the Observer application. - TV will be removed in R16. - </p> - </warning> - <p>The TV, TV, is a tool that enables the user to examine - ETS and Mnesia tables on any (connected) node in the currently running Erlang - system. Once a certain table has been opened in the tool, the content may be - viewed in various levels of detail. The content may also be edited, as well as - sorted, using any element as key. It is also possible to search for a specified object or - element. The table may be polled anytime, either regularly, at specified - intervals, or manually. New and deleted objects, as well as those altered, are - marked with characteristic colours.</p> - <p>Information about the table itself (permissions, storage type, and so on) may - also be obtained. - </p> - - <section> - <title>Terminology and Background</title> - <p>To avoid confusion, we have to distinguish between the <em>actual table</em>, i.e., - the data stored in ETS or Mnesia, and the <em>image of the table</em>, i.e., the - data shown in the TV. The <em>image of the table</em> is simply a copy - of the <em>actual table</em>, and can be manipulated in a number of ways, for example - sorted. It follows that these manipulations in no way affects the <em>actual table</em>!</p> - <p>The expression <em>poll the table</em> is used for the operation of scanning through the - content of the actual table (in order to keep the image of the table consistent with the - actual table).</p> - <p>The ETS and Mnesia modules provides the user with the ability to store vast quantities - of data in, the data organized as dynamic, unordered tables. The ETS - facility stores <em>tuples</em>, while Mnesia stores <em>records</em>. - Each tuple consists of one or more <em>elements</em>; each record consists of one or - more <em>fields</em>. It should be noted that, since records are implemented as tuples, - with the record name as the first element, the first field of a record becomes the second - element in the corresponding tuple! - <br></br> - - In the following, all table objects are mainly referred to as tuples, regardless of the - table type.</p> - <p>For further information about ETS and Mnesia, please see the manual pages and Mnesia User's Guide.</p> - </section> - - <section> - <title>Starting the TV</title> - <p>The TV tool is started by giving the command</p> - <pre> - tv:start(). - </pre> - <p>The window that appears, is hereafter referred to as <em>the TV main window</em>. It consists of:</p> - <list type="bulleted"> - <item> - <p>a <em>menubar</em>.</p> - </item> - <item> - <p>a <em>grid</em>, i.e., a multicolumnar array, where tables existing on - the current node is shown. Each square in the grid is called a <em>cell</em>.</p> - </item> - </list> - <image file="tv_start.gif"> - <icaption>The TV Main Window at startup.</icaption> - </image> - <p>For each table, the following information is shown, in order: - </p> - <list type="bulleted"> - <item> - <p>the <em>table name</em>. If the table is accessible through this name, as is the - case with Mnesia tables and named ETS tables, the table name is shown in - black, otherwise in medium grey.</p> - </item> - <item> - <p>the <em>table identifier</em>, if there is one; since Mnesia tables are accessed - solely through the table name, this cell will in those cases be blank.</p> - </item> - <item> - <p>the <em>process identifier (PID) of the process owning the table</em>.</p> - </item> - <item> - <p>the <em>name of the process owning the table</em>, provided the process - is registered.</p> - </item> - <item> - <p>the <em>table size</em>, i.e., the number of objects currently stored in - the table.</p> - </item> - </list> - </section> - - <section> - <title>Changing View</title> - <p>The TV will by default show currently existing ETS tables, - but the user may easily switch to a Mnesia table view, by choosing the - <em>Mnesia Tables</em> option in the <em>View</em> menu: - </p> - <image file="tv_start_mnesia.gif"> - <icaption>The TV Main Window, showing Mnesia tables.</icaption> - </image> - <p>Normally, system tables (i.e., tables used by system applications) and unreadable - tables are not shown. The menu option <em>System Tables</em>, in the <em>Options</em> - menu, makes the system tables visible: - </p> - <image file="tv_start_system.gif"> - <icaption>The TV Main Window, showing readable user and system tables.</icaption> - </image> - <p>Still unreadable tables are hidden, but the menu option <em>Unreadable Tables</em>, - also in the <em>Options</em> menu, makes even those tables visible. It shall be noted - that rows containing unreadable tables are shaded, using a grey colour: - </p> - <image file="tv_start_system_unreadable.gif"> - <icaption>The TV Main Window, showing both readable and unreadable user and system tables.</icaption> - </image> - <p>Once a table view has been opened, the user may choose how to view it: it may be sorted - by the table names, by the table identifiers, by the process identifiers of the owner - processes, or by the names of the owning processes. These sorting options are found in the - <em>Options</em> menu. - </p> - <image file="tv_start_pid_sorted.gif"> - <icaption>The TV Main Window, tables sorted by owner PID.</icaption> - </image> - </section> - - <section> - <title>Changing the Current Node</title> - <p>By default, the Table Vizualizer will show tables residing on the node - it was started from. However, the user may easily view tables on other nodes. - By choosing the <em>Nodes</em> option, in the <em>File</em> menu, a window showing - all connected nodes will appear. Clicking on any of the nodes in the list will cause - the main window to immediately show the tables residing on the specified node: - </p> - <image file="tv_start_other_node.gif"> - <icaption>The Connected Nodes window, and the TV Main Window, showing tables on the selected node.</icaption> - </image> - </section> - - <section> - <title>Opening a Table in the Table Browser</title> - <p>Whenever a table shall be opened, the first step is to choose the corresponding - <em>Table Name</em> or <em>Table ID</em> cell. Secondly, the <em>Open Table</em> - menu item, in the <em>File</em> menu, has to be chosen. (Or, one may directly - double-click on a <em>Table Name</em> or <em>Table Id</em> cell.)</p> - <p>If the table selected table is readable, a window will appear after a short delay. This new - window is hereafter denoted the <em>Table Browser</em> window. Should the table be - unreadable, the Table Information window will appear instead (see further description - below). - </p> - - <section> - <title>The Table Browser Window</title> - <p>The Table Browser window consists of:</p> - <list type="bulleted"> - <item> - <p>a <em>menubar</em>.</p> - </item> - <item> - <p>a <em>toolbar</em> with buttons providing shortcuts to the menubar options. If the - cursor rests on any button, a so-called toolbar tip, explaining the button, - will appear. <br></br> - - (In the picture below, the cursor has lingered on the <em>Open Table</em> - button for a while.)</p> - </item> - <item> - <p>a <em>content and edit field</em>, showing the content of a specified row or cell. - Through this field the row, or cell, may also be edited (see below for a detailed - description).</p> - </item> - <item> - <p>a <em>grid</em>, i.e., a multicolumnar array, where the content of the - opened table will be shown. (As above, each square in the grid is called a cell.</p> - </item> - </list> - <image file="tv_table_browser.gif"> - <icaption>The Table Browser Window.</icaption> - </image> - <p>The successful appearance of the Table Browser window means that an image of - the selected table has been created in the TV. It is this image - that is shown in the Table Browser. - </p> - - <section> - <title>How Table Data Is Presented</title> - <p>Each object in the table is presented on a row of its own in the grid. - Each element in the object is presented in a cell of its own. <br></br> - - The colours on the <em>vertical</em> buttons to the left of the grid show the status - of the object on that very row: a bright red colour indicates that the object just - has been inserted (when the table is opened, all objects are regarded as being - just inserted), while a bright green colour indicates that the object has been - changed. The colour fades away, shade by shade, every time the actual table is polled, - until the normal background colour is encountered. <br></br> - - When an object has been deleted, the colour of the corresponding - <em>vertical button</em> turns to black. The next time the table is polled, the - object will be removed from the grid.</p> - <image file="tv_table_browser_updated.gif"> - <icaption>The Table Browser Window, with new, changed, and deleted objects.</icaption> - </image> - <p>Normally, new objects are placed at the end of the grid, while all other objects - maintain their positions between successive polls. However, when sorting mode has - been ordered, all objects, even new ones, are placed at the correct position - according to the sorting ordered (see also below).</p> - <p>Immediately above the <em>horizontal buttons</em>, one or more <em>keys</em> may - appear. These keys indicates which elements that are used as indices in the - ETS/Mnesia table, i.e., which fields that are used by ETS/Mnesia as search keys when - looking up data.</p> - <p>The grid columns may be resized, by clicking and dragging on the small black <em>resize areas</em> between any two horizontal buttons.</p> - <p>The rows are enumerated, as a help when navigating through the table. Note: it shall - not be assumed that these numbers correspond to the placement of the objects in the - <em>actual table</em>! The row numbers, as presented in the TV, are - only temporary, and only valid within the TV! - <br></br> - - The number on the <em>vertical scrollbar</em> corresponds to the number the - uppermost row has (or will have).</p> - <p>The number shown on the horizontal scrollbar relates to the leftmost column shown.</p> - </section> - - <section> - <title>How to Poll the Table</title> - <p>The table is polled whenever the <em>Poll Table</em> option in the <em>Options</em> - menu is chosen (or the <em>Poll Table</em> toolbar button is pressed). <br></br> - - The user may also choose to let the TV poll the table at regular - intervals. This is done via the <em>Set Poll Interval...</em> option in the - <em>Options</em> menu, which causes the <em>Set Poll Interval window</em> to appear. </p> - <p>In the Set Poll Interval window the user selects whether manual or automatic - polling shall be used, and, in the automatic polling case, the poll interval.</p> - <image file="set_poll_int.gif"> - <icaption>The Set Poll Interval Window.</icaption> - </image> - <p>It shall be noted that, in the case of a large table (or a slow computer/operating - system), a short poll interval may cause the TV to be flooded, i.e., the - data resulting from one poll has not been fully treated and presented when the data from - the next poll arrives. The user is therefore kindly requested to use the automatic - polling facility with care!</p> - </section> - - <section> - <title>How to Edit Objects in the Table</title> - <p>Provided that the table is writable for other processes than the owning process, - the user may insert, change and delete objects.</p> - <p>To <em>delete</em> an object, the corresponding row, or a single cell in the - corresponding row, has to be chosen, by clicking either on the vertical button - to the left of the row, or on a cell. Thereafter the <em>Delete Object</em> - option in the <em>Edit Menu</em> - is chosen. (Should the user regret the delete operation, the row may once again - be selected, whereupon the <em>Return</em> button simply is pressed.)</p> - <p>To <em>insert</em> an object, the user may use the <em>Record Editor</em>, or simply - enter the object in the content and edit field, and then press the <em>Return</em> - button. <br></br> - - The <em>Record Editor</em> is started via the <em>Edit Object</em> option in the - <em>Edit</em> menu, or via the <em>Edit Object</em> toolbar button. The editor that - appears looks different depending on the kind of table: for Mnesia tables, - a writable field is shown for each record entry, as well as the name of the entry. - For ETS tables, only a writable field is shown; this is due to the fact that the - size of the tuples inserted in ETS tables may vary, whereas the size of the records - inserted in a Mnesia table (more or less) is fixed. - One may select the next field in the record editor by pressing - the 'Tab' (or 'Arrow Down') button, and select the previous field by pressing - 'Shift'+'Tab' (or 'Arrow Up'). <br></br> - - When the editing is finished, the <em>OK</em> button may be clicked, or - 'Return' pressed. The TV will then try to insert the new object. - </p> - <image file="tv_record_editor_mnesia.gif"> - <icaption>The Record Editor (shown for a Mnesia table).</icaption> - </image> - <p>To <em>change</em> an already existing object, the corresponding row, or a single cell - in the corresponding row, has to be selected first (see below). Then one may edit the - whole object (or the selected field in the object), either using the record editor - or the content and edit field, whereupon 'Return' may be pressed (or the 'OK' button - clicked). - </p> - <p>It shall be noted that it is hard to edit objects containing - <em>process identifiers</em>, <em>references</em>, <em>binaries</em> and <em>ports</em>, - since it is only a textual representation of these terms that is shown on the screen. - It is in the general case impossible for the TV to correctly - convert this textual representation back to the original term. As a courtesy to - the user, an attempt to do this will nevertheless be done if the edited field - consists of a single process identifier; however, this conversion will only be - correct provided - that the process identifier originates from the current Erlang session. (On - the other hand, why on earth should any user want to store old process identifiers?) - </p> - <p>It shall also be noted that it may be more or less confusing to edit the table, - depending on whether the table type is <em>set</em>, <em>bag</em>, or - <em>duplicate_bag</em>, i.e., depending on whether or not objects having the - same key (or even duplicate objects) are allowed. Please study the ETS or Mnesia - manual pages, should confusion arise! - </p> - </section> - - <section> - <title>How to Search For Objects</title> - <p>One may search for an object, by choosing the <em>Search Object</em> - option in the <em>Options</em> menu (or by pressing the <em>Search Object</em> - toolbar button). In the <em>Search Object window</em> that appears, any valid - Erlang term or regular expression may be entered, whereupon all objects - containing (or consisting of) this term, or matching the regular expression, - will be shown.</p> - <image file="tv_search_window.gif"> - <icaption>The Search Object Window.</icaption> - </image> - <p>In the search result list, by clicking on any object, the Table Browser will - immediately scroll to the corresponding row in the table shown. This enables - the user to in a very powerful way quickly find the objects he's interested in.</p> - <image file="tv_search_result.gif"> - <icaption>The Search Object Window interworking with the Table Browser.</icaption> - </image> - </section> - - <section> - <title>How to Mark Table Data</title> - <p>One may mark a row or a column by clicking on the buttons to the left and above - the grid, respectively. A single cell is marked by clicking on it. Even empty - rows and columns may be marked; an empty cell cannot be marked - on the contrary, - by clicking on an empty cell, all marks are removed.</p> - <p>Marks are indicated by a cyan blue colour.</p> - <image file="tv_row_marked.gif"> - <icaption>The TV Main Window: a row has been marked.</icaption> - </image> - <p>When a row or a cell has been marked, the content will be shown in the content field, - together with an indication of the row (and column when applicable) the marked area - corresponds to. Should the object be very big, only a fraction of it may be shown in - this field. By clicking on the down-arrow button to the right of the content and - edit field, a pop-up content field will be shown, where the whole marked object - may be viewed. The content of this pop-up field may be marked and copied to - other windows; however, this field cannot be edited.</p> - <image file="tv_row_marked_popup.gif"> - <icaption>The Table Browser: the pop-up content field.</icaption> - </image> - <p>It shall be noted that the user may choose whether lists shall be shown as - strings or lists; this is done via the <em>View</em> menu. - </p> - <p>A marked column may be subject to sorting, see below. When sorting is ordered, - marks are removed at each polling of the table (because of the difficulties to - keep track of a certain object, or element, in this case).</p> - </section> - - <section> - <title>How to Sort Table Data</title> - <p>The image of the table may be sorted in rising or falling order, using any element as - sorting key. The element desired is chosen by marking the corresponding column, and - then choose (either via the <em>Options</em> menu, or via the toolbar buttons) any - of the sorting options available, i.e., sorting in ascending or descending order. - The colour of the column button will then change to gold, to indicate that this - column is the basis for the sorting currently chosen.</p> - <p>Should no column have been marked, when sorting is ordered, the first element in each - object (i.e, tuple) will be used as sorting key if the table is an ETS table; the - second element (i.e., the first field in the record) will be used if the table is a - Mnesia table.</p> - <p>Even columns with no elements in them may be subject to sorting. In this case the - whole object is used as the sorting key.</p> - <p>When sorting is ordered, new elements will be inserted according to the current - sorting mode. When the sorting is interrupted (via the <em>No Sorting</em> option), - the current image of the table keep the current order, but new elements will from - now on once again be inserted at the end of the image of the table.</p> - </section> - - <section> - <title>How to Obtain Table Information</title> - <p>Information about the actual table is obtained via the <em>File</em> menu (or via the - <em>Table Info</em> toolbar button). The information is printed in a separate window, - with similar pieces of information grouped together on "flap cards" of their own. - By clicking on a flap, the information on the corresponding card is made visible.</p> - <image file="info_window.gif"> - <icaption>The Table Information Window, showing information about a Mnesia table.</icaption> - </image> - <p>The Table Information window may also be opened from the TV Main - Window, by selecting a table and then choose the <em>Table Info</em> option - in the <em>File</em> menu (or by double-clicking on the <em>Table Size</em> - field.</p> - <p>Note: The Table Information window will automatically be opened if the user tries - to open an unreadable table, since this is the only information available in this - case.</p> - </section> - </section> - - <section> - <title>The Table Browser Menus</title> - <p>The Table Browser offers the following menus:</p> - <p></p> - - <section> - <title>The File Menu</title> - <taglist> - <tag><em>Table Info</em></tag> - <item> - <p>Opens the Table Information window, which shows the available information - about the current table. </p> - </item> - <tag><em>Close</em></tag> - <item> - <p>Closes the Table Browser window.</p> - </item> - </taglist> - </section> - - <section> - <title>The Edit Menu</title> - <taglist> - <tag><em>Edit Object...</em></tag> - <item> - <p>Opens the Record Editor. If an object is marked, it will be shown in - the Record Editor.</p> - </item> - <tag><em>Delete Object</em></tag> - <item> - <p>Deletes a marked object.</p> - </item> - </taglist> - </section> - - <section> - <title>The View Menu</title> - <taglist> - <tag><em>Lists As Lists</em></tag> - <item> - <p>Causes lists in the table to be shown as lists.</p> - </item> - <tag><em>Lists As Strings</em></tag> - <item> - <p>Causes lists in the table to be shown as strings.</p> - </item> - </taglist> - </section> - - <section> - <title>The Options Menu</title> - <taglist> - <tag><em>Poll Table</em></tag> - <item> - <p>An explicit order to poll the table, i.e., to scan the content.</p> - </item> - <tag><em>Poll Interval...</em></tag> - <item> - <p>Choose between manual and automatic polling. In the case of automatic - polling, the user gets the opportunity to choose the polling interval.</p> - </item> - <tag><em>Search Object</em></tag> - <item> - <p>Enables search for objects containing (or consisting of) a specified - Erlang term, or matching a regular pattern. The search result may be used - for quick navigation in the table.</p> - </item> - <tag><em>Sort Ascending Order</em></tag> - <item> - <p>Shows the table content sorted in ascending (i.e., rising) order. - New objects will be shown with correct placement as long the as the sorting - is going on. <br></br> - - Please note that it is only the image of the table that is affected, - <em>not</em> the table itself!</p> - </item> - <tag><em>Sort Descending Order</em></tag> - <item> - <p>Shows the table content sorted in descending (i.e., falling) order. - New objects will be shown with correct placement as long the as the - sorting is going on.</p> - </item> - <tag><em>No Sorting</em></tag> - <item> - <p>Sorting mode is left. New objects will be shown last in the - table. However, older objects will remain in the position they had when - the sorting mode was left, i.e., their placement will not reflect their - actual placement in the ETS/Mnesia table.</p> - </item> - </taglist> - </section> - - <section> - <title>The Help Menu</title> - <taglist> - <tag><em>Help</em></tag> - <item> - <p>Shows the help (about TV usage) that is available. - (The help will be shown in the Netscape Internet browser, if available.)</p> - </item> - <tag><em>OTP Documentation</em></tag> - <item> - <p>Shows the Documentation about all OTP components that is available - in the local installation of OTP.</p> - </item> - </taglist> - </section> - </section> - </section> - - <section> - <title>Tracing the Owner Process</title> - <p>The process owning the table may easily be traced, by selecting either - the <em>Owner Pid</em> or the <em>Owner Name</em> field, and then choosing - the <em>Trace Process</em> option in the <em>File</em> menu. <br></br> - - (It is also possible to double-click on any of these fields.)</p> - </section> - - <section> - <title>Creating a New Table</title> - <p>A new table may easily be created using the <em>New Table window</em>. - Currently only ETS tables may be created. Since ETS tables - dies together with the parent process, a special process, registered - as <em>tv_table_owner</em>, will be the owner of tables created this way. - This process will not be affected by any termination of the TV, - i.e., the ETS tables created will live on until they are explicitly killed. - </p> - <image file="tv_create_table.gif"> - <icaption>The New Table Window, enabling easy creation of ETS tables.</icaption> - </image> - <p>Note: the <em>tv_table_owner</em> is local to each node, meaning - that the creation of a table on a new node also will start such a process - on that node. This way only the tables on a specific node dies, should that - specific node crash.</p> - </section> - - <section> - <title>The TV Main Window Menus</title> - <p>The Main Window offers the following menus:</p> - <p></p> - - <section> - <title>The File Menu</title> - <taglist> - <tag><em>Open Table</em></tag> - <item> - <p>Open a selected table in a new Table Browser.</p> - </item> - <tag><em>New Table</em></tag> - <item> - <p>Open the New Table window, enabling easy creation of ETS tables.</p> - </item> - <tag><em>Table Info</em></tag> - <item> - <p>Opens the Table Information window, showing the available - information about a selected table. </p> - </item> - <tag><em>Nodes...</em></tag> - <item> - <p>Open the Connected Nodes window, enabling the user to view - tables residing on remote nodes.</p> - </item> - <tag><em>Trace Process</em></tag> - <item>Opens a trace window, where the process owning a selected table can - be traced.</item> - <tag><em>Exit</em></tag> - <item> - <p>Terminates the TV.</p> - </item> - </taglist> - </section> - - <section> - <title>The View Menu</title> - <taglist> - <tag><em>ETS Tables</em></tag> - <item> - <p>Shows ETS tables on the current node.</p> - </item> - <tag><em>Mnesia tables</em></tag> - <item> - <p>Shows Mnesia tables on the current node.</p> - </item> - </taglist> - </section> - - <section> - <title>The Options Menu</title> - <taglist> - <tag><em>Refresh</em></tag> - <item> - <p>An explicit order to once again check the current node for existing - tables, and list them.</p> - </item> - <tag><em>Unreadable Tables</em></tag> - <item> - <p>Option to choose whether or not unreadable tables shall be shown.</p> - </item> - <tag><em>System Tables</em></tag> - <item> - <p>Option to choose whether or not system tables shall be shown.</p> - </item> - <tag><em>Sort by Name</em></tag> - <item> - <p>Shows the tables sorted by their names.</p> - </item> - <tag><em>Sort by Id</em></tag> - <item> - <p>Shows the tables sorted by their table identifiers.</p> - </item> - <tag><em>Sort by Owner PID</em></tag> - <item> - <p>Shows the tables sorted by the process identifiers of the owning - processes.</p> - </item> - <tag><em>Sort by Owner Name</em></tag> - <item> - <p>Shows the tables sorted by the registered names of the owning processes.</p> - </item> - <tag><em>Error Messages in Haiku</em></tag> - <item> - <p>Option to choose whether or not error messages shall be shown - in the Japanes poetry style called <em>Haiku</em>.</p> - </item> - </taglist> - </section> - - <section> - <title>The Help Menu</title> - <taglist> - <tag><em>Help</em></tag> - <item> - <p>Shows the help (about TV usage) that is available. - (The help will be shown in the Netscape Internet browser, if available.)</p> - </item> - <tag><em>OTP Documentation</em></tag> - <item> - <p>Shows the Documentation about all OTP components that is available - in the local installation of OTP.</p> - </item> - </taglist> - </section> - </section> -</chapter> - - diff --git a/lib/tv/doc/src/tv.gif b/lib/tv/doc/src/tv.gif Binary files differdeleted file mode 100644 index d78cf7d8ed..0000000000 --- a/lib/tv/doc/src/tv.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv.xml b/lib/tv/doc/src/tv.xml deleted file mode 100644 index 4a46003a71..0000000000 --- a/lib/tv/doc/src/tv.xml +++ /dev/null @@ -1,72 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE erlref SYSTEM "erlref.dtd"> - -<erlref> - <header> - <copyright> - <year>1997</year> - <year>2013</year> - <holder>Ericsson AB, All Rights Reserved</holder> - </copyright> - <legalnotice> - The contents of this file are subject to the Erlang Public License, - Version 1.1, (the "License"); you may not use this file except in - compliance with the License. You should have received a copy of the - Erlang Public License along with this software. If not, it can be - retrieved online at http://www.erlang.org/. - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and limitations - under the License. - - The Initial Developer of the Original Code is Ericsson AB. - </legalnotice> - - <title>tv</title> - <prepared>Fredrik Gustafson</prepared> - <responsible></responsible> - <docno></docno> - <approved></approved> - <checked></checked> - <date>1997-11-17</date> - <rev>1.0</rev> - <file>table_visualizer.sgml</file> - </header> - <module>tv</module> - <modulesummary>TV graphically examines ETS and Mnesia tables. </modulesummary> - <description> - <warning> - <p> - The TV application has been superseded by the Observer application. - TV will be removed in R16. - </p> - </warning> - <p>TV enables the user to examine ETS and Mnesia tables. Once - a certain table has been opened in the tool, the content may be viewed at - various levels of detail. The content viewed may also be sorted, using any - element as key. The table may be polled anytime; either regularly at - specified intervals, or manually. New and deleted objects, as well as those - altered, are marked with characteristic colors. </p> - </description> - <funcs> - <func> - <name>start() -> Pid</name> - <fsummary>Start TV.</fsummary> - <type> - <v>Pid = pid() </v> - </type> - <desc> - <p><c>start/0</c> starts the TV. </p> - </desc> - </func> - </funcs> - - <section> - <title>See Also</title> - <p>For a complete description of the TV, please - see the TV User's Guide. </p> - </section> -</erlref> - - diff --git a/lib/tv/doc/src/tv_create_table.gif b/lib/tv/doc/src/tv_create_table.gif Binary files differdeleted file mode 100644 index 7fae7f30cf..0000000000 --- a/lib/tv/doc/src/tv_create_table.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_create_table.ps b/lib/tv/doc/src/tv_create_table.ps deleted file mode 100644 index 0a3b24bcf5..0000000000 --- a/lib/tv/doc/src/tv_create_table.ps +++ /dev/null @@ -1,1120 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./tv_create_table.tmp.eps) -%%CreationDate: (Tue Jun 12 16:14:11 2001) -%%BoundingBox: 0 114 250 471 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 114 250 471 -userdict begin -%%BeginData: -DisplayImage -0 114 -250.000000 357.000000 -12 -410 585 -1 -0 -0 -8 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -aa2455 -999999 -000a01ff0183000b0208040001ff018300000208040000000208040002ff028300000208 -0400000002080400020000ff0080040002000000020804000000020204060200000004ff -0480020000000405020204000000020204000209000d02ff027700000202040000000202 -040002080000020d0400025e010302110103028d01010206010102640000020204000000 -0202040002080000020d0400025e01010202010702000101020301010201010102100103 -02180100020f010202020100021901050200010702010103020601070209010102060101 -026400000202040000000202040002080000020d0400025e010102050101020301010203 -010102010101020f01010201010102160101020f01020202010002190101020701010203 -01010201010102080101020c010102060101026400000202040000000202040002080000 -0202040602030400025e010102050101020301010203010102010101020e010102050101 -020001010201010302030103020101040201010302070100020001010201010002020103 -0202010102050101020501010207010102030101020c0101020401030203010102000101 -0203010102020103025d0000020204000000040302080000020204000304000002030400 -025e010102050101020401010202010002020101020e0101020501010200010102000101 -020101010201010102010101020101010202010102010101020601000200010102010100 -0201010102010101020101010201010102010101020501010207010102030102020b0101 -02030101020101010202010202000101020201010201010102010101025c000004030101 -020b0000020304000302000002040400025e010102050101020401010201010102020101 -020e01010205010202020101020101010205010102010101020201010201010102060100 -020001020200010002010101020101010202010102000101020001010206010402040101 -0204010302090101020701010202010102010101020201010201010102010101025f0103 -020b0000020304000302000002040400025e010102050101020501010200010002030101 -020e01010205010102030105020201040201010102020105020601000201010102000100 -020101050202010102000101020001010206010102070101020601020208010102040104 -02020101020101010202010102010105025f0103020b0000020404000300000002050400 -025e0101020501010205010302030101020e010102050101020301010205010102010101 -0201010102020101020a0100020201020201010102060107020601010207010102070101 -0208010102030101020101010202010102010101020201010201010102630103020b0000 -020404000300000002050400025e0101020501010206010102040101020f010102020100 -020001010203010102020100020101010201010102010101020201010202010002060100 -020201020201010102020100020301010201010102070101020701010203010102010101 -0208010102030101020101010202010102010101020201010201010102020100025f0103 -020b00000205000002060400025e01010205010102060101020401010210010302010101 -020401030203010202000101020101020201010302070100020301010202010302040101 -020101010207010502030101020401030209010102040102020001010201010402030101 -0202010302600103020b0000020d0400025e01030211010302ff02000103020b0000020d -040002ff02790103020b0000020d040002ff02790103020c040d02ff027a010302ff0295 -010302ff02950103020200ff008e0400020201030202000004ff048e0202010302ff0295 -010302020500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000020201030202000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050002020103020205000000 -05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c -0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 -01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 -000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff -058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 -05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 -010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 -0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 -05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c -0100020201030202000005ff058c0100050002020103020205000000056f07ff070e050d -01000202010302020000057007ff070d0000050c0100050002020103020205000000056f -070100ff000c050d010002020103020200000570070100ff000c050c0100050002020103 -020205000000056f070100ff000c050d010002020103020200000570070100ff000c050c -0100050002020103020205000000056f070100ff000c050d010002020103020200000570 -070100040100002001000030010000b2050c0100050002020103020205000000050a0100 -05020100050c0100055107010004010000130100000a0100000001000018010200130100 -00b2050d01000202010302020000050b010105010100050c01000551070100030100001f -010000020100001901000012010000b3050c0100050002020103020205000000050a0101 -050101000502010205030101050001000502010205040101054407010002010000040101 -000001000003010200030102000201000000010100020100000001020001010100000100 -000301020002010000000101000501000003010200020100000201000002010000b4050d -01000202010302020000050b010005000100050001000501010005020100050101000501 -010105010100050201000503010105440701000801000000010000000100000101000002 -010000040100000201010001010000010100000001000000010000010100000001000000 -010000010100000201000001010100010100000401000002010000020100000101000002 -010000b8050c0100050002020103020205000000050a0100050001000500010005010100 -0502010005010100050201000501010005020100054a0701000801000000010000000100 -000501000004010000020100000201000001010000000100000001000001010000000100 -000001000005010000010100000801000002010000020100000201000001010000b8050d -01000202010302020000050b010005010101050101000502010005010100050201000501 -0104054a0701000801000000010000000100000201030004010000020100000201000001 -010000000102000101000000010000000100000201030001010000080100000201040002 -01000001010000b8050c0100050002020103020205000000050a01000501010105010100 -05020100050101000502010005010100054e070100080100000001000000010000010100 -000201000004010000020100000201000001010000050100000001000000010000010100 -00020100000101000008010000020100000701000000010000b8050d0100020201030202 -0000050b0100050201000501010005020100050101000501010105010100050201000503 -010105440701000801000000010000000100000101000002010000040100000201000002 -010000020100000101000001010000000100000001000001010000020100000101000008 -010000020100000201000003010100b9050c0100050002020103020205000000050a0100 -050201000502010205030101050001000502010205040101054407010008010000000100 -000001000002010300040100000201000002010000030101000201000000010000000100 -000201030001010000080100000301020005010000b9050d010002020103020200000570 -07010051010000b9050c0100050002020103020205000000056f0701004e010000000100 -00ba050d0100020201030202000005700701004f010000bb050c01000500020201030202 -05000000056f070100ff000c050d010002020103020200000570070100ff000c050c0100 -050002020103020205000000056f070100ff000c050d0100020201030202000005700701 -00ff000c050c0100050002020103020205000000056f070100ff000c050d010002020103 -020200000570070000ff000d050c010005000202010302020500000005ff058c01000202 -01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 -000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff -058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 -05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 -010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 -0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 -05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c -0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 -01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 -000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff -058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 -05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 -010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 -0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 -056d01ff0112050b01000202010302020000056e01ff0112050a01000500020201030202 -05000000056d010107ff070e0101050b01000202010302020000056e010107ff070d0000 -0101050a0100050002020103020205000000056d0101070100ff000c0101050b01000202 -010302020000056e0101070100ff000c0101050a0100050002020103020205000000056d -0101070100ff000c0101050b01000202010302020000056e010107010000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -00d20101050a0100050002020103020205000000056d010107010337010100d20101050b -01000202010302020000056e0101070100000336010100d20101050a0100050002020103 -020205000000050a0104050801000506010205490101070103180100030a010003060102 -0307010100d20101050b01000202010302020000050d0100050a01000508010005490101 -0701000003170100030a0100030801000307010100d20101050a01000500020201030202 -05000000050c010005040102050201000500010105050100050301020509010005000101 -050301020502010105000100050301020504010105180101070103010101030001000302 -0100030201000308010403020102030201000300010103050100030301020300010100d2 -0101050b01000202010302020000050d0100050301000502010005010101050101000504 -010005020100050201000508010105010100050101000502010005010100050001000500 -010005010100050201000503010105180101070100000300010003000100030001000301 -010003020100030a01000303010003020100030101010301010003040100030201000302 -010200d20101050a0100050002020103020205000000050c010005070100050101000502 -010005040100050201000502010005080100050201000505010005010100050001000500 -01000501010005020100051e010107010301010003000100030001000302010003010100 -030a010003070100030101000302010003040100030201000302010200d20101050b0100 -0202010302020000050d0100050401030501010005020100050401000502010405080100 -050201000502010305010100050001000500010005010104051e01010701000003000100 -03000100030001000302010003010100030a010003040103030101000302010003040100 -0302010600d20101050a0100050002020103020205000000050c01000503010005020100 -05010100050201000504010005020100050c010005020100050101000502010005010100 -050001000500010005010100052201010701030101000300010003000100030301000300 -0100030a01000303010003020100030101000302010003040100030201000303010100d2 -0101050b01000202010302020000050d0100050301000502010005010101050101000504 -010005020100050201000508010005020100050101000502010005010100050001000500 -010005010100050201000503010105180101070100000300010003000100030001000303 -0101030b01000303010003020100030101010301010003040100030201000302010200d2 -0101050a0100050002020103020205000000050c01000504010305010100050001010505 -010005030102050901000502010005020103050101000500010005000100050201020504 -010105180101070103010100030001000300010003040100030c01010302010303010100 -0300010103050100030301020300010100d20101050b01000202010302020000056e0101 -07010000030a0100030101050322010100d20101050a0100050002020103020205000000 -056d010107010308010003000100032b010100d20101050b01000202010302020000056e -01010701000003080100032c010100d20101050a0100050002020103020205000000056d -010107010300010003000100030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -03000100030001000300010000d20101050b01000202010302020000056e0101070100ff -000c0101050a0100050002020103020205000000056d0101070100ff000c0101050b0100 -0202010302020000056e0101070100ff000c0101050a0100050002020103020205000000 -056d0101070100ff000c0101050b01000202010302020000056e0101070000ff000d0101 -050a0100050002020103020205000000056d01ff0112050b01000202010302020000056e -01ff0112050a010005000202010302020500000005ff058c0100020201030202000005ff -058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 -05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 -010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 -0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 -05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c -0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 -01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 -000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff -058c01000500020201030202050000000570000005000000050000000500000005000000 -0508010005020100051a0100050a0100050a01000506010205c601000202010302020000 -0570000005000000050000000500000005000000050001000507010105010100051a0100 -050a0100050a01000508010005c501000500020201030202050000000570000005060100 -050801010501010005020102050201010500010005030102050301010500010005080104 -050201020502010005000101050501000503010205bf0100020201030202000005700000 -050801000507010005000100050001000501010005020100050101000500010005000100 -05010100050201000501010005010101050a010005030100050201000501010105010100 -05040100050201000502010005bd01000500020201030202050000000570000005060100 -050801000500010005000100050501000501010005000100050001000501010005020100 -0501010005020100050a0100050701000501010005020100050401000502010005020100 -05be01000202010302020000057000000508010005070100050101010502010305010100 -0500010005000100050101040501010005020100050a0100050401030501010005020100 -050401000502010405bd0100050002020103020205000000057000000506010005080100 -050101010501010005020100050101000500010005000100050101000505010005020100 -050a010005030100050201000501010005020100050401000502010005c2010002020103 -020200000570000005080100050701000502010005010100050201000501010005000100 -0500010005010100050201000501010005010101050a0100050301000502010005010101 -0501010005040100050201000502010005bd010005000202010302020500000005700000 -050601000508010005020100050201030501010005000100050001000502010205030101 -05000100050b0101050201030501010005000101050501000503010205bf010002020103 -0202000005700000050001000500010005000100050001000500010005ff051001000500 -02020103020205000000057001000500010005000100050001000500010005ff05120100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100020201030202000005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050002020103 -020205000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000202010302020000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -0000050000000500000005000000050000000500000005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c0100050002020103020205000000050a010405ff -057c01000202010302020000050d010005ff057d0100050002020103020205000000050c -010005030100050201000501010005000101050301020504010105ff0561010002020103 -02020000050d010005030100050201000501010105010100050101000502010005030101 -05ff05600100050002020103020205000000050c01000504010005010100050101000502 -0100050101000502010005ff056701000202010302020000050d01000504010005010100 -05010100050201000501010405ff05660100050002020103020205000000050c01000505 -01000500010005010100050201000501010005ff056b01000202010302020000050d0100 -05050101050201010501010005010100050201000503010105ff05600100050002020103 -020205000000050c0100050601000502010005000101050301020504010105ff05610100 -0202010302020000051501000502010005ff057101000500020201030202050000000511 -0100050001000503010005ff057201000202010302020000051301000504010005ff0571 -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005440100 -0567000005670000057401000500020201030202050000000542010005000100051d0100 -0546000005000000050d0100055600000500000005110100051001020505010005120100 -05110100051f01000202010302020000054201000500010005000100051c010005450000 -0500000005000000050c0100055500000500000005000000051001000512010005190100 -05110100051e01000500020201030202050000000540010005000100060105000100050c -01020503010205020104054200000500000005020000050b010005000101050301020503 -010105000100054200000500000005020000050c01010500010005010100050201000501 -010005000101050501000503010205030102050301020502010405020102050901000500 -0101050301020503010105000100050d0100020201030202000005400100050001000603 -05000100050a010005020100050101000502010005030100054300000500000005040000 -050a01010501010005010100050201000501010005010101054100000500000005040000 -050a01000501010105010100050201000501010105010100050401000505010005020100 -050201000501010005020100050301000503010005020100050801010501010005010100 -050201000501010005010101050c0100050002020103020205000000053e010005000100 -060505000100050901000505010005020100050301000542000005000000050600000509 -010005020100050501000501010005020100054000000500000005060000050901000502 -010005010100050201000501010005020100050401000505010005020100050901000503 -010005030100050201000508010005020100050501000501010005020100050d01000202 -010302020000053e00000500000006070500000005090102050201040503010005410100 -05000100050801000508010005020100050201030501010005020100053f010005000100 -050801000508010005020100050101000502010005010100050201000504010005050100 -050201000506010305030100050301040508010005020100050201030501010005020100 -050c0100050002020103020205000000053e000005000000060505000000050d01000501 -010005070100054201000500010005060100050901000502010005010100050201000501 -010005020100054001000500010005060100050901000502010005010100050201000501 -01000502010005040100050501000502010005050100050201000503010005030100050c -01000502010005010100050201000501010005020100050d010002020103020200000540 -000005000000060305000000050a01000502010005010100050201000503010005430100 -0500010005040100050a0101050101000501010005020100050101000501010105410100 -0500010005040100050a0100050101010501010005010101050101010501010005040100 -050501000502010005020100050101000502010005030100050301000502010005080101 -0501010005010100050201000501010005010101050c0100050002020103020205000000 -0540000005000000060105000000050c0102050301020505010105420100050001000502 -0100050b010005000101050301030502010105000100054201000500010005020100050c -010105000100050201010500010005010100050001010505010005050100050301020503 -010305040101050201020509010005000101050301030502010105000100050d01000202 -010302020000054200000500000005000000056301000500010005000100051e01000543 -01000500010005000100051a0100052e010505130100050c010005000202010302020500 -000005420000050000000565010005000100051b0100050201000544010005000100051b -01000544010005020100050d010002020103020200000544000005670100051d01020546 -0100051c010005450102050d010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -0000050a010305120100051301000506010005ff054c01000202010302020000050b0100 -05020100051101000513010005ff05530100050002020103020205000000050a01000502 -010005010100050001010503010205020104050201020503010205020104050201020503 -010205020100050001010504010105ff053701000202010302020000050b010005020100 -050101010501010005010100050201000503010005030100050201000501010005020100 -0503010005060100050201000502010005010101050101000503010105ff053601000500 -02020103020205000000050a010305020100050501000502010005030100050301000502 -01000501010005070100050601000502010005020100050101000502010005ff053d0100 -0202010302020000050b0100050501000505010005020100050301000503010405010100 -05070100050601000502010005020100050101000502010005ff053c0100050002020103 -020205000000050a01000505010005050100050201000503010005030100050501000507 -0100050601000502010005020100050101000502010005ff053d01000202010302020000 -050b01000505010005050100050201000503010005030100050201000501010005020100 -0503010005060100050201000502010005010100050201000503010105ff053601000500 -02020103020205000000050a010005050100050601020505010105020102050301020505 -0101050401000503010205020100050201000503010105ff053701000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005440100 -0567000005670000057401000500020201030202050000000542010005000100051b0100 -050601020505010005370000050000000524010005130100050e0100051a000005000000 -051e010005120100054001000202010302020000054201000500010005000100051a0100 -05080100053d000005000000050000000523010005130100050e01000519000005000000 -0500000005310100053f0100050002020103020205000000054001000500010006010500 -0100050b0100050001010502010005020100050101000500010105050100050301020503 -0102052e00000500000005020000050b0100050001010502010005000101050301020502 -010405020102050301020502010405020102050301010500010005180000050000000502 -0000050b0100050001010502010005000101050301020502010005020100050201020502 -0104050201020538010002020103020200000540010005000100060305000100050a0101 -050101000501010005020100050101010501010005040100050501000502010005020100 -052c00000500000005040000050a01010501010005010101050101000501010005020100 -050301000503010005020100050101000502010005030100050301000502010005010100 -05010101051700000500000005040000050a010105010100050101010501010005040100 -050201000502010005010100050201000503010005030100050201000536010005000202 -0103020205000000053e0100050001000605050001000509010005020100050101000502 -01000501010005020100050401000505010005020100052f000005000000050600000509 -010005020100050101000505010005020100050301000503010005020100050101000507 -010005030100050201000501010005020100051600000500000005060000050901000502 -010005010100050801000502010005020100050501000503010005030100050201000537 -01000202010302020000053e000005000000060705000000050801000502010005010100 -050201000501010005020100050401000505010005020100052e01000500010005080100 -050801000502010005010100050501000502010005030100050301040501010005070100 -050301040501010005020100051501000500010005080100050801000502010005010100 -050801000503010005000100050301030503010005030104053601000500020201030202 -05000000053e000005000000060505000000050901000502010005010100050201000501 -010005020100050401000505010005020100052f01000500010005060100050901000502 -010005010100050501000502010005030100050301000505010005070100050301000505 -010005020100051601000500010005060100050901000502010005010100050801000503 -01000500010005020100050201000503010005030100053b010002020103020200000540 -000005000000060305000000050a01010501010005010100050101010501010105010100 -05040100050501000502010005020100052c01000500010005040100050a010105010100 -050101000505010005020100050301000503010005020100050101000502010005030100 -05030100050201000501010005010101051701000500010005040100050a010105010100 -050101000508010005040100050301000502010005030100050301000502010005360100 -0500020201030202050000000540000005000000060105000000050b0100050001010503 -0101050001000501010005000101050501000505010005030102052e0100050001000502 -0100050b0100050001010502010005060102050501010502010205030102050501010502 -01020503010105000100051801000500010005020100050b010005000101050201000508 -010005040100050401030504010105020102053801000202010302020000054200000500 -000005000000050c0100055501000500010005000100050c010005550100050001000500 -0100050c0100056401000500020201030202050000000542000005000000050d01000556 -010005000100050d01000556010005000100050d01000565010002020103020200000544 -0000050e010005570100050e010005570100050e01000564010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -02020103020205000000056f072d05ee010002020103020200000570072c000005ed0100 -050002020103020205000000056f0701002b05ee0100020201030202000005700701002b -05ed0100050002020103020205000000056f0701002b05ee010002020103020200000570 -0701002b05ed0100050002020103020205000000056f0701002b05ee0100020201030202 -000005700701002b05ed0100050002020103020205000000050a010005020100052e0100 -05040100050601000521070100030100002605ee01000202010302020000050b01000501 -0100053501000529070100020101002605ed0100050002020103020205000000050a0100 -050001000504010205020100050201000508010005000101050301020503010205030102 -050201040502010205030102050201000500010105040101050c07010001010000000100 -002605ee01000202010302020000050b0101050401000502010005010100050201000508 -010105010100050101000502010005010100050201000504010005040100050601000502 -010005020100050101010501010005030101050c070100030100002605ed010005000202 -0103020205000000050a0100050001000503010005020100050201000501010005080100 -050201000501010005020100050101000508010005040100050601000502010005020100 -05010100050201000512070100030100002605ee01000202010302020000050b01000501 -010005020104050201000501010005080100050201000501010005020100050201020505 -010005040100050601000502010005020100050101000502010005120701000301000026 -05ed0100050002020103020205000000050a010005010100050201000507010005000100 -050801000502010005010100050201000505010005040100050401000506010005020100 -0502010005010100050201000512070100030100002605ee01000202010302020000050b -010005020100050101000502010005030101050901010501010005010100050201000501 -010005020100050401000504010005060100050201000502010005010100050201000503 -0101050c070100030100002605ed0100050002020103020205000000050a010005020100 -050201020505010005090100050001010503010205030102050501000505010105040100 -05030102050201000502010005030101050c070100010104002405ee0100020201030202 -0000051c01000509010005470701002b05ed010005000202010302020500000005180100 -05000100050a010005470701002b05ee01000202010302020000051a0100050b01000547 -0701002b05ed0100050002020103020205000000056f0701002b05ee0100020201030202 -000005700701002b05ed0100050002020103020205000000056f0701002b05ee01000202 -01030202000005700701002b05ed0100050002020103020205000000056f0701002b05ee -0100020201030202000005700700002c05ed010005000202010302020500000005ff058c -0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 -01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 -000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff -058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 -05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 -010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 -0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 -05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c -0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 -01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 -000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff -058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 -050002020103020205000000050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000202010302020000050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500020201030202 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000002020103020200000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000202010302020500000005ff058c -0100020201030202000005ff058c010005000202010302020500000005ff058c01000202 -01030202000005ff058c010005000202010302020500000005ff058c0100020201030202 -000005ff058c010005000202010302020500000005ff058c0100020201030202000005ff -058c010005000202010302020500000005ff058c0100020201030202000005ff058c0100 -05000202010302020500000005ff058c0100020201030202000005ff058c010005000202 -010302020500000005ff058c0100020201030202000005ff058c01000500020201030202 -0500000005ff058c0100020201030202000005ff058c0100050002020103020205000000 -05ff058c0100020201030202000005ff058c010005000202010302020500000005ff058c -0100020201030202000005ff058c01000500020201030202050000000557010005000100 -05000100050001000500010005090102051e010005fe0100020201030202000005570100 -05000100050001000500010005000100050000000507010005020100051d010005fd0100 -050002020103020205000000055701000606000005080100050201000501010005000101 -050301020502010005000101050901000500010105020100050001010503010205020100 -050201000502010205030102050201000500010105d10100020201030202000005570100 -050006060500000005070100050201000501010105010100050101000502010005010101 -050101000508010105010100050101010501010005010100050201000501010005020100 -05010100050201000501010005020100050101010501010005cf01000500020201030202 -050000000557010006060000050801000502010005010100050201000501010005020100 -050101000502010005080100050201000501010005050100050201000501010005000100 -050001000501010005050100050201000501010005d40100020201030202000005570100 -050006060500000005070100050201000501010005020100050101040501010005020100 -050801000502010005010100050501000502010005010100050001000500010005020102 -050201040501010005d30100050002020103020205000000055701000606000005080100 -050201000501010005020100050101000505010005020100050801000502010005010100 -050501000502010005010100050001000500010005050100050101000505010005d40100 -020201030202000005570100050006060500000005070100050201000501010105010100 -050101000502010005010100050201000508010105010100050101000505010005020100 -050101000500010005000100050101000502010005010100050201000501010005d30100 -050002020103020205000000055701000606000005090102050201000500010105030102 -050201000502010005080100050001010502010005060102050301000500010005030102 -050301020502010005d40100020201030202000005570100050000000500000005000000 -0500000005000000050e010005ff05190100050002020103020205000000055700000500 -0000050000000500000005000000050f010005ff051a0100020201030202000005710100 -05ff0519010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -020200000556000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000052800000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005460100050002020103020205000000055400000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005280000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000548010002020103 -020200000556000005600100052800000560010005460100050002020103020205000000 -055400000560010005280000056001000548010002020103020200000556000005600100 -052800000560010005460100050002020103020205000000055400000560010005280000 -056001000548010002020103020200000556000005600100052800000560010005460100 -050002020103020205000000055400000560010005280000056001000548010002020103 -020200000556000005600100052800000560010005460100050002020103020205000000 -05540000052a01020502010005020100052a010005280000051c0102051f0102051d0100 -0548010002020103020200000556000005280100050201000501010005010100052c0100 -05280000051a01000502010005200100051e010005460100050002020103020205000000 -0554000005290100050201000501010005000100052c010005280000051b010005020100 -050201020502010005000101050301020503010205050100051d01000548010002020103 -0202000005560000052801000502010005010101052e010005280000051a010005050100 -0502010005010101050101000501010005020100050101000502010005040100051e0100 -054601000500020201030202050000000554000005290100050201000501010005000100 -052c010005280000051b0100050901000501010005020100050101000505010005020100 -05040100051d010005480100020201030202000005560000052801000502010005010100 -05010100052c010005280000051a01000506010305010100050201000501010005050104 -05040100051e010005460100050002020103020205000000055400000529010005020100 -0501010005010100052b010005280000051b010005020100050101000502010005010100 -05020100050101000505010005080100051d010005480100020201030202000005560000 -05280100050201000501010005020100052b010005280000051a01000502010005010100 -0502010005010100050201000501010005020100050101000502010005040100051e0100 -0546010005000202010302020500000005540000052a01020502010005020100052a0100 -05280000051c0102050301030501010005020100050201020503010205050100051d0100 -054801000202010302020000055600000560010005280000056001000546010005000202 -010302020500000005540000056001000528000005600100054801000202010302020000 -055600000560010005280000056001000546010005000202010302020500000005540000 -056001000528000005600100054801000202010302020000055600000560010005280000 -056001000546010005000202010302020500000005540000056001000528000005600100 -054801000202010302020000055600000560010005280000056001000546010005000202 -010302020500000005540000056001000528000005600100054801000202010302020000 -055600000560010005280000056001000546010005000202010302020500000005540000 -056001000528000005600100054801000202010302020000055600000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005280000050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000546010005000202 -010302020500000005540000050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000528000005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -05000100050001000500010005480100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c0100020201030202000005ff058c010005000202010302020500000005ff -058c0100020201030202000005ff058c010005000202010302020500000005ff058c0100 -020201030202000005ff058c010005000202010302020500000005ff058c010002020103 -0202000005ff058c010005000202010302020500000005ff058c01000202010302020000 -05ff058c010005000202010302020500000005ff058c0100020201030202000005ff058c -010005000202010302020500000005ff058c0100020201030202000005ff058c01000500 -0202010302020500000005ff058c0100020201030202000005ff058c0100050002020103 -02020500000005ff058c0100020201030202000005ff058c010005000202010302020500 -000005ff058c010002020101000505ff058c010005000005020204000500000005ff058c -0100000002020400000002020400000005ff058c01000500000002020400000002020400 -0500000005ff058c01000000020204000000020204000000050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500000002020400 -000002020400050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100050001000500010005000100000002020400000002020400000502ff028300060202 -040000000208040002ff028300000208040000000208040002ff02830000020804000000 -0208040001ff01830000020804000000040901ff018300000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 114 250 471 -%%EOF diff --git a/lib/tv/doc/src/tv_record_editor_mnesia.gif b/lib/tv/doc/src/tv_record_editor_mnesia.gif Binary files differdeleted file mode 100644 index fbbdcab515..0000000000 --- a/lib/tv/doc/src/tv_record_editor_mnesia.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_record_editor_mnesia.ps b/lib/tv/doc/src/tv_record_editor_mnesia.ps deleted file mode 100644 index b4d19f963f..0000000000 --- a/lib/tv/doc/src/tv_record_editor_mnesia.ps +++ /dev/null @@ -1,897 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./tv_record_editor_mnesia.tmp.eps) -%%CreationDate: (Tue Jun 12 16:09:57 2001) -%%BoundingBox: 0 41 300 330 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 41 300 330 -userdict begin -%%BeginData: -DisplayImage -0 41 -300.000000 289.000000 -12 -385 371 -1 -0 -0 -8 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -b22222 -999999 -000a01ff016a000b0208040001ff016a00000208040000000208040002ff026a00000208 -0400000002080400020000ff0067040002000000020804000000020204060200000004ff -0467020000000405020204000000020204000209000d02ff025e00000202040000000202 -040002080000020d04000242010302110103023701010211010102020101022301010231 -01010206010102090101023e00000202040000000202040002080000020d040002420101 -02020107020001010203010102010101020e010402230101020601050204010102020101 -02020100021f01010201010002130100020c0100020b01010206010102090101023e0000 -0202040000000202040002080000020d0400024201010205010102030101020301010201 -0101020e0101020101010222010102060101020801010206010102200100020001010212 -0101020b0101020b010102060101020a0100023e00000202040000000202040002080000 -02020406020304000242010102050101020301010203010102010101020e010102010101 -020201030203010302020103020201010200010102010104020601010205010402020101 -0200010402010103020201010200010102000101020c0100020001040201010302030104 -0200010402080104020101030203010102000101020301010202010302020100023f0000 -020204000000040302080000020204000304000002030400024201010205010102040101 -0202010002020101020e0101020101000202010102010101020101010201010102000101 -020101010201010102000101020001010201010102060101020401010201010102020101 -020101010202010102010101020101010200010102000101020f01010202010102010101 -0201010102050101020b0101020201010201010102020102020001010202010102010101 -020101010242000004030101020b00000203040003020000020404000242010102050101 -020401010201010102020101020e01030203010102010101020101010204010102010101 -020101020202010102010101020601040201010102010101020201010201010102020101 -02010101020101020214010102020101020101010201010202040101020b010102060101 -020201010201010102020101020101010201010102450103020b00000203040003020000 -020404000242010102050101020501010200010002030101020e01010200010102020105 -020101010204010102010101020101010203010102010101020601010204010102010101 -020201010201010102020101020101010201010102150101020201050202010302020101 -020b0101020301040202010102010101020201010201010502450103020b000002040400 -030000000205040002420101020501010205010302030101020e01010200010102020101 -020501010204010102010101020101010203010102010101020601010204010102010101 -020201010201010102020101020101010201010102150101020201010208010202010101 -020b010102020101020101010202010102010101020201010201010102490103020b0000 -02040400030000000205040002420101020501010206010102040101020e010102010101 -020101010202010002010101020201000200010102010101020101010203010102000102 -020601010204010102000102020201010201010102020101020101010201010102030101 -020f010102020101020201000205010102010101020b0101020201010201010102020101 -0201010102020101020101010202010002450103020b0000020500000206040002420101 -020501010206010102040101020e01010201010202010103020301030202010302020101 -020401010200010102060105020101010200010102020101020201020201010302020101 -0203010102100102020101030202010402030102020a0102020101020200010102010104 -020301010202010302460103020b0000020d040002420103021101030293010602680103 -020b0000020d040002ff02600103020b0000020d040002ff02600103020c040d02ff0261 -010302ff027c010302ff027c0103020200ff00750400020201030202000004ff04750202 -010302ff027c010302020500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000202010302020000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050001000202010302020500000005ff057201000500020201030202000005ff05740100 -0202010302020500000005ff057201000500020201030202000005ff0574010002020103 -02020500000005ff057201000500020201030202000005ff057401000202010302020500 -000005ff057201000500020201030202000005ff057401000202010302020500000005ff -057201000500020201030202000005ff057401000202010302020500000005ff05720100 -0500020201030202000005ff057401000202010302020500000005ff0572010005000202 -01030202000005ff057401000202010302020500000005ff057201000500020201030202 -000005ff057401000202010302020500000005ff057201000500020201030202000005ff -057401000202010302020500000005ff057201000500020201030202000005ff05740100 -02020103020205000000054e01ff0116050c010005000202010302020000054f01ff0116 -050d010002020103020205000000054e010107ff07120101050c01000500020201030202 -0000054f010107ff071100000101050d010002020103020205000000054e0101070100ff -00100101050c010005000202010302020000054f0101070100ff00100101050d01000202 -0103020205000000054e0101070100ff00100101050c010005000202010302020000054f -010107010000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -00000300000003000000030000000300000003000000030000d00101050d010002020103 -020205000000054e01010701034000cf0101050c010005000202010302020000054f0101 -07010000033e010000cf0101050d010002020103020205000000054e0101070103130100 -030b01010304010003140100030100cf0101050c010005000202010302020000054f0101 -0701000003120100030a0100031c01000300010000cf0101050d01000202010302020500 -0000050f0100050001010503010205020101050001000503010205250101070103010100 -030201000301010003000101030301010300010003020102030401000304010203020100 -03000101030301020303010103000100030100cf0101050c010005000202010302020000 -051001010501010005010100050201000501010005000100050001000501010005020100 -052401010701000003000100030201000301010103010100030101000301010103010100 -030201000301010403040100030201010301010003010100030201000301010003010101 -0300010000cf0101050d010002020103020205000000050f010005020100050501000501 -010005000100050001000501010005020100052401010701030101000302010003010100 -030201000301010003020100030101000302010003030100030601000302010003020100 -03010100030201000301010003020100030100cf0101050c010005000202010302020000 -051001000502010005020103050101000500010005000100050101040524010107010000 -030001000302010003010100030201000301010003020100030101040303010003060100 -03020100030201000301010403010100030201000300010000cf0101050d010002020103 -020205000000050f01000502010005010100050201000501010005000100050001000501 -010005280101070103010100030201000301010003020100030101000302010003010100 -03070100030601000302010003020100030101000305010003020100030100cf0101050c -010005000202010302020000051001000502010005010100050201000501010005000100 -050001000501010005020100052401010701000003000100030101010301010003020100 -030101000301010103010100030201000303010003060100030201000302010003010100 -0302010003010100030101010300010000cf0101050d010002020103020205000000050f -010005020100050201030501010005000100050001000502010205250101070103020101 -030001000301010003020100030201010300010003020102030401000306010003020100 -03020100030201020303010103000100030100cf0101050c010005000202010302020000 -054f010107010000033e010000cf0101050d010002020103020205000000054e01010701 -034000cf0101050c010005000202010302020000054f010107010000033e010000cf0101 -050d010002020103020205000000054e0101070103000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -03000100030000cf0101050c010005000202010302020000054f0101070100ff00100101 -050d010002020103020205000000054e0101070100ff00100101050c0100050002020103 -02020000054f0101070100ff00100101050d010002020103020205000000054e01010701 -00ff00100101050c010005000202010302020000054f0101070000ff00110101050d0100 -02020103020205000000054e01ff0116050c010005000202010302020000054f01ff0116 -050d01000202010302020500000005ff057201000500020201030202000005ff05740100 -0202010302020500000005ff057201000500020201030202000005ff0574010002020103 -02020500000005ff057201000500020201030202000005ff057401000202010302020500 -000005ff057201000500020201030202000005ff057401000202010302020500000005ff -057201000500020201030202000005ff057401000202010302020500000005ff05720100 -0500020201030202000005ff0574010002020103020205000000055007ff0712050e0100 -05000202010302020000055107ff07110000050f01000202010302020500000005500701 -00ff0010050e0100050002020103020200000551070100ff0010050f0100020201030202 -050000000550070100ff0010050e0100050002020103020200000551070100ff0010050f -0100020201030202050000000550070100ff0010050e0100050002020103020200000551 -070100ff0010050f010002020103020205000000051a010005050100052d070100130100 -000b0101000401000014010000d1050e010005000202010302020000051b010005050100 -052d070100130100000a0100001c010000d1050f01000202010302020500000005100102 -050301010500010005020101050001000501010005000101050301020503010205030102 -051207010001010000020100000101000000010100030101000001000002010200040100 -00040102000201000000010100030102000301010000010000d1050e0100050002020103 -020200000510010005020100050101000501010105010100050101010501010105010100 -050101000502010005010100050201000501010005020100051107010001010000020100 -000101010001010000010100000101010001010000020100000101040004010000020101 -000101000001010000020100000101000001010100d1050f010002020103020205000000 -051301000501010005020100050101000502010005010100050501000502010005010100 -050501000515070100010100000201000001010000020100000101000002010000010100 -000201000003010000060100000201000002010000010100000201000001010000020100 -00d1050e0100050002020103020200000511010305010100050201000501010005020100 -050101000505010405020102050301020512070100010100000201000001010000020100 -000101000002010000010104000301000006010000020100000201000001010400010100 -0002010000d1050f010002020103020205000000050f0100050201000501010005020100 -050101000502010005010100050501000509010005050100051107010001010000020100 -000101000002010000010100000201000001010000070100000601000002010000020100 -00010100000501000002010000d1050e0100050002020103020200000510010005020100 -050101000501010105010100050101010501010005050100050201000501010005020100 -050101000502010005110701000101000001010100010100000201000001010000010101 -000101000002010000030100000601000002010000020100000101000002010000010100 -0001010100d1050f01000202010302020500000005100103050201010500010005020101 -050001000501010005060102050301020503010205120701000201010000010000010100 -000201000002010100000100000201020004010000060100000201000002010000020102 -000301010000010000d1050e0100050002020103020200000551070100ff0010050f0100 -020201030202050000000550070100ff0010050e01000500020201030202000005510701 -00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103 -020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e -0100050002020103020200000551070100ff0010050f0100020201030202050000000550 -070100ff0010050e0100050002020103020200000551070000ff0011050f010002020103 -02020500000005ff057201000500020201030202000005ff057401000202010302020500 -000005ff057201000500020201030202000005ff057401000202010302020500000005ff -057201000500020201030202000005ff057401000202010302020500000005ff05720100 -0500020201030202000005ff057401000202010302020500000005ff0572010005000202 -01030202000005ff057401000202010302020500000005ff057201000500020201030202 -000005ff057401000202010302020500000005ff057201000500020201030202000005ff -0574010002020103020205000000055007ff0712050e0100050002020103020200000551 -07ff07110000050f0100020201030202050000000550070100ff0010050e010005000202 -0103020200000551070100ff0010050f0100020201030202050000000550070100ff0010 -050e0100050002020103020200000551070100ff0010050f010002020103020205000000 -0550070100ff0010050e0100050002020103020200000551070100ff0010050f01000202 -010302020500000005190100052201000511070100130100000b01010004010000140100 -00d1050e010005000202010302020000053e01000511070100130100000a0100001c0100 -00d1050f010002020103020205000000050f0104050201020502010005000101050a0102 -05030102050301010500010005020102050b070100010100000201000001010000000101 -000301010000010000020102000401000004010200020100000001010003010200030101 -0000010000d1050e01000500020201030202000005140100050401000502010105010100 -0508010005020100050101000502010005010100050101010501010005020100050a0701 -000101000002010000010101000101000001010000010101000101000002010000010104 -0004010000020101000101000001010000020100000101000001010100d1050f01000202 -010302020500000005120100050501000502010005020100050801000505010005020100 -05010100050201000501010005020100050a070100010100000201000001010000020100 -000101000002010000010100000201000003010000060100000201000002010000010100 -00020100000101000002010000d1050e0100050002020103020200000512010005060100 -0502010005020100050801000505010005020100050101000502010005010104050a0701 -000101000002010000010100000201000001010000020100000101040003010000060100 -000201000002010000010104000101000002010000d1050f010002020103020205000000 -051001000507010005020100050201000508010005050100050201000501010005020100 -05010100050e070100010100000201000001010000020100000101000002010000010100 -0007010000060100000201000002010000010100000501000002010000d1050e01000500 -020201030202000005100100050801000502010105010100050801000502010005010100 -0502010005010100050101010501010005020100050a0701000101000001010100010100 -000201000001010000010101000101000002010000030100000601000002010000020100 -0001010000020100000101000001010100d1050f010002020103020205000000050f0104 -050401000502010005000101050a010205030102050301010500010005020102050b0701 -000201010000010000010100000201000002010100000100000201020004010000060100 -000201000002010000020102000301010000010000d1050e010005000202010302020000 -051e0100050401050526070100ff0010050f010002020103020205000000051d01000531 -070100ff0010050e010005000202010302020000051e01000531070100ff0010050f0100 -020201030202050000000550070100ff0010050e01000500020201030202000005510701 -00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103 -020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e -0100050002020103020200000551070000ff0011050f01000202010302020500000005ff -057201000500020201030202000005ff057401000202010302020500000005ff05720100 -0500020201030202000005ff057401000202010302020500000005ff0572010005000202 -01030202000005ff057401000202010302020500000005ff057201000500020201030202 -000005ff057401000202010302020500000005ff057201000500020201030202000005ff -057401000202010302020500000005ff057201000500020201030202000005ff05740100 -0202010302020500000005ff057201000500020201030202000005ff0574010002020103 -020205000000055007ff0712050e010005000202010302020000055107ff07110000050f -0100020201030202050000000550070100ff0010050e0100050002020103020200000551 -070100ff0010050f0100020201030202050000000550070100ff0010050e010005000202 -0103020200000551070100ff0010050f0100020201030202050000000550070100ff0010 -050e0100050002020103020200000551070100ff0010050f010002020103020205000000 -05180100050c01000528070100130100000b0101000401000014010000d1050e01000500 -020201030202000005190100050c01000528070100130100000a0100001c010000d1050f -010002020103020205000000051001020502010405020102050201040502010205200701 -000101000002010000010100000001010003010100000100000201020004010000040102 -000201000000010100030102000301010000010000d1050e010005000202010302020000 -0510010005020100050301000503010005020100050301000503010005020100051f0701 -000101000002010000010101000101000001010000010101000101000002010000010104 -0004010000020101000101000001010000020100000101000001010100d1050f01000202 -0103020205000000050f01000507010005070100050301000503010005020100051f0701 -000101000002010000010100000201000001010000020100000101000002010000030100 -0006010000020100000201000001010000020100000101000002010000d1050e01000500 -02020103020200000511010205040100050401030503010005030104051f070100010100 -000201000001010000020100000101000002010000010104000301000006010000020100 -0002010000010104000101000002010000d1050f01000202010302020500000005130100 -050301000503010005020100050301000503010005230701000101000002010000010100 -000201000001010000020100000101000007010000060100000201000002010000010100 -000501000002010000d1050e010005000202010302020000051001000502010005030100 -0503010005020100050301000503010005020100051f0701000101000001010100010100 -000201000001010000010101000101000002010000030100000601000002010000020100 -0001010000020100000101000001010100d1050f01000202010302020500000005100102 -050501010502010305040101050201020520070100020101000001000001010000020100 -000201010000010000020102000401000006010000020100000201000002010200030101 -0000010000d1050e0100050002020103020200000551070100ff0010050f010002020103 -0202050000000550070100ff0010050e0100050002020103020200000551070100ff0010 -050f0100020201030202050000000550070100ff0010050e010005000202010302020000 -0551070100ff0010050f0100020201030202050000000550070100ff0010050e01000500 -02020103020200000551070100ff0010050f0100020201030202050000000550070100ff -0010050e0100050002020103020200000551070000ff0011050f01000202010302020500 -000005ff057201000500020201030202000005ff057401000202010302020500000005ff -057201000500020201030202000005ff057401000202010302020500000005ff05720100 -0500020201030202000005ff057401000202010302020500000005ff0572010005000202 -01030202000005ff057401000202010302020500000005ff057201000500020201030202 -000005ff057401000202010302020500000005ff057201000500020201030202000005ff -057401000202010302020500000005ff057201000500020201030202000005ff05740100 -02020103020205000000055007ff0712050e010005000202010302020000055107ff0711 -0000050f0100020201030202050000000550070100ff0010050e01000500020201030202 -00000551070100ff0010050f0100020201030202050000000550070100ff0010050e0100 -050002020103020200000551070100ff0010050f01000202010302020500000005500701 -00ff0010050e0100050002020103020200000551070100ff0010050f0100020201030202 -05000000052d01000521070100130100000b0101000401000014010000d1050e01000500 -0202010302020000052e01000521070100130100000a0100001c010000d1050f01000202 -010302020500000005100102050301020502010005020100050101000500010105020104 -050101000500010105020100050201000511070100010100000201000001010000000101 -000301010000010000020102000401000004010200020100000001010003010200030101 -0000010000d1050e01000500020201030202000005100100050201000501010005020100 -050101000502010005010101050101000503010005030101050101000501010005020100 -051107010001010000020100000101010001010000010100000101010001010000020100 -000101040004010000020101000101000001010000020100000101000001010100d1050f -010002020103020205000000050f01000505010005020100050101000502010005010100 -050201000503010005030100050601000501010005110701000101000002010000010100 -000201000001010000020100000101000002010000030100000601000002010000020100 -0001010000020100000101000002010000d1050e01000500020201030202000005100100 -050501000502010005010100050201000501010005020100050301000503010005060100 -050101000511070100010100000201000001010000020100000101000002010000010104 -0003010000060100000201000002010000010104000101000002010000d1050f01000202 -0103020205000000050f0100050501000502010005010100050201000501010005020100 -050301000503010005070100050001000511070100010100000201000001010000020100 -000101000002010000010100000701000006010000020100000201000001010000050100 -0002010000d1050e01000500020201030202000005100100050201000501010005020100 -050101000501010105010100050201000503010005030100050701010512070100010100 -000101010001010000020100000101000001010100010100000201000003010000060100 -00020100000201000001010000020100000101000001010100d1050f0100020201030202 -050000000510010205030102050301010500010005010100050201000504010105010100 -050801000512070100020101000001000001010000020100000201010000010000020102 -0004010000060100000201000002010000020102000301010000010000d1050e01000500 -0202010302020000053d01000512070100ff0010050f0100020201030202050000000539 -0100050001000513070100ff0010050e010005000202010302020000053b010005140701 -00ff0010050f0100020201030202050000000550070100ff0010050e0100050002020103 -020200000551070100ff0010050f0100020201030202050000000550070100ff0010050e -0100050002020103020200000551070100ff0010050f0100020201030202050000000550 -070100ff0010050e0100050002020103020200000551070000ff0011050f010002020103 -02020500000005ff057201000500020201030202000005ff057401000202010302020500 -000005ff057201000500020201030202000005ff057401000202010302020500000005ff -057201000500020201030202000005ff057401000202010302020500000005ff05720100 -0500020201030202000005ff057401000202010302020500000005ff0572010005000202 -01030202000005ff057401000202010302020500000005ff057201000500020201030202 -000005ff057401000202010302020500000005ff057201000500020201030202000005ff -057401000202010302020500000005ff057201000500020201030202000005ff05740100 -0202010302020500000005ff057201000500020201030202000005ff0574010002020103 -02020500000005ff057201000500020201030202000005ff057401000202010302020500 -000005ff052f000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500000005000000050b01000500020201030202000005ff052f00000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500000005000000050000000500000005000000050000000500000005000100050b0100 -0202010302020500000005ff052f000005340100050b01000500020201030202000005ff -052f000005360100050b01000202010302020500000005ff052f0000052a060005080100 -050b01000500020201030202000005ff052f0000050906000502060005110600050a0600 -05080100050b01000202010302020500000005ff052f0000050806010501060005110600 -050b060005060100050b01000500020201030202000005ff052f00000509060105010600 -05020602050206000502060005010604050a060005060100050b01000202010302020500 -000005ff052f000005080600050006000500060005010600050206000501060005020600 -05030600050d060005040100050b01000500020201030202000005ff052f000005090600 -05000600050006000501060005020600050206000500060005040600050e060005040100 -050b01000202010302020500000005ff052f000005080600050106010501060405030600 -05050600050d060005040100050b01000500020201030202000005ff052f000005090600 -0501060105010600050606000500060005040600050c060005060100050b010002020103 -02020500000005ff052f0000050806000502060005010600050206000501060005020600 -05030600050b060005060100050b01000500020201030202000005ff052f000005090600 -05020600050206020502060005020600050406010508060005080100050b010002020103 -02020500000005ff052f0000052a060005080100050b01000500020201030202000005ff -052f000005360100050b01000202010302020500000005ff052f000005340100050b0100 -0500020201030202000005ff052f000005360100050b01000202010302020500000005ff -052f000005340100050b01000500020201030202000005ff052f000005360100050b0100 -0202010302020500000005ff052f00000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -05000100050001000500010005000100050b01000500020201030202000005ff052f0000 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -05000100050b01000202010302020500000005ff057201000500020201030202000005ff -057401000202010302020500000005ff057201000500020201030202000005ff05740100 -0202010302020500000005ff057201000500020201030202000005ff0574010002020103 -02020500000005ff057201000500020201030202000005ff057401000202010302020500 -000005ff057201000500020201030202000005ff057401000202010302020500000005ff -057201000500020201030202000005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100020201030202050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500020201030202050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500020201030202000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -0000050001000202010302020500000005ff057201000500020201030202000005ff0574 -01000202010302020500000005ff057201000500020201030202000005ff057401000202 -010302020500000005ff057201000500020201030202000005ff05740100020201030202 -0500000005ff057201000500020201030202000005ff0574010002020103020205000000 -05ff057201000500020201030202000005ff057401000202010302020500000005ff0572 -01000500020201030202000005ff057401000202010302020500000005ff057201000500 -020201030202000005ff057401000202010302020500000005ff05720100050002020103 -0202000005ff057401000202010302020500000005ff0572010005000202010302020000 -05ff057401000202010302020500000005ff057201000500020201030202000005ff0574 -01000202010302020500000005ff057201000500020201030202000005ff057401000202 -010302020500000005ff0572010005000202010302020000052e00000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000517000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005170000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0528010002020103020205000000052c0000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000051700000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000517000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005280100050002020103 -02020000052e0000054c010005170000054c010005170000054c01000528010002020103 -020205000000052c0000054c010005170000054c010005170000054c0100052801000500 -0202010302020000052e0000054c010005170000054c010005170000054c010005280100 -02020103020205000000052c0000054c010005170000054c010005170000054c01000528 -010005000202010302020000052e0000054c010005170000054c010005170000054c0100 -0528010002020103020205000000052c0000054c010005170000054c010005170000054c -01000528010005000202010302020000052e0000054c010005170000054c010005170000 -054c01000528010002020103020205000000052c000005110104051f0100051401000517 -000005120102051f01020513010005170000051401030519010005180100052801000500 -0202010302020000052e0000051201000521010005150100051700000510010005020100 -052001000514010005170000051301000502010005180100051901000528010002020103 -020205000000052c00000513010005030100050001010503010205030102050201000500 -010105020104051201000517000005110100050201000502010205020100050001010503 -010205030102050501000513010005170000051401000502010005020102050301020503 -010205020104051601000528010005000202010302020000052e00000512010005030101 -050101000501010005020100050101000502010005010101050101000503010005150100 -051700000510010005050100050201000501010105010100050101000502010005010100 -050201000504010005140100051700000513010005020100050101000502010005010100 -05020100050101000502010005030100051901000528010002020103020205000000052c -000005130100050301000502010005010100050501000502010005010100050701000514 -010005170000051101000509010005010100050201000501010005050100050201000504 -010005130100051700000514010305020100050201000501010005050100050201000503 -0100051801000528010005000202010302020000052e0000051201000503010005020100 -050201020502010405010100050701000515010005170000051001000506010305010100 -050201000501010005050104050401000514010005170000051301000501010005020104 -050201020502010405030100051901000528010002020103020205000000052c00000513 -010005030100050201000505010005010100050501000507010005140100051700000511 -010005020100050101000502010005010100050201000501010005050100050801000513 -010005170000051401000502010005010100050901000501010005070100051801000528 -010005000202010302020000052e00000512010005030100050201000501010005020100 -050101000502010005010100050701000515010005170000051001000502010005010100 -050201000501010005020100050101000502010005010100050201000504010005140100 -051700000513010005020100050101000502010005010100050201000501010005020100 -05030100051901000528010002020103020205000000052c000005110104050101000502 -010005020102050301020502010005080101051201000517000005120102050301030501 -010005020100050201020503010205050100051301000517000005140100050201000502 -0102050301020503010205050101051601000528010005000202010302020000052e0000 -054c010005170000054c010005170000054c01000528010002020103020205000000052c -0000054c010005170000054c010005170000054c01000528010005000202010302020000 -052e0000054c010005170000054c010005170000054c0100052801000202010302020500 -0000052c0000054c010005170000054c010005170000054c010005280100050002020103 -02020000052e0000054c010005170000054c010005170000054c01000528010002020103 -020205000000052c0000054c010005170000054c010005170000054c0100052801000500 -0202010302020000052e0000054c010005170000054c010005170000054c010005280100 -02020103020205000000052c0000054c010005170000054c010005170000054c01000528 -010005000202010302020000052e0000054c010005170000054c010005170000054c0100 -0528010002020103020205000000052c0000054c010005170000054c010005170000054c -01000528010005000202010302020000052e000005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005170000 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100051700000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000528010002020103 -020205000000052c00000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000517000005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005170000050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100052801000500020201030202000005ff0574 -01000202010302020500000005ff057201000500020201030202000005ff057401000202 -010302020500000005ff057201000500020201030202000005ff05740100020201030202 -0500000005ff057201000500020201030202000005ff0574010002020103020205000000 -05ff057201000500020201030202000005ff057401000202010302020500000005ff0572 -01000500020201030202000005ff057401000202010302020500000005ff057201000500 -020201030202000005ff057401000202010302020500000005ff05720100050002020103 -0202000005ff057401000202010100040500000005ff0572010005000005020204000000 -05ff057401000000020204000000020204000500000005ff057201000500000002020400 -000002020400000005ff0574010000000202040000000202040005000000050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050000000202040000000202040000000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010000000202040000000202 -0400000502ff026a00060202040000000208040002ff026a000002080400000002080400 -02ff026a00000208040000000208040001ff016a0000020804000000040901ff016a0000 -0409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 41 300 330 -%%EOF diff --git a/lib/tv/doc/src/tv_row_marked.gif b/lib/tv/doc/src/tv_row_marked.gif Binary files differdeleted file mode 100644 index bc80eb34f1..0000000000 --- a/lib/tv/doc/src/tv_row_marked.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_row_marked.ps b/lib/tv/doc/src/tv_row_marked.ps deleted file mode 100644 index 99631c5046..0000000000 --- a/lib/tv/doc/src/tv_row_marked.ps +++ /dev/null @@ -1,1611 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./tv_row_marked.tmp.eps) -%%CreationDate: (Tue Jun 12 16:11:48 2001) -%%BoundingBox: 0 61 377 359 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 61 377 359 -userdict begin -%%BeginData: -DisplayImage -0 61 -377.000000 298.000000 -12 -719 569 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -b22222 -00ff00 -ff0000 -990000 -7f7f7f -999999 -ff7f7f -c8ffff -009900 -7fff7f -000a01ff01ff01b8000b0208040001ff01ff01b800000208040000000208040002ff02ff -02b8000002080400000002080400020000ff00ff00b50400020000000208040000000202 -04060200000004ff04ff04b5020000000405020204000000020204000209000d02ff02ff -02ac00000202040000000202040002080000020d04000274010302110103023201020258 -0102020c010102010101021e010102290101020601010208010102310101022a01010230 -0101028200000202040000000202040002080000020d0400027401010202010702000101 -0203010102010101020e01050200010702010103020d0101020401010204010302030103 -020e010302060103020301030203010302060103020b0101020a01010202010102190100 -02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101 -020c0104021e0101028200000202040000000202040002080000020d0400027401010205 -0101020301010203010102010101020e0101020701010203010102010101020c01010202 -010302030101020101010201010102010101020801010201010102010101020401010201 -01010201010102010101020101010201010102040101020101010201010102060101020a -0101020201010218010102210101020b01010206010102090101021b010202020100020d -01010238010102020101021d010102820000020204000000020204000208000002020406 -020304000274010102050101020301010203010102010101020e01010207010102030101 -020501010209010102030101020701010201010102010101020601020202010102010101 -020801010201010102010101020101010201010102040101020101010202010202030101 -020a01010203010102020103020301030202010302010104020101010202010302030101 -02000101020a0104020101030203010102000101020301010202010302030101021a0100 -020001010201010002020103020301040202010302020101020901010200010102010101 -020301030203010102020101020001010202010102010103020201010200010102010101 -020301030202010102000101020101010202010302020101020201010271000002020400 -000004030208000002020400030400000203040002740101020501010204010102020100 -02020101020e0101020701010203010202040101020a0100020301010207010102010101 -020101010205010102040101020101010208010102010101020101010201010102010101 -02040101020101010204010102020100020b010102030101020101010201010102010101 -020101010200010102010101020101010203010102010101020101010202010202000101 -020a01010202010102010101020201020200010102020101020101010201010102020101 -021a01000200010102010100020101010201010102010101020101010201010102010101 -020101010209010202000102020001010201010102010101020201010202010202000101 -020101010200010102000101020201020200010202000101020101010201010102010101 -0200010102010101020101010201010102010101020201010271000004030101020b0000 -0203040003020000020404000274010102050101020401010201010102020101020e0104 -0204010102040103020d0101020401010205010202020101020101010204010102050101 -020101010207010102020101020101010202010402040101020101010205010102020101 -020901010203010102010101020101010201010102080101020101010203010102010101 -020101010202010102010101020a01010206010102020101020101010202010102010101 -0201010102020101021a0100020001020200010002010101020101010201010102010101 -0201010102010101020d0101020101010201010102050101020201010202010102010101 -020101010200010102000101020201010201010102010101020501010201010202030101 -0201010102010101020101010202010002750103020b0000020304000302000002040400 -0274010102050101020501010200010002030101020e01010207010102060102020e0100 -020301010207010102010101020101010205010102040101020101010206010102030101 -020101010205010102040101020101010204010102020100020b01010203010102010101 -020101010201010102050104020101010203010102010101020101010202010102010101 -020a0101020301040202010102010101020201010201010502020101021a010002010101 -020001000201010102010101020101010201010102010105020d01010201010102010101 -020201040202010102020101020101010201010102000101020001010202010102010101 -0201010102020104020101010204010102010105020201010200010102750103020b0000 -02040400030000000205040002740101020501010205010302030101020e010102070101 -02070101020d010102030101020701010201010102010101020601020202010102010101 -0205010102040101020101010205010102040101020101010202010202030101020a0101 -020301010201010102010101020101010204010102010101020101010203010102010101 -020101010202010102010101020a01010202010102010101020201010201010102020101 -0201010102060101021a0100020201020201010102010101020101010201010102010101 -021101010201010102010101020101010201010102020101020201010201010102010101 -020101010200010102010101020101010201010102010101020101010201010102040101 -02010101020601010200010002760103020b000002040400030000000205040002740101 -020501010206010102040101020e01010207010102030101020101010201010102080101 -020401010203010102010101020101010201010102010101020401010201010102010101 -020101010200010502010101020101010201010102010101020101010200010102010101 -0201010102060101020a0101020201010201010102010101020101010202010002000101 -02010101020101010203010102010101020101010202010102010101020a010102020101 -02010101020201010201010102020101020101010202010002010101021b010002020102 -020101010201010102010101020001020201010102020100020101010209010102010101 -020101010201010102010101020201010202010102010101020201010207010102010101 -020101010201010102010101020101010204010102010101020201000203010202760103 -020b0000020500000206040002740101020501010206010102040101020e010502030101 -020401030202010102080101020401010204010302030103020201010209010302020101 -0200010502020103020301030202010102010103020b0101020a01010202010102020103 -0203010302020102020001010201010202010101020201030203010102010101020b0102 -020101020200010102010104020301010202010302020101021b01000203010102020103 -020301010200010102020103020201010209010102010101020101010202010202000101 -020101010202010102010101020301050202010102010101020101010202010202000101 -0200010102040101020201030204010102770103020b0000020d04000274010302110103 -0232010202190100023d0102020c01010237010602230101029e010102780103020b0000 -020d040002dd010002ff0254010102780103020b0000020d040002ff02ff02ae0103020c -040d02ff02ff02af010302ff02ff02ca010302ff02ff02ca0103020200ff00ff00c30400 -020201030202000004ff04ff04c30202010302ff02ff02ca010302020500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500020201030202000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500010002020103020205000000 -05ff05ff05c001000500020201030202000005ff05ff05c2010002020103020205000000 -05ff05ff05c001000500020201030202000005ff05ff05c2010002020103020205000000 -05ff05ff05c0010005000202010302020000050c06040504060005030602051f06040505 -0600050406000504060005190600050206000504060005270602050b06000506060005ff -05df060005020600050906020514010002020103020205000000050b0600050f0600051f -060005090600050a06000519060005020600052c060005020600050a060005ff05e70600 -05020600050b06000513010005000202010302020000050c060005060602050506000503 -060205180600050606010500060005020602050206040517060005020600050206020503 -060205020600050206000517060005020600050106000500060105020604050206020503 -060205020600050006010503060205ff05ca060005020600050206020505060005020600 -05000601050d010002020103020205000000050b06000508060005050600050206000502 -06000517060005050600050106010504060005040600051a060005000600050506000502 -060005020600050106000502060005170600050206000501060105010600050306000506 -060005020600050206000501060105010600050106000502060005ff05c9060005020600 -0501060005020600050406000502060105010600050b010005000202010302020000050c -060305050600050506000502060005020600051706030502060005020600050406000504 -0600051a0600050006000505060005020600050206000501060005000600050006000517 -060005020600050106000502060005030600050606000502060005020600050106000502 -06000501060005ff05cd06040501060005020600050406000502060005020600050c0100 -02020103020205000000050b060005080600050506000502060405170600050506000502 -06000504060005040600051a060005000600050506000502060405010600050006000500 -060005170600050206000501060005020600050306000506060005020600050206000501 -0600050206000502060205ff05ca06000502060005010604050406000502060005020600 -050b010005000202010302020000050c0600050806000505060005020600051b06000505 -0600050206000504060005040600051b0600050606000502060005050600050006000500 -060005170600050206000501060005020600050306000506060005020600050206000501 -0600050206000505060005ff05c906000502060005010600050806000502060005020600 -050c010002020103020205000000050b0600050806000505060005020600050206000517 -060005050600050106010504060005040600051b06000506060005020600050206000501 -060005000600050006000517060005020600050106010501060005030600050606000502 -0600050206000501060005020600050106000502060005ff05c906000502060005010600 -05020600050406000502060105010600050b010005000202010302020000050c06000508 -060005050600050306020518060405020601050006000504060005050601051906000506 -060005030602050306000500060005190602050206000500060105050601050406000503 -060205020600050206000502060205ff05ca060005020600050206020505060005020600 -05000601050d01000202010302020500000005a8060005ff05ff05050600050f01000500 -0202010302020000050b0606052a0606052a0606052a06060500060005ff05ef0606050e -06000510010002020103020205000000050a0606052a0606052a0606052a060605000600 -05ff05ef0606050e0600050f01000500020201030202000005ff05ff05c2010002020103 -02020500000005ff05ff05c001000500020201030202000005ff05ff05c2010002020103 -020205000000050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000202010302020000050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -02020103020205ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4 -02020103020205ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4 -02020103020205ff05ff05c402020103020205ff05ff05c4020201030202053600000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000051a00000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050100000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050100000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000051a00000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000051a00000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000051a00000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -00000500000005ff057c0202010302020535000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500010005180000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000100000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500010000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050001000518000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500010005180000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000100 -051800000500000005000000050000000500000005000000050000000500000005000000 -0500000005000000050000000500010005ff057b0202010302020536000005140100051a -00000514010005010000051401000501000005140100051a000005140100051a00000514 -0100051a00000514010005ff057c02020103020205350000051601000518000005160100 -000005160100000005160100051800000516010005180000051601000518000005160100 -05ff057b0202010302020536000005140100051a00000514010005010000051401000501 -000005140100051a000005140100051a000005140100051a00000514010005ff057c0202 -010302020535000005050602050306020506010005180000051601000000051601000000 -0516010005180000051601000518000005160100051800000516010005ff057b02020103 -020205360000050406020503060205050100051a00000514010005010000051401000501 -000005140100051a00000506060405080100051a00000508060105090100051a00000508 -06030507010005ff057c0202010302020535000005040604050106040505010005180000 -051006000504010000000510060005040100000005040600051001000518000005050608 -0507010005180000050806030509010005180000050706070506010005ff057b02020103 -0202053600000503060005010601050106000501060105040100051a0000050f06000503 -010005010000050f0600050301000501000005030600050f0100051a00000503060a0505 -0100051a00000507060305080100051a000005050603050106030504010005ff057c0202 -01030202053500000503060d0504010005180000050d0600050106000504010000000504 -0600050a06000504010000000504060005010600050d0100051800000504060305020603 -050601000518000005090601050a01000518000005060602050306020505010005ff057b -020201030202053600000501060005000603050006020500060405020100051a0000050c -060005010600050301000501000005030600050a06000503010005010000050306000501 -0600050c0100051a0000050206030504060305040100051a000005140100051a00000505 -0602050306020504010005ff057c02020103020205350000050206000500060305000602 -050006040503010005180000050a06000501060005010600050401000000050406000504 -060005040600050401000000050406000501060005010600050a01000518000005030602 -050306070503010005180000050706040509010005180000050706010502060205060100 -05ff057b020201030202053600000501060005000603050006020500060405020100051a -000005090600050106000501060005030100050100000503060005040600050406000503 -01000501000005030600050106000501060005090100051a000005020602050406050503 -0100051a00000507060305080100051a0000050a06020506010005ff057c020201030202 -053500000502060005000603050006020500060405030100051800000507060005010600 -050106000501060005040100000005040600050406000501060005010600050401000000 -050406000501060005010600050106000507010005180000050306020505060305050100 -05180000050906020509010005180000050a06020508010005ff057b0202010302020536 -000005010600050006070500060405020100051a00000506060005010600050106000501 -060005030100050100000503060005040600050106000501060005030100050100000503 -060005010600050106000501060005060100051a0000050206030505060105050100051a -00000508060205080100051a0000050806020508010005ff057c02020103020205350000 -050206000500060405010600050006040503010005180000050406000501060005010600 -050106000501060005040100000005040600050106000501060005010600050106000504 -010000000504060005010600050106000501060005010600050401000518000005040603 -050d010005180000050906020509010005180000050906020509010005ff057b02020103 -020205360000050106060501060605020100051a00000503060005010600050106000501 -060005010600050301000501000005030600050106000501060005010600050106000503 -010005010000050306000501060005010600050106000501060005030100051a00000503 -060905060100051a00000508060205080100051a00000514010005ff057c020201030202 -053500000502060005000602050506000500060205030100051800000504060005010600 -050106000501060005010600050401000000050406000501060005010600050106000501 -060005040100000005040600050106000501060005010600050106000504010005180000 -050506070508010005180000050806040508010005180000050906020509010005ff057b -020201030202053600000501060005000602050506000500060205020100051a00000503 -060005010600050106000501060005010600050301000501000005030600050106000501 -060005010600050106000503010005010000050306000501060005010600050106000501 -060005030100051a00000506060405080100051a00000506060605060100051a00000508 -06020508010005ff057c0202010302020535000005020604050506040503010005180000 -051601000000051601000000051601000518000005160100051800000516010005180000 -0516010005ff057b0202010302020536000005140100051a000005140100050100000514 -01000501000005140100051a000005140100051a000005140100051a00000514010005ff -057c02020103020205350000051601000518000005160100000005160100000005160100 -05180000051601000518000005160100051800000516010005ff057b0202010302020536 -000005140100051a00000514010005010000051401000501000005140100051a00000514 -0100051a000005140100051a00000514010005ff057c0202010302020535000005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005180000050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100000005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010000000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000518000005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005180000 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100051800000500010005000100050001000500010005000100 -0500010005000100050001000500010005000100050001000500010005ff057b02020103 -020205360100050001000500010005000100050001000500010005000100050001000500 -0100050001000500010005000100051a0100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005010100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005010100050001000500010005000100050001000500010005000100050001000500 -0100050001000500010005000100051a0100050001000500010005000100050001000500 -0100050001000500010005000100050001000500010005000100051a0100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100051a0100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005ff057c02020103020205ff05ff05c4020201030202 -05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202 -05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202 -05ff05ff05c402020103020205ff05ff05c402020103020205ff05ff05c4020201030202 -05ff05ff05c4020201030202050301ff01ff01bc0503020201030202050301ff01ff01a8 -050000000500000005000000050000000500000005000000050000000500000005000000 -050001000503020201030202050301ff01ff01a800000500000005000000050000000500 -000005000000050000000500000005000000050001010503020201030202050301020bff -0bff0ba2010205000000050e0100050001000503020201030202050301020bff0bff0ba1 -000001020000051001010503020201030202050301020b0100ff00ff00a0010205000000 -050e0100050001000503020201030202050301020b0100040101007101010002010100ff -00ff002001020000051001010503020201030202050301020b0100030100007501000001 -010100ff00ff0020010205000000050e0100050001000503020201030202050301020b01 -000301000003010000160100001001000006010200100100000c0100001c010000010101 -00ff00ff002001020000051001010503020201030202050301020b010003010000030100 -002801000008010000100100000c0100001c01000001010100ff00ff0020010205000000 -050e0100050001000503020201030202050301020b010003010000030100000101000003 -010200020100000001010003010200020100000001010009010000000101000501000003 -010200030102000201000001010000030102000201000000010100030102000201000000 -01010003010100000100000301000001010100ff00ff0020010200000502010a05020101 -0503020201030202050301020b0100030100000301000000010000030100000201000001 -010100010100000401000002010100010100000801010001010000040100000201000002 -010000010100000201000001010000000100000301000002010000010101000101000001 -01000002010000010101000101000001010000010101000301000001010100ff00ff0020 -0102050000000502010805020100050001000503020201030202050301020b0100010101 -000401010008010000010100000801000002010000020100000801000002010000040100 -000601000001010000050101000401000002010000010100000201000001010000020100 -0001010000050100000201000004010300ff00ff00200102000005040106050401010503 -020201030202050301020b01000301000003010100050103000101000008010000020100 -000201000008010000020100000401000003010300010100000501010004010400010100 -0002010000010104000101000005010000020100000301000001010100ff00ff00200102 -050000000504010405040100050001000503020201030202050301020b01000301000003 -010000000100000301000002010000010100000801000002010000020100000801000002 -010000040100000201000002010000010100000501000000010000030100000501000002 -010000010100000501000005010000020100000301000001010100ff00ff002001020000 -05060102050601010503020201030202050301020b010003010000030100000101000002 -010000020100000101000008010000020100000201000003010100020101000101000004 -010000020100000201000001010000020100000101000001010000020100000201000001 -0101000101000001010000020100000101000005010000010101000301000001010100ff -00ff00200102050000000506010005060100050001000503020201030202050301020b01 -000301000003010000020100000201030001010000080100000201000002010000030101 -000201000000010100050100000301030002010200020100000201000002010200020100 -0000010100030102000201000006010100000100000301000001010100ff00ff00200102 -0000051001010503020201030202050301020b0100030100002901000045010000030100 -0001010100ff00ff0020010205000000050e010005000100050302020103020205030102 -0b0100040101002501010042010000020100000101010002010100ff00ff002001020000 -051001010503020201030202050301020b01007201020007010100ff00ff002001020500 -0000050e0100050001000503020201030202050301020b0100ff00ff00a0010200000510 -01010503020201030202050301020b0100ff00ff00a0010205000000050e010005000100 -0503020201030202050301020b0000ff00ff00a101020000051001010503020201030202 -050301ff01ff01a805000000050001000500010005000100050001000500010005000100 -0500010005000100050001000503020201030202050301ff01ff01a80000050001000500 -010005000100050001000500010005000100050001000500010005000101050302020103 -0202050301ff01ff01bc05030202010302020503010005ff05ff05a80100050001000500 -010005000100050001000500010005000100050001000500010005000100050302020103 -02020503010005ff05ff05a7010005000100050001000500010005000100050001000500 -0100050001000500010005000000010005030202010302020503010005010bff0bff0ba3 -0502010003060100030600000500010005030202010302020503010005010bff0bff0ba2 -000005010100050003050000050003060500000001000503020201030202050301000501 -0b0100ff00ff00a105020100030505000100050003050000050001000503020201030202 -0503010005010b0100ff00ff00a105010100050003040500000005000100030505000000 -010005030202010302020503010005010b0100ff00ff00a1050201000304000005020100 -030400000500010005030202010302020503010005010b0100ff00ff00a1050101000500 -03030000050201000500030405000000010005030202010302020503010005010b0100ff -00ff00a10502010003030500000005020100050003030000050001000503020201030202 -0503010005010b0100ff00ff00a105010100050003020500000005040100030305000000 -010005030202010302020503010005010b0100ff00ff00a1050201000302000005060100 -030200000500010005030202010302020503010005010b0100ff00ff00a1050101000500 -03010000050601000500030205000000010005030202010302020503010005010b0100ff -00ff00a10502010003010500000005060100050003010000050001000503020201030202 -0503010005010b0100ff00ff00a105010100050003000500000005080100030105000000 -010005030202010302020503010005010b0100ff00ff00a10502010003000000050a0100 -030000000500010005030202010302020503010005010b0100ff00ff00a1050101000500 -000005000100050001000500010005000100050001000500010005000300050000000100 -05030202010302020503010005010b0100ff00ff00a10502010005000100050001000500 -010005000100050001000500010005000100050000000500010005030202010302020503 -010005010b0100ff00ff00a1050101000500030e05000000010005030202010302020503 -010005010b01000301010071010100ff00ff002705020100050000000500000005000000 -050000000500000005000000050000000500000005000100050302020103020205030100 -05010b01000201000075010000ff00ff0026050101000500000005000000050000000500 -000005000000050000000500000005000100050000000100050302020103020205030100 -05010b01000201000003010000160100001001000006010200100100000c0100001c0100 -00ff00ff00260502010005000000050a0100050000000500010005030202010302020503 -010005010b010002010000030100002801000008010000100100000c0100001c010000ff -00ff00260501010005000000050c01000500000001000503020201030202050301000501 -0b0100020100000301000001010000030102000201000000010100030102000201000000 -010100090100000001010005010000030102000301020002010000010100000301020002 -01000000010100030102000201000000010100030101000001000003010000ff00ff0026 -0502010005000000050a0100050000000500010005030202010302020503010005010b01 -000201000003010000000100000301000002010000010101000101000004010000020101 -000101000008010100010100000401000002010000020100000101000002010000010100 -000001000003010000020100000101010001010000010100000201000001010100010100 -00010100000101010003010000ff00ff00260501010005000000050c0100050000000100 -05030202010302020503010005010b010000010100040101000801000001010000080100 -000201000002010000080100000201000004010000060100000101000005010100040100 -000201000001010000020100000101000002010000010100000501000002010000040101 -00ff00ff00240502010005000000050a0100050000000500010005030202010302020503 -010005010b01000201000003010100050103000101000008010000020100000201000008 -010000020100000401000003010300010100000501010004010400010100000201000001 -01040001010000050100000201000003010000ff00ff00260501010005000000050c0100 -05000000010005030202010302020503010005010b010002010000030100000001000003 -010000020100000101000008010000020100000201000008010000020100000401000002 -010000020100000101000005010000000100000301000005010000020100000101000005 -010000050100000201000003010000ff00ff00260502010005000000050a010005000000 -0500010005030202010302020503010005010b0100020100000301000001010000020100 -000201000001010000080100000201000002010000030101000201010001010000040100 -000201000002010000010100000201000001010000010100000201000002010000010101 -0001010000010100000201000001010000050100000101010003010000ff00ff00260501 -010005000000050c010005000000010005030202010302020503010005010b0100020100 -000301000002010000020103000101000008010000020100000201000003010100020100 -000001010005010000030103000201020002010000020100000201020002010000000101 -000301020002010000060101000001000003010000ff00ff00260502010005000000050a -0100050000000500010005030202010302020503010005010b0100020100002901000045 -01000003010000ff00ff00260501010005000000050c0100050000000100050302020103 -02020503010005010b01000301010025010100420100000201000001010100ff00ff0027 -0502010005000000050a0100050000000500010005030202010302020503010005010b01 -0071010200ff00ff002c0501010005000000050c01000500000001000503020201030202 -0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503 -0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000 -010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100 -050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500 -0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502 -010005000000050a0100050000000500010005030202010302020503010005010b0100ff -00ff00a10501010005000000050c01000500000001000503020201030202050301000501 -0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202 -0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202 -010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500 -010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100 -05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000 -050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501 -010005000000050c010005000000010005030202010302020503010005010b0100ff00ff -00a10502010005000000050a010005000000050001000503020201030202050301000501 -0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503 -010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202 -010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100 -05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500 -00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000 -050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100 -05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff -00a10501010005000000050c010005000000010005030202010302020503010005010b01 -00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503 -010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103 -02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100 -05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500 -0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a -0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100 -05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1 -0502010005000000050a0100050000000500010005030202010302020503010005010b01 -00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100 -05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103 -02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503 -0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000 -0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c -010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500 -0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1 -0501010005000000050c010005000000010005030202010302020503010005010b0100ff -00ff00a10502010005000000050a01000500000005000100050302020103020205030100 -05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202 -0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503 -0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000 -010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100 -050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500 -0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502 -010005000000050a0100050000000500010005030202010302020503010005010b0100ff -00ff00a10501010005000000050c01000500000001000503020201030202050301000501 -0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202 -0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202 -010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500 -010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100 -05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000 -050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501 -010005000000050c010005000000010005030202010302020503010005010b0100ff00ff -00a10502010005000000050a010005000000050001000503020201030202050301000501 -0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503 -010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202 -010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100 -05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500 -00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000 -050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100 -05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff -00a10501010005000000050c010005000000010005030202010302020503010005010b01 -00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503 -010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103 -02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100 -05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500 -0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a -0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100 -05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1 -0502010005000000050a0100050000000500010005030202010302020503010005010b01 -00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100 -05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103 -02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503 -0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000 -0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c -010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500 -0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1 -0501010005000000050c010005000000010005030202010302020503010005010b0100ff -00ff00a10502010005000000050a01000500000005000100050302020103020205030100 -05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202 -0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503 -0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000 -010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100 -050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500 -0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502 -010005000000050a0100050000000500010005030202010302020503010005010b0100ff -00ff00a10501010005000000050c01000500000001000503020201030202050301000501 -0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202 -0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202 -010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500 -010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100 -05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000 -050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501 -010005000000050c010005000000010005030202010302020503010005010b0100ff00ff -00a10502010005000000050a010005000000050001000503020201030202050301000501 -0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503 -010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202 -010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100 -05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500 -00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000 -050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100 -05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff -00a10501010005000000050c010005000000010005030202010302020503010005010b01 -00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503 -010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103 -02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100 -05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500 -0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a -0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100 -05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1 -0502010005000000050a0100050000000500010005030202010302020503010005010b01 -00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100 -05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103 -02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503 -0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000 -0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c -010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500 -0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1 -0501010005000000050c010005000000010005030202010302020503010005010b0100ff -00ff00a10502010005000000050a01000500000005000100050302020103020205030100 -05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202 -0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503 -0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000 -010005030202010302020503010005010b0100ff00ff00a10502010005000000050a0100 -050000000500010005030202010302020503010005010b0100ff00ff00a1050101000500 -0000050c010005000000010005030202010302020503010005010b0100ff00ff00a10502 -010005000000050a0100050000000500010005030202010302020503010005010b0100ff -00ff00a10501010005000000050c01000500000001000503020201030202050301000501 -0b0100ff00ff00a10502010005000000050a010005000000050001000503020201030202 -0503010005010b0100ff00ff00a10501010005000000050c010005000000010005030202 -010302020503010005010b0100ff00ff00a10502010005000000050a0100050000000500 -010005030202010302020503010005010b0100ff00ff00a10501010005000000050c0100 -05000000010005030202010302020503010005010b0100ff00ff00a10502010005000000 -050a0100050000000500010005030202010302020503010005010b0100ff00ff00a10501 -010005000000050c010005000000010005030202010302020503010005010b0100ff00ff -00a10502010005000000050a010005000000050001000503020201030202050301000501 -0b0100ff00ff00a10501010005000000050c010005000000010005030202010302020503 -010005010b0100ff00ff00a10502010005000000050a0100050000000500010005030202 -010302020503010005010b0100ff00ff00a10501010005000000050c0100050000000100 -05030202010302020503010005010b0100ff00ff00a10502010005000000050a01000500 -00000500010005030202010302020503010005010b0100ff00ff00a10501010005000000 -050c010005000000010005030202010302020503010005010b0100ff00ff00a105020100 -05000000050a0100050000000500010005030202010302020503010005010b0100ff00ff -00a10501010005000000050c010005000000010005030202010302020503010005010b01 -00ff00ff00a10502010005000000050a0100050000000500010005030202010302020503 -010005010b0100ff00ff00a10501010005000000050c0100050000000100050302020103 -02020503010005010b0100ff00ff00a10502010005000000050a01000500000005000100 -05030202010302020503010005010b0100ff00ff00a10501010005000000050c01000500 -0000010005030202010302020503010005010b0100ff00ff00a10502010005000000050a -0100050000000500010005030202010302020503010005010b0100ff00ff00a105010100 -05000000050c010005000000010005030202010302020503010005010b0100ff00ff00a1 -0502010005000000050a0100050000000500010005030202010302020503010005010b01 -00ff00ff00a10501010005000000050c0100050000000100050302020103020205030100 -05010b0100ff00ff00a10502010005000000050a01000500000005000100050302020103 -02020503010005010b0100ff00ff00a10501010005000000050c01000500000001000503 -0202010302020503010005010b0100ff00ff00a10502010005000000050a010005000000 -0500010005030202010302020503010005010b0100ff00ff00a10501010005000000050c -010005000000010005030202010302020503010005010b0100ff00ff00a1050201000500 -0000050a0100050000000500010005030202010302020503010005010b0100ff00ff00a1 -0501010005000000050c010005000000010005030202010302020503010005010b0100ff -00ff00a10502010005000000050a01000500000005000100050302020103020205030100 -05010b0100ff00ff00a10501010005000000050c01000500000001000503020201030202 -0503010005010b0100ff00ff00a10502010005000000050a010005000000050001000503 -0202010302020503010005010b0100ff00ff00a10501010005000000050c010005000000 -010005030202010302020503010005010b0100ff00ff00a1050201000500000005000100 -050001000500010005000100050001000500010005000000050001000503020201030202 -0503010005010b0100ff00ff00a105010100050000000500010005000100050001000500 -010005000100050001000500010005000000010005030202010302020503010005010b01 -00ff00ff00a105020100030e00000500010005030202010302020503010005010b0100ff -00ff00a10501010005000000050000000500000005000000050000000500000005000000 -0500000005000000010005030202010302020503010005010b0100ff00ff00a105020100 -030000000500000005000000050000000500000005000000050000000500000005000100 -05030202010302020503010005010b0100ff00ff00a10501010005000300050000000508 -01000500030005000000010005030202010302020503010005010b0100ff00ff00a10502 -010003010500000005080100030000000500010005030202010302020503010005010b01 -00ff00ff00a1050101000500030100000508010003010500000001000503020201030202 -0503010005010b0100ff00ff00a105020100030200000506010005000301000005000100 -05030202010302020503010005010b0100ff00ff00a10501010005000302050000000504 -01000500030205000000010005030202010302020503010005010b0100ff00ff00a10502 -010003030500000005040100030200000500010005030202010302020503010005010b01 -00ff00ff00a1050101000500030300000504010003030500000001000503020201030202 -0503010005010b0100ff00ff00a105020100030400000502010005000303000005000100 -05030202010302020503010005010b0100ff00ff00a10501010005000304050000000500 -01000500030405000000010005030202010302020503010005010b0100ff00ff00a10502 -010003050500010005000100030400000500010005030202010302020503010005010b01 -00ff00ff00a1050101000500030500000500010003050500000001000503020201030202 -0503010005010b0100ff00ff00a105020100030601000500030500000500010005030202 -010302020503010005010b0000ff00ff00a2050101000500030605000306050000000100 -05030202010302020503010005ff05ff05a8010005000000050000000500000005000000 -050000000500000005000000050000000500010005030202010302020503010005ff05ff -05a701000500000005000000050000000500000005000000050000000500000005000000 -0500000001000503020201030202050301ff01ff01bc0503020201030202050301000f01 -0717010007190e01000a0100000201000002010000050100000101000007010000060100 -000201000002010000010100002901000008010000000100000201000002010000050100 -000101000002010000050100000301000003010000020100000101000002010000250100 -006301000063010000630100003e0100051301000500030e050000000523010005030202 -01030202050301000f010717010007190e01000a01000002010000020100000101000002 -010000010100000201000003010000060100000201000002010000010100000201000025 -010000090100000301000002010000010100000201000001010000020100000101000002 -010000030100000301000002010000010100000201000025010000630100006301000063 -0100003e010005140100030e0000052401000503020201030202050301000f0107320e01 -000a01000003010200030102000301020004010000060100000201000002010000020102 -002601000009010000040103000201020003010300020102000501010002010300010100 -0002010000250100006301000063010000630100003e0100051301000500030e05000000 -052301000503020201030202050301000f0107320e01000a010000570100006301000063 -01000063010000630100003e010005140100030e00000524010005030202010302020503 -01000f0107320e0100070100000101000057010000630100006301000063010000630100 -003e0100051301000500030e05000000052301000503020201030202050301000f010732 -0e01000801010058010000630100006301000063010000630100003e010005140100030e -0000052401000503020201030202050301000f0107320e01006301000063010000630100 -0063010000630100003e0100051301000500030e05000000052301000503020201030202 -050301000f0107320e010063010000630100006301000063010000630100003e01000514 -0100030e0000052401000503020201030202050301000f010e3400630100006301000063 -01000063010000630100003e0100051301000500030e0500000005230100050302020103 -0202050301000f000e3501ff01ff013805140100030e0000052401000503020201030202 -050301000c360d6301000d6301000d6301000d6301000d6301000d3e0100051301000500 -030e05000000052301000503020201030202050301000c3509000d6301000d6301000d63 -01000d6301000d6301000d3e010005140100030e00000524010005030202010302020503 -01000c01083209010d6301000d6301000d6301000d6301000d6301000d3e010005130100 -0500030e05000000052301000503020201030202050301000c01083209010d6301000d63 -01000d6301000d6301000d6301000d3e010005140100030e000005240100050302020103 -0202050301000c0108160102081809010d6301000d6301000d6301000d6301000d630100 -0d3e0100051301000500030e05000000052301000503020201030202050301000c010815 -010008020100081709010d0701000d1601000d4201000d0701000d0601020d1001000d0c -01000d3001000d6301000d6301000d6301000d3e010005140100030e0000052401000503 -020201030202050301000c010815010008020100081709010d0701000d5a01000d070100 -0d0801000d1001000d0c01000d3001000d6301000d6301000d6301000d3e010005130100 -0500030e05000000052301000503020201030202050301000c0108150100080201000817 -09010d0701000d0101000d0301020d0201000d0001010d0301020d0201000d0001010d3b -01000d0701000d0001010d0501000d0301020d0301020d0201000d0101000d0301020d02 -01000d0001010d0301020d0201000d0001010d0301010d0001000d1701000d6301000d63 -01000d6301000d3e010005140100030e0000052401000503020201030202050301000c01 -08160102081809010d0701000d0001000d0301000d0201000d0101010d0101000d040100 -0d0201010d0101000d3a01000d0701010d0101000d0401000d0201000d0201000d010100 -0d0201000d0101000d0001000d0301000d0201000d0101010d0101000d0101000d020100 -0d0101010d0101000d0101000d0101010d1701000d6301000d6301000d6301000d3e0100 -051301000500030e05000000052301000503020201030202050301000c01081501000802 -0100081709010d0701010d0801000d0101000d0801000d0201000d0201000d3a01000d07 -01000d0201000d0401000d0601000d0101000d0501010d0401000d0201000d0101000d02 -01000d0101000d0201000d0101000d0501000d0201000d1701000d6301000d6301000d63 -01000d3e010005140100030e0000052401000503020201030202050301000c0108150100 -08020100081709010d0701010d0501030d0101000d0801000d0201000d0201000d3a0100 -0d0701000d0201000d0401000d0301030d0101000d0501010d0401040d0101000d020100 -0d0101040d0101000d0501000d0201000d1701000d6301000d6301000d6301000d3e0100 -051301000500030e05000000052301000503020201030202050301000c01081501000802 -0100081709010d0701000d0001000d0301000d0201000d0101000d0801000d0201000d02 -01000d3a01000d0701000d0201000d0401000d0201000d0201000d0101000d0501000d00 -01000d0301000d0501000d0201000d0101000d0501000d0501000d0201000d1701000d63 -01000d6301000d6301000d3e010005140100030e00000524010005030202010302020503 -01000c0108160102081809010d0701000d0101000d0201000d0201000d0101000d080100 -0d0201000d0201000d3a01000d0701010d0101000d0401000d0201000d0201000d010100 -0d0201000d0101000d0101000d0201000d0201000d0101010d0101000d0101000d020100 -0d0101000d0501000d0101010d1701000d6301000d6301000d6301000d3e010005130100 -0500030e05000000052301000503020201030202050301000c01083209010d0701000d02 -01000d0201030d0101000d0801000d0201000d0201000d3a01000d0701000d0001010d05 -01000d0301030d0201020d0201000d0201000d0201020d0201000d0001010d0301020d02 -01000d0601010d0001000d1701000d6301000d6301000d6301000d3e010005140100030e -0000052401000503020201030202050301000c01083209010d6301000d4a01000d170100 -0d6301000d6301000d6301000d3e0100051301000500030e050000000523010005030202 -01030202050301000c01083209010d6301000d4601000d0201000d1701000d6301000d63 -01000d6301000d3e010005140100030e0000052401000503020201030202050301000c01 -083209010d6301000d4701020d1801000d6301000d6301000d6301000d3e010005130100 -0500030e05000000052301000503020201030202050301000c01083209010d6301000d63 -01000d6301000d6301000d6301000d3e010005140100030e000005240100050302020103 -0202050301000c01083209010d6301000d6301000d6301000d6301000d6301000d3e0100 -051301000500030e05000000052301000503020201030202050301000c0109340d630100 -0d6301000d6301000d6301000d6301000d3e010005140100030e00000524010005030202 -01030202050301000c00093501ff01ff0138051301000500030e05000000052301000503 -020201030202050301000a360063010000630100006301000063010000630100003e0100 -05140100030e0000052401000503020201030202050301000a3501000063010000630100 -006301000063010000630100003e0100051301000500030e050000000523010005030202 -01030202050301000a0101340063010000630100006301000063010000630100003e0100 -05140100030e0000052401000503020201030202050301000a0101340063010000630100 -006301000063010000630100003e0100051301000500030e050000000523010005030202 -01030202050301000a0101160002011a0063010000630100006301000063010000630100 -003e010005140100030e0000052401000503020201030202050301000a01011500000102 -0000011900070100000e01000014010000340100002b0102003401000063010000630100 -00630100003e0100051301000500030e0500000005230100050302020103020205030100 -0a010115000001020000011900070100000e0100004a0100002d01000034010000630100 -0063010000630100003e010005140100030e000005240100050302020103020205030100 -0a0101150000010200000119000701000001010000030102000201040002010200020100 -000001010003010200020100000001010003010200260100000701000002010000010100 -00000101000201000000010100030102000301020005010000030102002d010000630100 -0063010000630100003e0100051301000500030e05000000052301000503020201030202 -050301000a01011500000102000001190007010000000100000301000002010000030100 -000301000002010000010101000101000004010000020101000101000001010000020100 -002501000007010000020100000101010001010000010101000101000001010000020100 -0001010000020100000401000002010000020100002c0100006301000063010000630100 -003e010005140100030e0000052401000503020201030202050301000a01011600030119 -000701010008010000030100000701000001010000080100000201000002010000050100 -002501000007010000020100000101000002010000010100000201000001010000090100 -0004010000060100002c0100006301000063010000630100003e0100051301000500030e -05000000052301000503020201030202050301000a010119000001190007010100050103 -000301000004010300010100000801000002010000020100000201030025010000070100 -000201000001010000020100000101000002010000020102000301030004010000030103 -002c0100006301000063010000630100003e010005140100030e00000524010005030202 -01030202050301000a0101180000011a0007010000000100000301000002010000030100 -000301000002010000010100000801000002010000020100000101000002010000250100 -000701000002010000010100000201000001010000020100000501000001010000020100 -000401000002010000020100002c0100006301000063010000630100003e010005130100 -0500030e05000000052301000503020201030202050301000a0101150002011b00070100 -000101000002010000020100000301000003010000020100000101000008010000020100 -000201000001010000020100002501000007010000010101000101010001010000010101 -0001010000010100000201000001010000020100000401000002010000020100002c0100 -006301000063010000630100003e010005140100030e0000052401000503020201030202 -050301000a01013400070100000201000002010300040101000201030001010000080100 -000201000002010000020103002501000008010100000100000101000000010100020100 -0000010100030102000301030004010000030103002c0100006301000063010000630100 -003e0100051301000500030e05000000052301000503020201030202050301000a010134 -00630100000e010000050100004c0100006301000063010000630100003e010005140100 -030e0000052401000503020201030202050301000a01013400630100000e010000050100 -004c0100006301000063010000630100003e0100051301000500030e0500000005230100 -0503020201030202050301000a01013400630100000e010000050100004c010000630100 -0063010000630100003e010005140100030e000005240100050302020103020205030100 -0a0101340063010000630100006301000063010000630100003e0100051301000500030e -05000000052301000503020201030202050301000a010134006301000063010000630100 -0063010000630100003e010005140100030e000005240100050302020103020205030100 -0a0101340063010000630100006301000063010000630100003e0100051301000500030e -05000000052301000503020201030202050301000a0001ff01ff016e05140100030e0000 -052401000503020201030202050301000c36006301000063010000630100006301000063 -0100003e0100051301000500030e05000000052301000503020201030202050301000c35 -09000063010000630100006301000063010000630100003e010005140100030e00000524 -01000503020201030202050301000c010832090100630100006301000063010000630100 -00630100003e0100051301000500030e0500000005230100050302020103020205030100 -0c01083209010063010000630100006301000063010000630100003e010005140100030e -0000052401000503020201030202050301000c0108130100080401020815090100630100 -00630100006301000063010000630100003e0100051301000500030e0500000005230100 -0503020201030202050301000c0108110102080301000802010008140901006301000032 -0102002d0100006301000063010000630100003e010005140100030e0000052401000503 -020201030202050301000c01081301000803010008020100081409010063010000340100 -002d0100006301000063010000630100003e0100051301000500030e0500000005230100 -0503020201030202050301000c0108130100080301000802010008140901000701010000 -010000030102000301010000010000010100000001010002010000020100000201020034 -010000070100000001010003010200020100000001010002010000000101000201010000 -01000003010200050100000201010000010000260100006301000063010000630100003e -010005140100030e0000052401000503020201030202050301000c010813010008030100 -080201000814090100070100000001000000010000010100000201000001010000010101 -000101010001010000010100000201000001010000020100003301000007010100010100 -000101000002010000010101000101000001010100010100000101000000010000000100 -000101000002010000040100000201000000010000000100002501000063010000630100 -00630100003e0100051301000500030e0500000005230100050302020103020205030100 -0c0108130100080301000802010008140901000701000000010000000100000501000001 -010000020100000101000002010000010100000201000001010000370100000701000002 -010000010100000201000001010000050100000501000000010000000100000501000004 -010000020100000001000000010000250100006301000063010000630100003e01000514 -0100030e0000052401000503020201030202050301000c01081301000803010008020100 -081409010007010000000100000001000002010300010100000201000001010000020100 -000101000002010000020102003401000007010000020100000101000002010000010100 -000501000005010000000100000001000002010300040100000201000000010000000100 -00250100006301000063010000630100003e0100051301000500030e0500000005230100 -0503020201030202050301000c0108130100080301000802010008140901000701000000 -010000000100000101000002010000010100000201000001010000020100000101000002 -010000050100003301000007010000020100000101000002010000010100000501000005 -010000000100000001000001010000020100000401000002010000000100000001000025 -0100006301000063010000630100003e010005140100030e000005240100050302020103 -0202050301000c0108110104080201020815090100070100000001000000010000010100 -000201000001010000010101000101000002010000010100000101010001010000020100 -003301000007010000020100000101000002010000010100000501000005010000000100 -000001000001010000020100000401000002010000000100000001000025010000630100 -0063010000630100003e0100051301000500030e05000000052301000503020201030202 -050301000c01083209010007010000000100000001000002010300020101000001000001 -010000020100000201010000010000020102003401000007010000020100000201020002 -010000050100000501000000010000000100000201030004010000020100000001000000 -010000250100006301000063010000630100003e010005140100030e0000052401000503 -020201030202050301000c01083209010019010000480100006301000063010000630100 -00630100003e0100051301000500030e0500000005230100050302020103020205030100 -0c010832090100150100000201000048010000630100006301000063010000630100003e -010005140100030e0000052401000503020201030202050301000c010832090100160102 -0049010000630100006301000063010000630100003e0100051301000500030e05000000 -052301000503020201030202050301000c01083209010063010000630100006301000063 -010000630100003e010005140100030e0000052401000503020201030202050301000c01 -083209010063010000630100006301000063010000630100003e0100051301000500030e -05000000052301000503020201030202050301000c010934006301000063010000630100 -0063010000630100003e010005140100030e000005240100050302020103020205030100 -0c00093501ff01ff0138051301000500030e050000000523010005030202010302020503 -01000c360063010000630100006301000063010000630100003e010005140100030e0000 -052401000503020201030202050301000c35090000630100006301000063010000630100 -00630100003e0100051301000500030e0500000005230100050302020103020205030100 -0c01083209010063010000630100006301000063010000630100003e010005140100030e -0000052401000503020201030202050301000c0108320901006301000063010000630100 -0063010000630100003e0100051301000500030e05000000052301000503020201030202 -050301000c01081301000805010008160901006301000063010000630100006301000063 -0100003e010005140100030e0000052401000503020201030202050301000c0108110102 -0803010208160901001601020005010000420100002b0102003401000063010000630100 -00630100003e0100051301000500030e0500000005230100050302020103020205030100 -0c010813010008050100081609010018010000490100002d010000340100006301000063 -010000630100003e010005140100030e0000052401000503020201030202050301000c01 -081301000805010008160901000701010000010000030102000501000003010200020100 -00000101003b010000070100000201000001010000000101000201000000010100030102 -000301020005010000030102002d0100006301000063010000630100003e010005130100 -0500030e05000000052301000503020201030202050301000c0108130100080501000816 -090100070100000001000000010000010100000201000004010000050100000201010001 -0100003a0100000701000002010000010101000101000001010100010100000101000002 -01000001010000020100000401000002010000020100002c010000630100006301000063 -0100003e010005140100030e0000052401000503020201030202050301000c0108130100 -080501000816090100070100000001000000010000050100000401000005010000020100 -00020100003a010000070100000201000001010000020100000101000002010000010100 -000901000004010000060100002c0100006301000063010000630100003e010005130100 -0500030e05000000052301000503020201030202050301000c0108130100080501000816 -09010007010000000100000001000002010300040100000501000002010000020100003a -010000070100000201000001010000020100000101000002010000020102000301030004 -010000030103002c0100006301000063010000630100003e010005140100030e00000524 -01000503020201030202050301000c010813010008050100081609010007010000000100 -00000100000101000002010000040100000501000002010000020100003a010000070100 -000201000001010000020100000101000002010000050100000101000002010000040100 -0002010000020100002c0100006301000063010000630100003e0100051301000500030e -05000000052301000503020201030202050301000c010811010408010104081409010007 -01000000010000000100000101000002010000040100000501000002010000020100003a -010000070100000101010001010100010100000101010001010000010100000201000001 -010000020100000401000002010000020100002c0100006301000063010000630100003e -010005140100030e0000052401000503020201030202050301000c010832090100070100 -00000100000001000002010300040100000501000002010000020100003a010000080101 -000001000001010000000101000201000000010100030102000301030004010000030103 -002c0100006301000063010000630100003e0100051301000500030e0500000005230100 -0503020201030202050301000c010832090100630100000e010000050100004c01000063 -01000063010000630100003e010005140100030e00000524010005030202010302020503 -01000c010832090100630100000e010000050100004c0100006301000063010000630100 -003e0100051301000500030e05000000052301000503020201030202050301000c010832 -090100630100000e010000050100004c0100006301000063010000630100003e01000514 -0100030e0000052401000503020201030202050301000c01083209010063010000630100 -006301000063010000630100003e0100051301000500030e050000000523010005030202 -01030202050301000c01083209010063010000630100006301000063010000630100003e -010005140100030e0000052401000503020201030202050301000c010934006301000063 -0100006301000063010000630100003e0100051301000500030e05000000052301000503 -020201030202050301000c00093501ff01ff013805140100030e00000524010005030202 -010302020503010005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000063010000630100006301000063010000630100003e01000513 -01000500030e050000000523010005030202010302020503010000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050001000063010000630100 -006301000063010000630100003e010005140100030e0000052401000503020201030202 -05030100050000000532010005000063010000630100006301000063010000630100003e -0100051301000500030e0500000005230100050302020103020205030100000005340100 -0063010000630100006301000063010000630100003e010005140100030e000005240100 -050302020103020205030100050000000513010005040102051501000500006301000063 -0100006301000063010000630100003e0100051301000500030e05000000052301000503 -02020103020205030100000005120102050301000502010005150100001f010000420100 -001201000017010200340100006301000063010000630100003e010005140100030e0000 -052401000503020201030202050301000500000005130100050301000502010005140100 -050000630100001201000019010000340100006301000063010000630100003e01000513 -01000500030e050000000523010005030202010302020503010000000514010005030100 -050201000515010000070101000001000003010200020100000001010003010200030102 -003b01000008010200030101000001000002010200020100000001010002010000000101 -0005010000030102000201000000010100260100006301000063010000630100003e0100 -05140100030e000005240100050302020103020205030100050000000513010005060100 -051501000500000701000000010000000100000101000002010000010101000101000004 -01000002010000020100003a010000070100000201000001010000010101000101000002 -010000010101000101000001010100010100000401000002010000020100000101010001 -010000250100006301000063010000630100003e0100051301000500030e050000000523 -010005030202010302020503010000000514010005050100051701000007010000000100 -0000010000050100000101000008010000060100003a0100000701000002010000010100 -000201000001010000020100000101000002010000010100000201000004010000060100 -000101000002010000250100006301000063010000630100003e010005140100030e0000 -052401000503020201030202050301000500000005130100050401000517010005000007 -0100000001000000010000020103000101000008010000030103003a0100000701000002 -010000010100000201000001010400010100000201000001010000020100000401000003 -0103000101000002010000250100006301000063010000630100003e0100051301000500 -030e05000000052301000503020201030202050301000000051401000503010005020100 -051501000007010000000100000001000001010000020100000101000008010000020100 -00020100003a010000070100000201000001010000020100000101000005010000020100 -000101000002010000040100000201000002010000010100000201000025010000630100 -0063010000630100003e010005140100030e000005240100050302020103020205030100 -050000000511010405010104051401000500000701000000010000000100000101000002 -010000010100000801000002010000020100003a01000007010000020100000101000001 -010100010100000201000001010000020100000101010001010000040100000201000002 -0100000101000002010000250100006301000063010000630100003e0100051301000500 -030e05000000052301000503020201030202050301000000053401000007010000000100 -0000010000020103000101000008010000030103003a0100000801020003010100000100 -000201020002010000020100000101000000010100050100000301030001010000020100 -00250100006301000063010000630100003e010005140100030e00000524010005030202 -0103020205030100050000000532010005000063010000230100003e0100006301000063 -010000630100003e0100051301000500030e050000000523010005030202010302020503 -01000000053401000063010000230100003e0100006301000063010000630100003e0100 -05140100030e000005240100050302020103020205030100050000000532010005000063 -010000230100003e0100006301000063010000630100003e0100051301000500030e0500 -000005230100050302020103020205030100000005340100006301000063010000630100 -0063010000630100003e010005140100030e000005240100050302020103020205030100 -050000000532010005000063010000630100006301000063010000630100003e01000513 -01000500030e050000000523010005030202010302020503010000000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000063010000630100 -006301000063010000630100003e010005140100030e0000052401000503020201030202 -050301000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -05000100050001ff01ff0138051301000500030e05000000052301000503020201030202 -050301000c360063010000630100006301000063010000630100003e010005140100030e -0000052401000503020201030202050301000c3509000063010000630100006301000063 -010000630100003e0100051301000500030e050000000523010005030202010302020503 -01000c01083209010063010000630100006301000063010000630100003e010005140100 -030e0000052401000503020201030202050301000c010832090100630100006301000063 -01000063010000630100003e0100051301000500030e0500000005230100050302020103 -0202050301000c0108130100080401020815090100630100006301000063010000630100 -00630100003e010005140100030e0000052401000503020201030202050301000c010811 -010208030100080201000814090100170100004a01000007010000300102002601000063 -01000063010000630100003e0100051301000500030e0500000005230100050302020103 -0202050301000c0108130100080701000814090100170100004a01000007010000320100 -00260100006301000063010000630100003e010005140100030e00000524010005030202 -01030202050301000c010813010008070100081409010007010100000100000301020002 -010400020102004201000007010000000101000201000000010100030102000201010000 -010000020101000001000003010200020100000001010005010000030102000201000000 -010100180100006301000063010000630100003e0100051301000500030e050000000523 -01000503020201030202050301000c010813010008050101081509010007010000000100 -000001000001010000020100000301000003010000020100004101000007010100010100 -000101010001010000010100000201000001010000000100000001000001010000000100 -000001000001010000020100000101010001010000040100000201000002010000010101 -0001010000170100006301000063010000630100003e010005140100030e000005240100 -0503020201030202050301000c0108130100080701000814090100070100000001000000 -010000050100000301000003010000450100000701000002010000010100000501000002 -010000010100000001000000010000010100000001000000010000050100000101000002 -01000004010000060100000101000002010000170100006301000063010000630100003e -0100051301000500030e05000000052301000503020201030202050301000c0108130100 -080701000814090100070100000001000000010000020103000301000004010200420100 -000701000002010000010100000501000002010000010100000001000000010000010100 -000001000000010000020103000101000002010000040100000301030001010000020100 -00170100006301000063010000630100003e010005140100030e00000524010005030202 -01030202050301000c010813010008030100080201000814090100070100000001000000 -010000010100000201000003010000070100004101000007010000020100000101000005 -010000020100000101000000010000000100000101000000010000000100000101000002 -010000010100000201000004010000020100000201000001010000020100001701000063 -01000063010000630100003e0100051301000500030e0500000005230100050302020103 -0202050301000c0108110104080201020815090100070100000001000000010000010100 -000201000003010000030100000201000041010000070101000101000001010000050100 -000201000001010000000100000001000001010000000100000001000001010000020100 -000101010001010000040100000201000002010000010100000201000017010000630100 -0063010000630100003e010005140100030e000005240100050302020103020205030100 -0c0108320901000701000000010000000100000201030004010100020102004201000007 -010000000101000201000006010200020100000001000000010000010100000001000000 -010000020103000101000000010100050100000301030001010000020100001701000063 -01000063010000630100003e0100051301000500030e0500000005230100050302020103 -0202050301000c0108320901006301000031010000300100006301000063010000630100 -003e010005140100030e0000052401000503020201030202050301000c01083209010063 -01000031010000300100006301000063010000630100003e0100051301000500030e0500 -0000052301000503020201030202050301000c0108320901006301000031010000300100 -006301000063010000630100003e010005140100030e0000052401000503020201030202 -050301000c01083209010063010000630100006301000063010000630100003e01000513 -01000500030e05000000052301000503020201030202050301000c010832090100630100 -00630100006301000063010000630100003e010005140100030e00000524010005030202 -01030202050301000c0109340063010000630100006301000063010000630100003e0100 -051301000500030e05000000052301000503020201030202050301000c00093501ff01ff -013805140100030e0000052401000503020201030202050301000c360063010000630100 -006301000063010000630100003e0100051301000500030e050000000523010005030202 -01030202050301000c3509000063010000630100006301000063010000630100003e0100 -05140100030e0000052401000503020201030202050301000c0108320901006301000063 -0100006301000063010000630100003e0100051301000500030e05000000052301000503 -020201030202050301000c01083209010063010000630100006301000063010000630100 -003e010005140100030e0000052401000503020201030202050301000c01081301000806 -0100081509010063010000630100006301000063010000630100003e0100051301000500 -030e05000000052301000503020201030202050301000c01081101020805010108150901 -0011010000500100001e01000018010000290100006301000063010000630100003e0100 -05140100030e0000052401000503020201030202050301000c0108130100080401000800 -01000815090100630100001e01000018010000290100006301000063010000630100003e -0100051301000500030e05000000052301000503020201030202050301000c0108130100 -080401000800010008150901000701000000010100030102000201000000010100030102 -004201000008010100000100000101000002010000020102000201040002010200020100 -000201000002010200020100000001010003010200020100000001010003010100000100 -00100100006301000063010000630100003e010005140100030e00000524010005030202 -01030202050301000c010813010008030100080101000815090100070101000101000004 -010000020101000101000001010000020100004101000007010000010101000101000002 -010000010100000201000003010000030100000201000001010000020100000101000002 -010000010101000101000001010000020100000101010001010000010100000101010010 -0100006301000063010000630100003e0100051301000500030e05000000052301000503 -020201030202050301000c01081301000802010008020100081509010007010000020100 -000401000002010000020100000501000041010000070100000201000001010000020100 -000101000007010000070100000101000002010000010100000501000002010000010100 -0002010000010100000501000002010000100100006301000063010000630100003e0100 -05140100030e0000052401000503020201030202050301000c0108130100080201050814 -090100070100000201000004010000020100000201000002010300410100000701000002 -010000010100000201000002010200040100000401030002010000000100000301020002 -010000020100000101040001010000050100000201000010010000630100006301000063 -0100003e0100051301000500030e05000000052301000503020201030202050301000c01 -081301000806010008150901000701000002010000040100000201000002010000010100 -000201000041010000070100000201000001010000020100000501000003010000030100 -000201000002010000000100000601000001010000020100000101000005010000050100 -0002010000100100006301000063010000630100003e010005140100030e000005240100 -0503020201030202050301000c0108110104080301020814090100070100000201000004 -010000020100000201000001010000020100004101000007010000010101000101000001 -010100010100000201000003010000030100000201000003010000030100000201000001 -010100010100000101000002010000010100000501000001010100100100006301000063 -010000630100003e0100051301000500030e050000000523010005030202010302020503 -01000c010832090100070100000201000004010000020100000201000002010300410100 -000801010000010000020101000001000002010200050101000201030003010000040102 -000201000000010100030102000201000006010100000100001001000063010000630100 -00630100003e010005140100030e0000052401000503020201030202050301000c010832 -090100630100000b01000044010000100100006301000063010000630100003e01000513 -01000500030e05000000052301000503020201030202050301000c010832090100630100 -0007010000020100004001000002010000100100006301000063010000630100003e0100 -05140100030e0000052401000503020201030202050301000c0108320901006301000008 -01020042010200110100006301000063010000630100003e0100051301000500030e0500 -0000052301000503020201030202050301000c0108320901006301000063010000630100 -0063010000630100003e010005140100030e000005240100050302020103020205030100 -0c01083209010063010000630100006301000063010000630100003e0100051301000500 -030e05000000052301000503020201030202050301000c01093400630100006301000063 -01000063010000630100003e010005140100030e00000524010005030202010302020503 -01000c00093501ff01ff0138051301000500030e05000000052301000503020201030202 -050301000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500000005000063010000630100006301000063010000630100003e010005140100030e -000005240100050302020103020205030100000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500010000630100006301000063010000630100 -00630100003e0100051301000500030e0500000005230100050302020103020205030100 -050000000532010005000063010000630100006301000063010000630100003e01000514 -0100030e0000052401000503020201030202050301000000053401000063010000630100 -006301000063010000630100003e0100051301000500030e050000000523010005030202 -010302020503010005000000051301000503010405140100050000630100006301000063 -01000063010000630100003e010005140100030e00000524010005030202010302020503 -01000000051201020503010005190100000f010200030102004901000007010000230100 -000b010200030102001f0100006301000063010000630100003e0100051301000500030e -050000000523010005030202010302020503010005000000051301000503010005180100 -05000011010000050100004901000007010000230100000d010000050100001f01000063 -01000063010000630100003e010005140100030e00000524010005030202010302020503 -010000000514010005030100051901000008010200050100000501000003010200420100 -000701000000010100030102000201000000010100020100000001010003010200020104 -00010100000201000004010000050100001f0100006301000063010000630100003e0100 -051301000500000005000000050000000500000005000000050000000500000005000000 -05000000052301000503020201030202050301ff01ff0170051400000500000005000000 -050000000500000005000000050000000500000005000000052401000503020201030202 -0503010005ff05ff05ba010005030202010302020503010005ff05ff05ba010005030202 -010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100 -05030202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff -05ba010005030202010302020503010005ff05ff05ba0100050302020103020205030100 -05ff05ff05ba01000503020201030202050301000549010005ff05ff056f010005030202 -01030202050301000548010105ff05ff056f010005030202010302020503010005470100 -0500010005ff05ff056f01000503020201030202050301000549010005ff05ff056f0100 -0503020201030202050301000549010005ff05ff056f0100050302020103020205030100 -0549010005ff05ff056f01000503020201030202050301000549010005ff05ff056f0100 -0503020201030202050301000549010005ff05ff056f0100050302020103020205030100 -0547010405ff05ff056d010005030202010302020503010005ff05ff05ba010005030202 -010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100 -05030202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff -05ba01000503020201030202050301000538010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -054a01000503020201030202050301000537010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -054b01000503020201030202050301000538010005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000003ff03ff031505000000054a01000503020201030202050301000537 -010005000000050000000500000005000000050000000500000005000000050000000500 -0000050000000500000005000000050000000500000005000000050003ff03ff03150000 -054b01000503020201030202050301000538010005000000050c0000050c010003ff03ff -031505000000054a01000503020201030202050301000537010005000000050c0100050c -0100050003ff03ff03150000054b01000503020201030202050301000538010005000000 -050c0000050c010003ff03ff031505000000054a01000503020201030202050301000537 -010005000000050c0100050c0100050003ff03ff03150000054b01000503020201030202 -050301000538010005000000050c0000050c010003ff03ff031505000000054a01000503 -020201030202050301000537010005000000050c0100050c0100050003ff03ff03150000 -054b01000503020201030202050301000538010005000000050c0000050c010003ff03ff -031505000000054a01000503020201030202050301000537010005000000050c0100050c -0100050003ff03ff03150000054b01000503020201030202050301000538010005000000 -050c0000050c010003ff03ff031505000000054a01000503020201030202050301000537 -010005000000050c0100050c0100050003ff03ff03150000054b01000503020201030202 -050301000538010005000000050c0000050c010003ff03ff031505000000054a01000503 -020201030202050301000537010005000000050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100050003ff03ff03150000054b01000503020201030202050301000538010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010003ff03ff031505000000054a01000503 -020201030202050301000537010005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000054b01000503 -020201030202050301000538000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000054a01000503 -0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba -010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff -05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503 -010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103 -02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503 -0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba -010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff -05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503 -010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103 -02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503 -0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba -010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff -05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503 -010005ff05ff05ba010005030202010302020503010005ff05ff05ba0100050302020103 -02020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba01000503 -0202010302020503010005ff05ff05ba010005030202010302020503010005ff05ff05ba -010005030202010302020503010005ff05ff05ba010005030202010302020503010005ff -05ff05ba010005030202010302020503010005ff05ff05ba010005030202010302020503 -010005ff05ff05ba010005030202010100040503010005ff05ff05ba0100050300050202 -0400050301ff01ff01bc050300000202040000000202040005ff05ff05c4000002020400 -00000202040005ff05ff05c400000202040000000202040005ff05ff05c4000002020400 -00000202040005ff05ff05c4000002020400000002020400000502ff02ff02b800060202 -040000000208040002ff02ff02b800000208040000000208040002ff02ff02b800000208 -040000000208040001ff01ff01b80000020804000000040901ff01ff01b800000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 61 377 359 -%%EOF diff --git a/lib/tv/doc/src/tv_row_marked_popup.gif b/lib/tv/doc/src/tv_row_marked_popup.gif Binary files differdeleted file mode 100644 index 9b3bc87959..0000000000 --- a/lib/tv/doc/src/tv_row_marked_popup.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_row_marked_popup.ps b/lib/tv/doc/src/tv_row_marked_popup.ps deleted file mode 100644 index 7a909110d9..0000000000 --- a/lib/tv/doc/src/tv_row_marked_popup.ps +++ /dev/null @@ -1,1324 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./tv_row_marked_popup.tmp.eps) -%%CreationDate: (Tue Jun 12 16:12:10 2001) -%%BoundingBox: 0 64 377 377 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 64 377 377 -userdict begin -%%BeginData: -DisplayImage -0 64 -377.000000 313.000000 -12 -760 630 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -ff0000 -d9d9d9 -b22222 -828282 -00ff00 -009100 -90ee90 -c3c3c3 -999999 -757575 -c8ffff -000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff -02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202 -04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff -02d500000202040000000202040002080000020d040002a501010206010102150101021e -0101022901010206010102430101022a010102260101023201010233010102ae00000202 -040000000202040002080000020d04000277010502000107020101030206010702090101 -02060101021501010219010002030101021c0100020b010102060101022e010202020100 -020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400 -00000202040002080000020d04000277010102070101020301010201010102080101020c -010102060101021501010218010102210101020b010102060101022e010202020100020d -01010238010102020101024801010215010102cc00000202040000000202040002080000 -0202040602030400027701010207010102030101020c0101020401030203010102000101 -020301010202010302020101020901010202010302030103020201030201010402010101 -020201030203010102000101020a01040201010302030101020001010203010102020103 -022701000200010102010100020201030203010402020103020201010209010102000101 -020101010203010302030101020201010200010102020101020101030202010402020101 -020101010202010102020101020001010203010102000101020301030203010402020104 -020501040202010102010101020501030201010402000101020101010204010302020101 -020001010201010102020103020201040202010402020103020301010200010102060104 -020201030274000002020400000004030208000002020400030400000203040002770101 -0207010102030102020b0101020301010201010102020102020001010202010102010101 -020101010201010102090101020101010201010102010101020101010200010102010101 -020101010203010102010101020101010202010202000101020a01010202010102010101 -020201020200010102020101020101010201010102260100020001010201010002010101 -020101010201010102010101020101010201010102010101020901020200010202000101 -020101010201010102020101020201020200010102010101020001010200010102010101 -020101010202010102010101020201010202010202000101020201020200010102010101 -020101010201010102050101020801010201010102020101020101010204010102010101 -020101010202010102010101020301010201010102010101020001010201010102010101 -020101010200010102050101020501010201010102020102020001010204010102050101 -020101010273000004030101020b00000203040003020000020404000277010402040101 -0204010302090101020701010202010102010101020201010201010102010101020d0101 -020101010201010102010101020801010201010102030101020101010201010102020101 -02010101020a010102060101020201010201010102020101020101010201010102260100 -0200010202000100020101010201010102010101020101010201010102010101020d0101 -020101010201010102050101020201010202010102010101020101010200010102000101 -020101010201010102020101020101010202010102020101020101010202010102010101 -020101010201010102010102020401020207010102010101020201010201010102040101 -020101010201010102030101020001000204010102010101020101020203010102010101 -020401020204010202040101020101010202010102010101020401020204010102010101 -02760103020b000002030400030200000204040002770101020701010206010202080101 -0204010402020101020101010202010102010105020d0101020101010201010102010101 -02050104020101010203010102010101020101010202010102010101020a010102030104 -020201010201010102020101020101050226010002010101020001000201010102010101 -020101010201010102010105020d01010201010102010101020201040202010102020101 -020101010201010102000101020001010201010102010101020201010201010102020101 -020201010201010102020101020101010201010502020103020301030205010102010101 -020201010201010102040105020101010204010102050105020101010204010102010101 -020501030203010302020101020101010202010102010101020501030202010502760103 -020b00000204040003000000020504000277010102070101020701010208010102030101 -020101010202010102010101020201010201010102110101020101010201010102010101 -0204010102010101020101010203010102010101020101010202010102010101020a0101 -020201010201010102020101020101010202010102010101022a01000202010202010101 -020101010201010102010101020101010211010102010101020101010201010102010101 -020201010202010102010101020101010201010102000101020001010200010202020101 -020101010202010102020101020101010202010102010101020101010208010202040102 -020401010201010102020101020101010204010102050101020301000200010102040101 -020501010204010102010101020701020204010202010101020101010202010102010101 -0207010202010101027a0103020b00000204040003000000020504000277010102070101 -020301010201010102080101020301010201010102020101020101010202010102010101 -020201000201010102090101020101010201010102010101020201000200010102010101 -020101010203010102010101020101010202010102010101020a01010202010102010101 -020201010201010102020101020101010202010002260100020201020201010102010101 -020101010200010202010101020201000201010102090101020101010201010102010101 -020101010202010102020101020101010202010102070101020001010202010102000102 -020201010202010102010101020201010201010102010101020201000205010102050101 -020101010200010102000102020201010200010202010101020001010202010002010101 -020201010201010102000101020001010202010002010101020401010201010102020100 -020401010205010102010101020101010202010102010101020101010204010102010101 -0202010002760103020b0000020500000206040002770105020301010204010302090101 -020401020200010102010104020301010202010302020101020901010202010302030103 -02020102020001010201010202010101020201030203010102010101020b010202010102 -020001010201010402030101020201030227010002030101020201030203010102000101 -020201030202010102090101020101010201010102020102020001010201010102020101 -020101010203010502050101020301010200010102020101020201010201010102020101 -020101010202010302020104020201040202010102010101020001010203010102000101 -020101010201010302030102020001010201010102000101020101030202010102040101 -020201030201010402020104020301030203010102010101020101010200010402030103 -02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d -040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff -02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103 -0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202 -00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff -06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801 -020201030202000106ff06ff06e908010202010302020001060b07040604070006030702 -061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa -07000602070006090702061308010202010302020001060b0700060f0700062107000614 -0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b -0700061308010202010302020001060b0700060607020605070006030702061a07000604 -070206030702060507000603070206180700060207000601070006000701060207040602 -070206030702060207000600070106030702061807000602070006020702060307020602 -07000602070006ff06eb07000602070006020702060507000602070006000701060c0801 -0202010302020001060b0700060807000605070006020700060207000619070006030700 -060207000601070006020700060407000602070006020700061707000602070006010701 -060107000603070006060700060207000602070006010701060107000601070006020700 -0618070006000700060507000602070006020700060107000602070006ff06eb07000602 -07000601070006020700060407000602070106010700060b08010202010302020001060b -070306050700060507000602070006020700061907000603070006020700060107000602 -07000604070006020700061b070006020700060107000602070006030700060607000602 -070006020700060107000602070006010700061c07000600070006050700060207000602 -070006010700060007000600070006ff06eb070406010700060207000604070006020700 -06020700060b08010202010302020001060b070006080700060507000602070406190700 -060307000602070006010700060207000604070006030702061807000602070006010700 -060207000603070006060700060207000602070006010700060207000602070206190700 -06000700060507000602070406010700060007000600070006ff06eb0700060207000601 -0704060407000602070006020700060b08010202010302020001060b0700060807000605 -070006020700061d07000603070006020700060107000602070006040700060607000617 -070006020700060107000602070006030700060607000602070006020700060107000602 -07000605070006190700060607000602070006050700060007000600070006ff06eb0700 -0602070006010700060807000602070006020700060b08010202010302020001060b0700 -060807000605070006020700060207000619070006030700060207000601070006020700 -060407000602070006020700061707000602070006010701060107000603070006060700 -060207000602070006010700060207000601070006020700061907000606070006020700 -0602070006010700060007000600070006ff06eb07000602070006010700060207000604 -07000602070106010700060b08010202010302020001060b070006080700060507000603 -0702061a0700060407020603070206050700060307020619070206020700060007010605 -07010604070006030702060207000602070006020702061a070006060700060307020603 -07000600070006ff06ec07000602070006020702060507000602070006000701060c0801 -0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706 -062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202 -0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801 -020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103 -0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff -08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff -06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff -06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603 -0016061600160616004406160016061600160616001606ff06be02020103020206030015 -080006160015080006160015080000150800001508000616001508000616001508000616 -0015080006ff06be02020103020206030001061208010616000106120801061600010612 -080100010612080100010612080106160001061208010616000106120801061600010612 -080106ff06be020201030202060300010612080106160001061208010616000106120801 -000106120801000106120801061600010612080106160001061208010616000106120801 -06ff06be0202010302020603000106120801061600010603070206030702060408010616 -000106120801000106120801000106120801061600010612080106160001061208010616 -00010612080106ff06be0202010302020603000106080702060608010616000106030702 -060307020604080106160001061208010001061208010001061208010616000106050704 -0607080106160001060707010608080106160001060707030606080106ff06be02020103 -020206030001060b0701060408010616000106020704060107040603080106160001060e -0700060208010001060e070006020801000106020700060e080106160001060307080605 -080106160001060607030607080106160001060507070604080106ff06be020201030202 -06030001060d070006000700060108010616000106020700060107010601070006010701 -0603080106160001060e0700060208010001060e070006020801000106020700060e0801 -061600010602070a06040801061600010606070306070801061600010604070306010703 -0603080106ff06be02020103020206030001060207020608070106010801061600010601 -070d0602080106160001060b07000601070006020801000106020700060a070006020801 -00010602070006010700060b080106160001060207030602070306040801061600010607 -0701060808010616000106040702060307020603080106ff06be02020103020206030001 -060107080602070206010801061600010600070006000703060007020600070406010801 -06160001060b07000601070006020801000106020700060a070006020801000106020700 -06010700060b080106160001060107030604070306030801061600010612080106160001 -06040702060307020603080106ff06be0202010302020603000106010709060608010616 -000106000700060007030600070206000704060108010616000106080700060107000601 -070006020801000106020700060407000604070006020801000106020700060107000601 -070006080801061600010601070206030707060108010616000106050704060708010616 -000106050701060207020604080106ff06be020201030202060300010601070906060801 -061600010600070006000703060007020600070406010801061600010608070006010700 -060107000602080100010602070006040700060407000602080100010602070006010700 -060107000608080106160001060107020604070506020801061600010606070306070801 -06160001060907020605080106ff06be0202010302020603000106010709060608010616 -000106000700060007030600070206000704060108010616000106050700060107000601 -070006010700060208010001060207000604070006010700060107000602080100010602 -070006010700060107000601070006050801061600010601070206050703060308010616 -0001060707020607080106160001060807020606080106ff06be02020103020206030001 -0601070d0602080106160001060007000600070706000704060108010616000106050700 -060107000601070006010700060208010001060207000604070006010700060107000602 -080100010602070006010700060107000601070006050801061600010601070306050701 -0604080106160001060707020607080106160001060707020607080106ff06be02020103 -020206030001060107030607070006030801061600010600070006000704060107000600 -070406010801061600010602070006010700060107000601070006010700060208010001 -060207000601070006010700060107000601070006020801000106020700060107000601 -07000601070006010700060208010616000106020703060b080106160001060707020607 -080106160001060707020607080106ff06be020201030202060300010601070206070700 -060408010616000106000706060107060601080106160001060207000601070006010700 -060107000601070006020801000106020700060107000601070006010700060107000602 -080100010602070006010700060107000601070006010700060208010616000106020709 -06050801061600010607070206070801061600010612080106ff06be0202010302020603 -000106010701060707000605080106160001060007000600070206050700060007020601 -080106160001060207000601070006010700060107000601070006020801000106020700 -060107000601070006010700060107000602080100010602070006010700060107000601 -070006010700060208010616000106030707060608010616000106060704060608010616 -0001060707020607080106ff06be02020103020206030001060107090606080106160001 -060007000600070206050700060007020601080106160001060207000601070006010700 -060107000601070006020801000106020700060107000601070006010700060107000602 -080100010602070006010700060107000601070006010700060208010616000106050704 -0607080106160001060507060605080106160001060707020607080106ff06be02020103 -020206030001061208010616000106000704060507040601080106160001061208010001 -0612080100010612080106160001061208010616000106120801061600010612080106ff -06be02020103020206030001061208010616000106120801061600010612080100010612 -080100010612080106160001061208010616000106120801061600010612080106ff06be -020201030202060300010612080106160001061208010616000106120801000106120801 -00010612080106160001061208010616000106120801061600010612080106ff06be0202 -010302020603000108140616000108140616000108140001081400010814061600010814 -06160001081406160001081406ff06be0202010302020603000008150616000008150616 -00000815000008150000081506160000081506160000081506160000081506ff06be0202 -0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 -0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 -0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 -0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5 -06030202010302020603010000ff00ff00cf010000120100060302020103020206030100 -00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001 -060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603 -0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603 -0100003401010071010100ff00ff002401000001060e0801010006030202010302020603 -0100003301000075010000ff00ff002301000001060e0801010006030202010302020603 -010000070103000401000005010100190100000301000016010000100100000601020010 -0100000c0100001c010000ff00ff002301000001060e0801010006030202010302020603 -010000070100000201000002010100040100000101000018010000030100002801000008 -010000100100000c0100001c010000ff00ff002301000001060e08010100060302020103 -020206030100000701000002010000010100000001000004010000010100000301010012 -010000030100000101000003010200020100000001010003010200020100000001010009 -010000000101000501000003010200030102000201000001010000030102000201000000 -010100030102000201000000010100030101000001000003010000ff00ff002301000001 -0601010a0601080101000603020201030202060301000007010000020100000301000004 -010000010100000301010012010000030100000001000003010000020100000101010001 -010000040100000201010001010000080101000101000004010000020100000201000001 -010000020100000101000000010000030100000201000001010100010100000101000002 -0100000101010001010000010100000101010003010000ff00ff00230100000106020108 -060208010100060302020103020206030100000701030004010000040100000101000016 -010100040101000801000001010000080100000201000002010000080100000201000004 -010000060100000101000005010100040100000201000001010000020100000101000002 -01000001010000050100000201000004010100ff00ff0021010000010603010606030801 -010006030202010302020603010000070100000101000004010000040100000101000018 -010000030101000501030001010000080100000201000002010000080100000201000004 -010000030103000101000005010100040104000101000002010000010104000101000005 -0100000201000003010000ff00ff00230100000106040104060408010100060302020103 -020206030100000701000002010000030100000401000001010000180100000301000000 -010000030100000201000001010000080100000201000002010000080100000201000004 -010000020100000201000001010000050100000001000003010000050100000201000001 -01000005010000050100000201000003010000ff00ff0023010000010605010206050801 -010006030202010302020603010000070100000201000003010000040100000101000003 -010100120100000301000001010000020100000201000001010000080100000201000002 -010000030101000201010001010000040100000201000002010000010100000201000001 -010000010100000201000002010000010101000101000001010000020100000101000005 -0100000101010003010000ff00ff00230100000106060100060608010100060302020103 -020206030100000701000002010000010104000301010004010100120100000301000002 -010000020103000101000008010000020100000201000003010100020100000001010005 -010000030103000201020002010000020100000201020002010000000101000301020002 -010000060101000001000003010000ff00ff002301000001060e08010100060302020103 -0202060301000033010000290100004501000003010000ff00ff002301000001060e0801 -0100060302020103020206030100003401010025010100420100000201000001010100ff -00ff002401000001060e0801010006030202010302020603010000a2010200ff00ff0029 -01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801 -010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103 -02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff -00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811 -01000603020201030202060301ff01ff01e50603020201030202060301ff01ff01d10617 -0202010302020603010006ff06ff06bc0812010006170202010302020603010006ff06ff -06bc08110000010006170202010302020603010006010dff0dff0db8060108010c060800 -0c060001010006170202010302020603010006010dff0dff0db70000060108010c050000 -08000c060001010006170202010302020603010006010d0100ff00ff00b6060108010c05 -000008010c050001010006170202010302020603010006010d0100ff00ff00b606010801 -0c04000108010c050001010006170202010302020603010006010d0100ff00ff00b60601 -08010c040001060008010c040001010006170202010302020603010006010d0100ff00ff -00b6060108010c030001060108010c040001011406030202010302020603010006010d01 -00ff00ff00b6060108010c030001060208010c0300010100061201000603020201030202 -0603010006010d0100ff00ff00b6060108010c020001060308010c030001010006120100 -06030202010302020603010006010d0100ff00ff00b6060108010c020001060408010c02 -000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c01 -0001060508010c02000101000612010006030202010302020603010006010d0100ff00ff -00b6060108010c010001060608010c010001010006120100060302020103020206030100 -06010d0100ff00ff00b6060108010c000001060708010c01000101000612010006030202 -010302020603010006010d0100ff00ff00b6060108010c000001060808010c0000010100 -0612010006030202010302020603010006010d0100ff00ff00b6060108010001080b0c00 -000101000612010006030202010302020603010006010d0100ff00ff00b6060108010000 -080d000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0c0e000101000612010006030202010302020603010006010d01000301010071010100ff -00ff003c06010801001001000612010006030202010302020603010006010d0100000c01 -01000c7501000c010e0000ff00ff003806010801000d0800000101000612010006030202 -010302020603010006010d0100000c0101000c0301000c1601000c1001000c0601020c10 -01000c0c01000c1c01000c010e0000ff00ff0038060108010001060a0801000101000612 -010006030202010302020603010006010d0100000c0101000c0301000c2801000c080100 -0c1001000c0c01000c1c01000c010e0000ff00ff0038060108010001060a080100010100 -0612010006030202010302020603010006010d0100000c0101000c0301000c0101000c03 -01020c0201000c0001010c0301020c0201000c0001010c0901000c0001010c0501000c03 -01020c0301020c0201000c0101000c0301020c0201000c0001010c0301020c0201000c00 -01010c0301010c0001000c0301000c010e0000ff00ff0038060108010001060a08010001 -01000612010006030202010302020603010006010d0100000c0101000c0301000c000100 -0c0301000c0201000c0101010c0101000c0401000c0201010c0101000c0801010c010100 -0c0401000c0201000c0201000c0101000c0201000c0101000c0001000c0301000c020100 -0c0101010c0101000c0101000c0201000c0101010c0101000c0101000c0101010c030100 -0c010e0000ff00ff0038060108010001060a080100010100061201000603020201030202 -0603010006010d01000001010c0401010c0801000c0101000c0801000c0201000c020100 -0c0801000c0201000c0401000c0601000c0101000c0501010c0401000c0201000c010100 -0c0201000c0101000c0201000c0101000c0501000c0201000c0401010e0000ff00ff0038 -060108010001060a0801000101000612010006030202010302020603010006010d010000 -0c0101000c0301010c0501030c0101000c0801000c0201000c0201000c0801000c020100 -0c0401000c0301030c0101000c0501010c0401040c0101000c0201000c0101040c010100 -0c0501000c0201000c0301000c010e0000ff00ff0038060108010001060a080100010100 -0612010006030202010302020603010006010d0100000c0101000c0301000c0001000c03 -01000c0201000c0101000c0801000c0201000c0201000c0801000c0201000c0401000c02 -01000c0201000c0101000c0501000c0001000c0301000c0501000c0201000c0101000c05 -01000c0501000c0201000c0301000c010e0000ff00ff0038060108010001060a08010001 -01000612010006030202010302020603010006010d0100000c0101000c0301000c010100 -0c0201000c0201000c0101000c0801000c0201000c0201000c0301010c0201010c010100 -0c0401000c0201000c0201000c0101000c0201000c0101000c0101000c0201000c020100 -0c0101010c0101000c0101000c0201000c0101000c0501000c0101010c0301000c010e00 -00ff00ff0038060108010001060a08010001010006120100060302020103020206030100 -06010d0100000c0101000c0301000c0201000c0201030c0101000c0801000c0201000c02 -01000c0301010c0201000c0001010c0501000c0301030c0201020c0201000c0201000c02 -01020c0201000c0001010c0301020c0201000c0601010c0001000c0301000c010e0000ff -00ff0038060108010001060a080100010100061201000603020201030202060301000601 -0d0100000c0101000c2901000c4501000c0301000c010e0000ff00ff0038060108010001 -060a0801000101000612010006030202010302020603010006010d0100000c0201010c25 -01010c4201000c0201000c0101010c020e0000ff00ff0038060108010001060a08010001 -01000612010006030202010302020603010006010d0100000e7001020e0800ff00ff0038 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001060a08010001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010001060a080100010100061201000603 -0202010302020603010006010d0100ff00ff00b6060108010001060a0801000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010001060a08010001 -01000612010006030202010302020603010006010d0100ff00ff00b6060108010001060a -0801000101000612010006030202010302020603010006010d0100ff00ff00b606010801 -0001060a0801000101000612010006030202010302020603010006010d0100ff00ff00b6 -060108010001060a0801000101000612010006030202010302020603010006010d0100ff -00ff00b6060108010001060a080100010100061201000603020201030202060301000601 -0d0100ff00ff00b6060108010001060a0801000101000612010006030202010302020603 -010006010d0100ff00ff00b6060108010001080c00010100061201000603020201030202 -0603010006010d0100ff00ff00b6060108010000080d0001010006120100060302020103 -02020603010006010d0100ff00ff00b6060108010c0e0001010006120100060302020103 -02020603010006010d0100ff00ff00b60601080100100100061201000603020201030202 -0603010006010d0100ff00ff00b6060108010c00000c0800000101000612010006030202 -010302020603010006010d0100ff00ff00b6060108010c000001060808010c0000010100 -0612010006030202010302020603010006010d0100ff00ff00b6060108010c0100010607 -08010c00000101000612010006030202010302020603010006010d0100ff00ff00b60601 -08010c010001060608010c01000101000612010006030202010302020603010006010d01 -00ff00ff00b6060108010c020001060508010c0100010100061201000603020201030202 -0603010006010d0100ff00ff00b6060108010c020001060408010c020001010006120100 -06030202010302020603010006010d0100ff00ff00b6060108010c030001060308010c02 -000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c03 -0001060208010c03000101000612010006030202010302020603010006010d0100ff00ff -00b6060108010c040001060108010c030001010006120100060302020103020206030100 -06010d0100ff00ff00b6060108010c040001060008010c04000101000612010006030202 -010302020603010006010d0100ff00ff00b6060108010c05000008020c04000101000612 -010006030202010302020603010006010d0100ff00ff00b6060108010c05000008010c05 -000101000612010006030202010302020603010006010d0100ff00ff00b6060108010c06 -08010c05000101000612010006030202010302020603010006010d0000ff00ff00b70601 -08010c0608000c06000101000612010006030202010302020603010006ff06ff06bc0801 -001001000612010006030202010302020603010006ff06ff06bc08000011010006120100 -0603020201030202060301ff01ff01d1061201000603020201030202060301000b010932 -0a0100630100006301000063010000630100006301000063010000020100061308010c0e -0001062301000603020201030202060301000b010916010209180a010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -01030202060301000b01091501000902010009170a010063010000170100002001020026 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000b01091501000902010009170a01006301000017010000220100 -002601000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000b01091501000902010009170a01000e0100000001010003 -0102000201000000010100420100000f0102000201040001010000020100000101000000 -010100030102000201000000010100050100000301020002010000000101001801000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -0202060301000b010916010209180a01000e010100010100000101000002010000010101 -0001010000410100000e0100000201000003010000030100000201000001010100010100 -000101000002010000010101000101000004010000020100000201000001010100010100 -001701000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000b01091501000902010009170a01000e0100000201000001 -0100000201000001010000450100000e0100000701000003010000020100000101000005 -010000020100000101000002010000040100000601000001010000020100001701000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -0202060301000b01091501000902010009170a01000e0100000201000001010400010100 -00450100000f010200040100000301000002010000010100000501040001010000020100 -000401000003010300010100000201000017010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000b01091501000902 -010009170a01000e01000002010000010100000501000045010000120100000301000003 -010000020100000101000005010000050100000201000004010000020100000201000001 -010000020100001701000063010000630100006301000063010000020100061308010c0e -0001062301000603020201030202060301000b010916010209180a01000e010100010100 -00010100000201000001010000450100000e010000020100000301000003010000010101 -000101000005010000020100000101010001010000040100000201000002010000010100 -00020100001701000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000b0109320a01000e010000000101000301020002 -010000450100000f01020005010100020101000001000001010000060102000201000000 -010100050100000301030001010000020100001701000063010000630100006301000063 -010000020100061308010c0e0001062301000603020201030202060301000b0109320a01 -000e01000053010000310100003001000063010000630100006301000063010000020100 -061308010c0e0001062301000603020201030202060301000b0109320a01000e01000053 -010000310100003001000063010000630100006301000063010000020100061308010c0e -0001062301000603020201030202060301000b0109320a01000e01000053010000310100 -003001000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000b0109320a01006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000b01 -09320a010063010000630100006301000063010000630100006301000002010006130801 -0c0e0001062301000603020201030202060301000b010a34006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000b000a3501ff01ff0161061308010c0e00010623010006030202010302020603 -0100009a0100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100003508000063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001061601020618080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106150100060201000617080100260100003b01000019010000170102002d01000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -0202060301000001061501000602010006170801006301000019010000190100002d0100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -01030202060301000001061501000602010006170801000e010100000100000301020002 -010000000101000301020003010200340100000f01020003010100000100000201020002 -010000000101000201000000010100050100000301020002010000000101001f01000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -0202060301000001061501000602010006170801000e0100000001000000010000010100 -00020100000101010001010000040100000201000002010000330100000e010000020100 -000101000001010100010100000201000001010100010100000101010001010000040100 -00020100000201000001010100010100001e010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061601030617 -0801000e010000000100000001000005010000010100000801000006010000330100000e -010000020100000101000002010000010100000201000001010000020100000101000002 -010000040100000601000001010000020100001e01000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106190100 -06170801000e010000000100000001000002010300010100000801000003010300330100 -000e01000002010000010100000201000001010400010100000201000001010000020100 -00040100000301030001010000020100001e010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061801000618 -0801000e0100000001000000010000010100000201000001010000080100000201000002 -010000330100000e01000002010000010100000201000001010000050100000201000001 -0100000201000004010000020100000201000001010000020100001e0100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010615010206190801000e01000000010000000100000101000002010000010100 -00080100000201000002010000330100000e010000020100000101000001010100010100 -000201000001010000020100000101010001010000040100000201000002010000010100 -00020100001e01000063010000630100006301000063010000020100061308010c0e0001 -06230100060302020103020206030100000106320801000e010000000100000001000002 -010300010100000801000003010300330100000f01020003010100000100000201020002 -010000020100000101000000010100050100000301030001010000020100001e01000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -02020603010000010632080100630100002a010000370100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100002a01000037010000630100006301000063010000630100000201000613 -08010c0e00010623010006030202010302020603010000010632080100630100002a0100 -003701000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -063208010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010834006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000000083501ff01ff0161061308010c0e00010623010006030202010302020603 -010005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000f6301000f6301000f6301000f6301000f6301000f6301000f02010006130801 -0c0e00010623010006030202010302020603010000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050001000f6301000f6301000f6301000f63 -01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603 -0100050000000532010005000f6301000f6301000f6301000f6301000f6301000f630100 -0f020100061308010c0e0001062301000603020201030202060301000000053401000f63 -01000f6301000f6301000f6301000f6301000f6301000f020100061308010c0e00010623 -01000603020201030202060301000500000005130100050401020515010005000f630100 -0f6301000f6301000f6301000f6301000f6301000f020100061308010c0e000106230100 -0603020201030202060301000000051201020503010005020100051501000f0e01000f16 -01000f3b01000f0e01000f0601020f1001000f0c01000f2901000f6301000f6301000f63 -01000f6301000f020100061308010c0e0001062301000603020201030202060301000500 -00000513010005030100050201000514010005000f0e01000f5301000f0e01000f080100 -0f1001000f0c01000f2901000f6301000f6301000f6301000f6301000f02010006130801 -0c0e00010623010006030202010302020603010000000514010005030100050201000515 -01000f0e01000f0101000f0301020f0201000f0001010f0301020f0201000f0001010f34 -01000f0e01000f0001010f0501000f0301020f0301020f0201000f0101000f0301020f02 -01000f0001010f0301020f0201000f0001010f0301010f0001000f1001000f6301000f63 -01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603 -0100050000000513010005030100050201000514010005000f0e01000f0001000f030100 -0f0201000f0101010f0101000f0401000f0201010f0101000f3301000f0e01010f010100 -0f0401000f0201000f0201000f0101000f0201000f0101000f0001000f0301000f020100 -0f0101010f0101000f0101000f0201000f0101010f0101000f0101000f0101010f100100 -0f6301000f6301000f6301000f6301000f020100061308010c0e00010623010006030202 -01030202060301000000051401000503010005020100051501000f0e01010f0801000f01 -01000f0801000f0201000f0201000f3301000f0e01000f0201000f0401000f0601000f01 -01000f0501010f0401000f0201000f0101000f0201000f0101000f0201000f0101000f05 -01000f0201000f1001000f6301000f6301000f6301000f6301000f020100061308010c0e -000106230100060302020103020206030100050000000513010005030100050201000514 -010005000f0e01010f0501030f0101000f0801000f0201000f0201000f3301000f0e0100 -0f0201000f0401000f0301030f0101000f0501010f0401040f0101000f0201000f010104 -0f0101000f0501000f0201000f1001000f6301000f6301000f6301000f6301000f020100 -061308010c0e000106230100060302020103020206030100000005140100050301000502 -0100051501000f0e01000f0001000f0301000f0201000f0101000f0801000f0201000f02 -01000f3301000f0e01000f0201000f0401000f0201000f0201000f0101000f0501000f00 -01000f0301000f0501000f0201000f0101000f0501000f0501000f0201000f1001000f63 -01000f6301000f6301000f6301000f020100061308010c0e000106230100060302020103 -0202060301000500000005110104050201020515010005000f0e01000f0101000f020100 -0f0201000f0101000f0801000f0201000f0201000f3301000f0e01010f0101000f040100 -0f0201000f0201000f0101000f0201000f0101000f0101000f0201000f0201000f010101 -0f0101000f0101000f0201000f0101000f0501000f0101010f1001000f6301000f630100 -0f6301000f6301000f020100061308010c0e000106230100060302020103020206030100 -0000053401000f0e01000f0201000f0201030f0101000f0801000f0201000f0201000f33 -01000f0e01000f0001010f0501000f0301030f0201020f0201000f0201000f0201020f02 -01000f0001010f0301020f0201000f0601010f0001000f1001000f6301000f6301000f63 -01000f6301000f020100061308010c0e0001062301000603020201030202060301000500 -00000532010005000f6301000f5101000f1001000f6301000f6301000f6301000f630100 -0f020100061308010c0e0001062301000603020201030202060301000000053401000f63 -01000f4d01000f0201000f1001000f6301000f6301000f6301000f6301000f0201000613 -08010c0e000106230100060302020103020206030100050000000532010005000f630100 -0f4e01020f1101000f6301000f6301000f6301000f6301000f020100061308010c0e0001 -062301000603020201030202060301000000053401000f6301000f6301000f6301000f63 -01000f6301000f6301000f020100061308010c0e00010623010006030202010302020603 -0100050000000532010005000f6301000f6301000f6301000f6301000f6301000f630100 -0f020100061308010c0e0001062301000603020201030202060301000000050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100050001000500010005000100050001000500010005000100050001000f6301000f63 -01000f6301000f6301000f6301000f6301000f020100061308010c0e0001062301000603 -020201030202060301000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01000500010005000100050001ff01ff0161061308010c0e000106230100060302020103 -020206030100050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500010000630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100050000000532010005000063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000000534 -010000630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100050000000513010005050100051601000500 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000000051201020503010205170100001e01000043 -0100000e01000006010200100100000c0100002901000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100050000000513 -010005050100051601000500001e010000430100000e01000008010000100100000c0100 -002901000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000000051401000505010005170100000e0101000001000003 -01020002010400020102003b0100000e0100000001010005010000030102000301020002 -010000010100000301020002010000000101000301020002010000000101000301010000 -0100001001000063010000630100006301000063010000020100061308010c0e00010623 -0100060302020103020206030100050000000513010005050100051601000500000e0100 -00000100000001000001010000020100000301000003010000020100003a0100000e0101 -000101000004010000020100000201000001010000020100000101000000010000030100 -000201000001010100010100000101000002010000010101000101000001010000010101 -001001000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000000051401000505010005170100000e0100000001000000 -0100000501000003010000030100003e0100000e01000002010000040100000601000001 -010000050101000401000002010000010100000201000001010000020100000101000005 -010000020100001001000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100050000000513010005050100051601000500 -000e01000000010000000100000201030003010000040102003b0100000e010000020100 -000401000003010300010100000501010004010400010100000201000001010400010100 -000501000002010000100100006301000063010000630100006301000002010006130801 -0c0e0001062301000603020201030202060301000000051401000505010005170100000e -0100000001000000010000010100000201000003010000070100003a0100000e01000002 -010000040100000201000002010000010100000501000000010000030100000501000002 -010000010100000501000005010000020100001001000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100050000000511 -010405010104051401000500000e01000000010000000100000101000002010000030100 -0003010000020100003a0100000e01010001010000040100000201000002010000010100 -000201000001010000010100000201000002010000010101000101000001010000020100 -000101000005010000010101001001000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000005340100000e01000000 -010000000100000201030004010100020102003b0100000e010000000101000501000003 -010300020102000201000002010000020102000201000000010100030102000201000006 -010100000100001001000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100050000000532010005000063010000510100 -001001000063010000630100006301000063010000020100061308010c0e000106230100 -06030202010302020603010000000534010000630100004d010000020100001001000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -0202060301000500000005320100050000630100004e0102001101000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000005340100006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000500000005320100050000630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010000630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001ff01ff -0161061308010c0e000106230100060302020103020206030100009a0100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100003508000063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -061301000604010206150801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061101020603 -010006020100061408010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010613010006030100 -060201000614080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106130100060301000602 -010006140801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001061301000606010006150801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061301000605010006160801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001061301000604010006170801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001061301000603010006020100061408010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010611010406010104061408010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -063208010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010834006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000000083501ff01ff0161061308010c0e00010623010006030202010302020603 -0100009a0100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100003508000063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001061301000604010206150801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001061101020603010006020100061408010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010613010006070100061408010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010613 -010006070100061408010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010613010006050101 -061508010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010613010006070100061408010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010613010006070100061408010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010613010006030100060201000614080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106110104060201020615080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106320801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000108340063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -01030202060301000000083501ff01ff0161061308010c0e000106230100060302020103 -020206030100009a01000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000035080000630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010613010006060100061508010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010611010206050101061508010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010613010006040100060001000615080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106130100060401000600010006150801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -061301000603010006010100061508010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010613 -010006020100060201000615080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106130100 -060201050614080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106130100060601000615 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106110104060301020614080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -063208010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000108340063010000630100006301000063010000630100006301000002010006130801 -0c0e0001062301000603020201030202060301000000083501ff01ff0161061308010c0e -000106230100060302020103020206030100009a01000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000035 -080000630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010613010006030104 -061408010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010611010206030100061808010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010613010006030100061808010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010613010006030100061808010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010613010006030103061508010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010613 -010006070100061408010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010613010006070100 -061408010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010613010006020100060301000614 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106110104060101030615080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -063208010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000108340063010000630100006301000063010000630100006301000002010006130801 -0c0e0001062301000603020201030202060301000000083501ff01ff0161061308010c0e -000106230100060302020103020206030100009a01000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000035 -080000630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010613010006050102 -061408010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010611010206040100061708010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010613010006030100061808010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010613010006030100061808010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010613010006030103061508010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010613 -010006030100060201000614080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106130100 -060301000602010006140801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061301000603 -010006020100061408010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010611010406020102 -061508010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106320801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010834006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000000083501ff01ff -0161061308010c0e000106230100060302020103020206030100009a0100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100003508000063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -061301000603010406140801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061101020603 -010006020100061408010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010613010006060100 -061508010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010613010006060100061508010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010613010006060100061508010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010613010006060100061508010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010613010006050100061608010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010613 -010006050100061608010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010611010406030100 -061608010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106320801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010834006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000000083501ff01ff -0161061308010c0e000106230100060302020103020206030100009a0100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100003508000063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -061301000604010206150801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061101020603 -010006020100061408010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010613010006030100 -060201000614080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106130100060301000602 -010006140801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001061301000604010206150801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061301000603010006020100061408010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010613010006030100060201000614080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106130100060301000602010006140801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001061101040602010206150801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -063208010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001083400630100 -006301000063010000630100006301000063010000020100061308010010062301000603 -020201030202060301ff01ff019906130800001106230100060302020103020206030100 -06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202 -0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 -010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 -06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff -06e301000603020201030202060301000649010006ff06ff069801000603020201030202 -060301000648010106ff06ff069801000603020201030202060301000647010006000100 -06ff06ff069801000603020201030202060301000649010006ff06ff0698010006030202 -01030202060301000649010006ff06ff0698010006030202010302020603010006490100 -06ff06ff069801000603020201030202060301000649010006ff06ff0698010006030202 -01030202060301000649010006ff06ff0698010006030202010302020603010006470104 -06ff06ff0696010006030202010302020603010006ff06ff06e301000603020201030202 -0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 -010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 -060302020103020206030100063708ff08ff0860064a0100060302020103020206030100 -063708ff08ff085f0000064a010006030202010302020603010006370801001d0cff0cff -0c3e0001064a010006030202010302020603010006370801001c08000cff0cff0c3e0001 -064a0100060302020103020206030100063708010001060b08000000060b08010cff0cff -0c3e0001064a0100060302020103020206030100063708010001060b08000000060b0801 -0cff0cff0c3e0001064a0100060302020103020206030100063708010001060b08000000 -060b08010cff0cff0c3e0001064a0100060302020103020206030100063708010001060b -08000000060b08010cff0cff0c3e0001064a010006030202010302020603010006370801 -0001060b08000000060b08010cff0cff0c3e0001064a0100060302020103020206030100 -063708010001060b08000000060b08010cff0cff0c3e0001064a01000603020201030202 -06030100063708010001060b08000000060b08010cff0cff0c3e0001064a010006030202 -0103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a0100 -060302020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001 -064a0100060302020103020206030100063708010001060b08000000060b08010cff0cff -0c3e0001064a0100060302020103020206030100063708010001060b08000000060b0801 -0cff0cff0c3e0001064a0100060302020103020206030100063708010001080c0000080d -0cff0cff0c3e0001064a0100060302020103020206030100063708010000081c0cff0cff -0c3e0001064a01000603020201030202060301000637080100ff00ff005e064a01000603 -020201030202060301000637080000ff00ff005f064a0100060302020103020206030100 -06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202 -0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 -010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 -06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff -06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100 -06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202 -0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 -010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 -06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff -06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100 -06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202 -0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 -010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 -06030202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff -06e3010006030202010302020603010006ff06ff06e30100060302020103020206030100 -06ff06ff06e3010006030202010302020603010006ff06ff06e301000603020201030202 -0603010006ff06ff06e3010006030202010302020603010006ff06ff06e3010006030202 -010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e30100 -06030202010100040603010006ff06ff06e301000603000502020400060301ff01ff01e5 -060300000202040000000202040006ff06ff06ed00000202040000000202040006ff06ff -06ed00000202040000000202040006ff06ff06ed00000202040000000202040006ff06ff -06ed000002020400000002020400000502ff02ff02e100060202040000000208040002ff -02ff02e100000208040000000208040002ff02ff02e100000208040000000208040001ff -01ff01e10000020804000000040901ff01ff01e100000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 64 377 377 -%%EOF diff --git a/lib/tv/doc/src/tv_search_result.gif b/lib/tv/doc/src/tv_search_result.gif Binary files differdeleted file mode 100644 index 3e615b4875..0000000000 --- a/lib/tv/doc/src/tv_search_result.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_search_result.ps b/lib/tv/doc/src/tv_search_result.ps deleted file mode 100644 index 14d0331a8f..0000000000 --- a/lib/tv/doc/src/tv_search_result.ps +++ /dev/null @@ -1,2739 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./tv_search_result.tmp.eps) -%%CreationDate: (Tue Jun 12 16:10:46 2001) -%%BoundingBox: 0 34 400 249 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 34 400 249 -userdict begin -%%BeginData: -DisplayImage -0 34 -400.000000 215.000000 -12 -1051 565 -1 -0 -0 -32 -ffffff -000000 -d8d8d8 -4ac1df -c2c2c2 -6b6b6b -d9d9d9 -b22222 -00ff00 -ff0000 -aa2455 -990000 -7f7f7f -999999 -ff7f7f -009900 -7fff7f -ffd700 -998100 -ffff7f -000000 -000000 -000000 -000000 -000000 -000000 -000000 -000000 -000000 -000000 -000000 -000000 -03ba01010000010100000100000001000000010000000100000001000000010000000100 -000101000002010103ff03ff03ff03ff0300010200000100000001000000010000000100 -000001000000010000000100000101000002010103f5000a01ff01ff0137000a03be0101 -000101000000010000000100000001000000010000000100000101000002010103f60000 -0208050001ff01ff013700000208050003bf010100010100000001000000010000000100 -00000100000101000002010103f700000208050002ff02ff023700000208050003c00101 -00010100000001000000010000000100000101000002010103f800000208050002ff02ff -023700000208050003c10101000101000000010000000100000101000002010103f90000 -0202050602ff02ff0237000005050202050003c201010001010000000100000101000002 -010103fa0000020205000209000d02ff02ff022b00000202050003c30101000101000001 -01000002010103fb00000202050002080000020d05000234010302110103023201020258 -0102020c010102010101021e010102290101020601010208010102310101022a01010230 -0101024100000202050003c40101000201000002010103fc00000202050002080000020d -05000234010102020107020001010203010102010101020e01050200010702010103020d -0101020401010204010302030103020e010302060103020301030203010302060103020b -0101020a0101020201010219010002030101021c0100020b01010206010102090101021b -010202020100020d0101022a0101020c0104021e0101024100000202050003c501010000 -01000002010103fd00000202050002080000020d05000234010102050101020301010203 -010102010101020e0101020701010203010102010101020c010102020103020301010201 -010102010101020101010208010102010101020101010204010102010101020101010201 -0101020101010201010102040101020101010201010102060101020a0101020201010218 -010102210101020b01010206010102090101021b010202020100020d0101023801010202 -0101021d0101024100000202050003c601010002010103fe000002020500020800000202 -0506020305000234010102050101020301010203010102010101020e0101020701010203 -010102050101020901010203010102070101020101010201010102060102020201010201 -010102080101020101010201010102010101020101010204010102010101020201020203 -0101020a0101020301010202010302030103020201030201010402010101020201030203 -010102000101020a0104020101030203010102000101020301010202010302030101021a -010002000101020101000202010302030104020201030202010102090101020001010201 -010102030103020301010202010102000101020201010201010302020101020001010201 -010102030103020201010200010102010101020201030202010102020101023000000202 -050003c701000001010103ff000005030208000002020500040400000203050002340101 -02050101020401010202010002020101020e0101020701010203010202040101020a0100 -020301010207010102010101020101010205010102040101020101010208010102010101 -02010101020101010201010102040101020101010204010102020100020b010102030101 -020101010201010102010101020101010200010102010101020101010203010102010101 -020101010202010202000101020a01010202010102010101020201020200010102020101 -020101010201010102020101021a01000200010102010100020101010201010102010101 -020101010201010102010101020101010209010202000102020001010201010102010101 -020201010202010202000101020101010200010102000101020201020200010202000101 -020101010201010102010101020001010201010102010101020101010201010102020101 -02300000050303c7010303ff03000101020b000002030500040200000204050002340101 -02050101020401010201010102020101020e01040204010102040103020d010102040101 -020501020202010102010101020401010205010102010101020701010202010102010101 -020201040204010102010101020501010202010102090101020301010201010102010101 -0201010102080101020101010203010102010101020101010202010102010101020a0101 -02060101020201010201010102020101020101010201010102020101021a010002000102 -02000100020101010201010102010101020101010201010102010101020d010102010101 -020101010205010102020101020201010201010102010101020001010200010102020101 -020101010201010102050101020101020203010102010101020101010201010102020100 -0234010103c8010103ff03010101020b0000020305000402000002040500023401010205 -0101020501010200010002030101020e01010207010102060102020e0100020301010207 -010102010101020101010205010102040101020101010206010102030101020101010205 -010102040101020101010204010102020100020b01010203010102010101020101010201 -010102050104020101010203010102010101020101010202010102010101020a01010203 -01040202010102010101020201010201010502020101021a010002010101020001000201 -010102010101020101010201010102010105020d01010201010102010101020201040202 -010102020101020101010201010102000101020001010202010102010101020101010202 -010402010101020401010201010502020101020001010234010103ff03cc0101020b0000 -02040500040000000205050002340101020501010205010302030101020e010102070101 -02070101020d010102030101020701010201010102010101020601020202010102010101 -0205010102040101020101010205010102040101020101010202010202030101020a0101 -020301010201010102010101020101010204010102010101020101010203010102010101 -020101010202010102010101020a01010202010102010101020201010201010102020101 -0201010102060101021a0100020201020201010102010101020101010201010102010101 -021101010201010102010101020101010201010102020101020201010201010102010101 -020101010200010102010101020101010201010102010101020101010201010102040101 -0201010102060101020001000235010103ff03cc0101020b000002040500040000000205 -050002340101020501010206010102040101020e01010207010102030101020101010201 -010102080101020401010203010102010101020101010201010102010101020401010201 -010102010101020101010200010502010101020101010201010102010101020101010200 -0101020101010201010102060101020a0101020201010201010102010101020101010202 -01000200010102010101020101010203010102010101020101010202010102010101020a -01010202010102010101020201010201010102020101020101010202010002010101021b -010002020102020101010201010102010101020001020201010102020100020101010209 -010102010101020101010201010102010101020201010202010102010101020201010207 -010102010101020101010201010102010101020101010204010102010101020201000203 -01020235010103ff03cc0101020b00000205000002060500023401010205010102060101 -02040101020e010502030101020401030202010102080101020401010204010302030103 -0202010102090103020201010200010502020103020301030202010102010103020b0101 -020a01010202010102020103020301030202010202000101020101020201010102020103 -0203010102010101020b0102020101020200010102010104020301010202010302020101 -021b01000203010102020103020301010200010102020103020201010209010102010101 -020101010202010202000101020101010202010102010101020301050202010102010101 -020101010202010202000101020001010204010102020103020401010236010103ff03cc -0101020b0000020d050002340103021101030232010202190100023d0102020c01010237 -010602230101029e01010237010103ff03cc0101020b0000020d0500029d010002ff0254 -01010237010103ae0100030801000305010103ff030a0101020b0000020d050002ff02ff -022d010103ae0100030801000306010003ff030a0101020c050d02ff02ff022e010103ae -0100030801000306010003ff030a010102ff02ff0249010103ac01040301010303000103 -0303010003030102030201030307010203010100030001010307010003e2010102ff02ff -0249010103ae010003020100030201000300010003020100030201000302010003020100 -03000100030a01000302010003000101030101000306010003e2010102ff02ff02490101 -03ae01000302010003020100030001000302010003020100030201040301010203070100 -0302010003000100030201000306010003e2010102ff02ff0249010103ae010003020100 -030101010300010003020100030201000302010003080100030601000302010003000100 -030201000306010003e2010102ff02ff0249010103af0101030101010300010003000103 -0302010203020102030101030308010203010100030201000306010003e2010102020600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -0000060000000202010103ff03cc01010202000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -06000000060000000600000006000000060000000600000006000202010103ff03cc0101 -02020600000006ff06ff064001000202010103ff03cc01010202000006ff06ff06400100 -06000202010103ff03cc010102020600000006ff06ff064001000202010103ff03cc0101 -0202000006ff06ff0640010006000202010103ff03cc010102020600000006ff06ff0640 -01000202010103ff03cc010102020000060c07040604070006030702061f070406050700 -060407000604070006190700060207000604070006270702060b07000606070006ff065e -070006020700060907020613010006000202010103ff03cc0101020206000000060b0700 -060f0700061f070006090700060a07000619070006020700062c070006020700060a0700 -06ff0666070006020700060b0700061401000202010103ff03cc010102020000060c0700 -060607020605070006030702061807000606070106000700060207020602070406170700 -060207000602070206030702060207000602070006170700060207000601070006000701 -06020704060207020603070206020700060007010603070206ff06490700060207000602 -0702060507000602070006000701060c010006000202010103ff03cc0101020206000000 -060b07000608070006050700060207000602070006170700060507000601070106040700 -06040700061a070006000700060507000602070006020700060107000602070006170700 -060207000601070106010700060307000606070006020700060207000601070106010700 -060107000602070006ff0648070006020700060107000602070006040700060207010601 -0700060c01000202010103ff03cc010102020000060c0703060507000605070006020700 -060207000617070306020700060207000604070006040700061a07000600070006050700 -060207000602070006010700060007000600070006170700060207000601070006020700 -0603070006060700060207000602070006010700060207000601070006ff064c07040601 -070006020700060407000602070006020700060b010006000202010103ff03cc01010202 -06000000060b070006080700060507000602070406170700060507000602070006040700 -06040700061a070006000700060507000602070406010700060007000600070006170700 -060207000601070006020700060307000606070006020700060207000601070006020700 -0602070206ff064907000602070006010704060407000602070006020700060c01000202 -010103ff03cc010102020000060c0700060807000605070006020700061b070006050700 -060207000604070006040700061b07000606070006020700060507000600070006000700 -061707000602070006010700060207000603070006060700060207000602070006010700 -060207000605070006ff064807000602070006010700060807000602070006020700060b -010006000202010103ff03cc0101020206000000060b0700060807000605070006020700 -060207000617070006050700060107010604070006040700061b07000606070006020700 -060207000601070006000700060007000617070006020700060107010601070006030700 -0606070006020700060207000601070006020700060107000602070006ff064807000602 -07000601070006020700060407000602070106010700060c01000202010103ff03cc0101 -02020000060c070006080700060507000603070206180704060207010600070006040700 -060507010619070006060700060307020603070006000700061907020602070006000701 -06050701060407000603070206020700060207000602070206ff06490700060207000602 -0702060507000602070006000701060c010006000202010103ff03cc0101020206000000 -06a8070006ff06840700061001000202010103ff03cc010102020000060b0706062a0706 -062a0706062a07060600070006ff066e0706060e0700060f010006000202010103ff03cc -0101020206000000060a0706062a0706062a0706062a07060600070006ff066e0706060e -0700061001000202010103ff03cc01010202000006ff06ff0640010006000202010103ff -03cc010102020600000006ff06ff064001000202010103ff03cc01010202000006ff06ff -0640010006000202010103ff03cc01010202060000000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -01000600010006000100060001000600010006000100060001000202010103ff03cc0101 -020200000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000202010103ff03cc0101020206ff06ff06430202010103ff03cc -0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc -0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc -0101020206ff06ff06430202010103ff03cc0101020206ff06ff06430202010103ff03cc -0101020206ff06ff06430202010103ff03cc010102020636000006000000060000000600 -00000600000006000000060000000600000006000000060000000600000006000000061a -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000601000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000601000006000000060000000600 -00000600000006000000060000000600000006000000060000000600000006000000061a -000006000000060000000600000006000000060000000600000006000000060000000600 -00000600000006000000061a000006000000060000000600000006000000060000000600 -00000600000006000000060000000600000006000000061a000006000000060000000600 -0000060000000600000006000000060000000600000006000000060000000600000006fb -0202010103ff03cc01010202063500000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060001000618000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600010000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060001000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000100 -061800000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060001000618000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600010006180000 -060000000600000006000000060000000600000006000000060000000600000006000000 -06000000060000000600010006fa0202010103ff03cc010102020636000006140100061a -00000614010006010000061401000601000006140100061a000006140100061a00000614 -0100061a00000614010006fb0202010103ff03cc01010202063500000616010006180000 -061601000000061601000000061601000618000006160100061800000616010006180000 -0616010006fa0202010103ff03cc010102020636000006140100061a0000061401000601 -0000061401000601000006140100061a000006140100061a000006140100061a00000614 -010006fb0202010103ff03cc010102020635000006050702060307020606010006180000 -061601000000061601000000061601000618000006160100061800000616010006180000 -0616010006fa0202010103ff03cc0101020206360000060407020603070206050100061a -00000614010006010000061401000601000006140100061a00000606070406080100061a -00000608070106090100061a0000060807030607010006fb0202010103ff03cc01010202 -063500000604070406010704060501000618000006100700060401000000061007000604 -010000000604070006100100061800000605070806070100061800000608070306090100 -06180000060707070606010006fa0202010103ff03cc0101020206360000060307000601 -0701060107000601070106040100061a0000060f07000603010006010000060f07000603 -01000601000006030700060f0100061a00000603070a06050100061a0000060707030608 -0100061a000006050703060107030604010006fb0202010103ff03cc0101020206350000 -0603070d0604010006180000060d07000601070006040100000006040700060a07000604 -010000000604070006010700060d01000618000006040703060207030606010006180000 -06090701060a01000618000006060702060307020605010006fa0202010103ff03cc0101 -0202063600000601070006000703060007020600070406020100061a0000060c07000601 -0700060301000601000006030700060a070006030100060100000603070006010700060c -0100061a0000060207030604070306040100061a000006140100061a0000060507020603 -07020604010006fb0202010103ff03cc0101020206350000060207000600070306000702 -060007040603010006180000060a07000601070006010700060401000000060407000604 -070006040700060401000000060407000601070006010700060a01000618000006030702 -060307070603010006180000060707040609010006180000060707010602070206060100 -06fa0202010103ff03cc0101020206360000060107000600070306000702060007040602 -0100061a0000060907000601070006010700060301000601000006030700060407000604 -0700060301000601000006030700060107000601070006090100061a0000060207020604 -070506030100061a00000607070306080100061a0000060a07020606010006fb02020101 -03ff03cc0101020206350000060207000600070306000702060007040603010006180000 -060707000601070006010700060107000604010000000604070006040700060107000601 -070006040100000006040700060107000601070006010700060701000618000006030702 -060507030605010006180000060907020609010006180000060a07020608010006fa0202 -010103ff03cc010102020636000006010700060007070600070406020100061a00000606 -070006010700060107000601070006030100060100000603070006040700060107000601 -070006030100060100000603070006010700060107000601070006060100061a00000602 -07030605070106050100061a00000608070206080100061a0000060807020608010006fb -0202010103ff03cc01010202063500000602070006000704060107000600070406030100 -061800000604070006010700060107000601070006010700060401000000060407000601 -070006010700060107000601070006040100000006040700060107000601070006010700 -06010700060401000618000006040703060d010006180000060907020609010006180000 -060907020609010006fa0202010103ff03cc010102020636000006010706060107060602 -0100061a0000060307000601070006010700060107000601070006030100060100000603 -070006010700060107000601070006010700060301000601000006030700060107000601 -0700060107000601070006030100061a00000603070906060100061a0000060807020608 -0100061a00000614010006fb0202010103ff03cc01010202063500000602070006000702 -060507000600070206030100061800000604070006010700060107000601070006010700 -060401000000060407000601070006010700060107000601070006040100000006040700 -060107000601070006010700060107000604010006180000060507070608010006180000 -060807040608010006180000060907020609010006fa0202010103ff03cc010102020636 -00000601070006000702060507000600070206020100061a000006030700060107000601 -070006010700060107000603010006010000060307000601070006010700060107000601 -07000603010006010000060307000601070006010700060107000601070006030100061a -00000606070406080100061a00000606070606060100061a0000060807020608010006fb -0202010103ff03cc01010202063500000602070406050704060301000618000006160100 -000006160100000006160100061800000616010006180000061601000618000006160100 -06fa0202010103ff03cc010102020636000006140100061a000006140100060100000614 -01000601000006140100061a000006140100061a000006140100061a00000614010006fb -0202010103ff03cc01010202063500000616010006180000061601000000061601000000 -0616010006180000061601000618000006160100061800000616010006fa0202010103ff -03cc010102020636000006140100061a0000061401000601000006140100060100000614 -0100061a000006140100061a000006140100061a00000614010006fb0202010103ff03cc -010102020635000006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006180000060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -000006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010000000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000618000006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006180000060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100061800000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -0600010006fa0202010103ff03cc01010202063601000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100061a01000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060101000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060101000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100061a01000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100061a01000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100061a01000600010006000100060001000600 -01000600010006000100060001000600010006000100060001000600010006fb02020101 -03ff03cc0101020206ff06ff06430202010103ff03cc0101020206ff06ff064302020101 -0303000a01ff01b0000a03010101020206ff06ff064302020101030300000208050001ff -01b000000208050003010101020206ff06ff064302020101030300000208050002ff02b0 -00000208050003010101020206ff06ff064302020101030300000208050002ff02b00000 -0208050003010101020206ff06ff064302020101030300000202050602ff02b000000505 -0202050003010101020206ff06ff06430202010103030000020205000209000d02ff02a4 -00000202050003010101020206ff06ff064302020101030300000202050002080000020d -0500029001030211010302330101021501010206010102a1000002020500030101010202 -06ff06ff064302020101030300000202050002080000020d050002900101020201070200 -01010203010102010101020e010302200101020c0103020401010206010102110100028e -00000202050003010101020206ff06ff064302020101030300000202050002080000020d -05000290010102050101020301010203010102010101020d010102010101021f0101020b -0101020101010203010102190101028e00000202050003010101020206ff06ff06430202 -010103030000020205000208000002020506020305000290010102050101020301010203 -010102010101020d01010206010302030103020201010200010102010103020201010200 -01010207010102030101020201010200010102030101020201030203010302000104028c -000002020500030101010202060301ff01ff013b06030202010103030000050302080000 -0202050004040000020305000290010102050101020401010202010002020101020d0102 -020401010201010102010101020101010201010102000101020001010201010102010102 -020001010206010102030101020201020200010102020101020101010201010102010101 -0201010102000101028e000005030301010102020603010006ff06ff0625010006000000 -060000000600000006000000060000000600000006000000060000000600000006000100 -06030202010103030101020b000002030500040200000204050002900101020501010204 -01010201010102020101020e010302020101020101010205010102010102020201010205 -010102010101020601010203010102020101020101010202010102010101020101010201 -010102040101029101010301010102020603010006ff06ff062501000000060000000600 -000006000000060000000600000006000000060000000600000006000101060302020101 -03030101020b000002030500040200000204050002900101020501010205010102000100 -020301010210010202010105020201040201010102030101020501010201010102060101 -020301010202010102010101020201010201010502010101020401010291010103010101 -02020603010006010dff0dff0d210601010006000000060e010006000100060302020101 -03030101020b000002040500040000000205050002900101020501010205010302030101 -021101010201010102050101020101010201010102030101020501010201010102060101 -020301010202010102010101020201010201010102050101020401010291010103010101 -02020603010006010dff0dff0d2000000601010000000610010106030202010103030101 -020b000002040500040000000205050002900101020501010206010102040101020d0101 -020101010201010102020100020101010201010102010101020301010202010002010101 -020101010207010102010101020301010201010102020101020101010202010002010101 -0202010002000101029101010301010102020603010006010d0100ff00ff001f06010100 -06000000060e01000600010006030202010103030101020b000002050000020605000290 -0101020501010206010102040101020e0103020301030203010202000101020001010204 -01030202010102010101020801030204010402030101020201030203010302020102028f -01010301010102020603010006010d0100ff00ff001f0601010000000610010106030202 -010103030101020b0000020d050002900103021101030254010102a40101030101010202 -0603010006010d0100ff00ff001f0601010006000000060e010006000100060302020101 -03030101020b0000020d050002fd010202a501010301010102020603010006010d0100ff -00ff001f0601010000000610010106030202010103030101020b0000020d050002ff02a6 -01010301010102020603010006010d0100ff00ff001f0601010006000000060e01000600 -010006030202010103030101020c050d02ff02a701010301010102020603010006010d01 -00ff00ff001f0601010000000602010a060201010603020201010303010102ff02c20101 -0301010102020603010006010d0100ff00ff001f06010100060000000602010806020100 -060001000603020201010303010102ff02c201010301010102020603010006010d0100ff -00ff001f06010100000006040106060401010603020201010303010102ff02c201010301 -010102020603010006010d0100ff00ff001f060101000600000006040104060401000600 -01000603020201010303010102ff02c201010301010102020603010006010d0100ff00ff -001f06010100000006060102060601010603020201010303010102ff02c2010103010101 -02020603010006010d0100ff00ff001f0601010006000000060601000606010006000100 -06030202010103030101020206ff06bc020201010301010102020603010006010d0100ff -00ff001f0601010000000610010106030202010103030101020206ff06bc020201010301 -010102020603010006010d0100ff00ff001f0601010006000000060e0100060001000603 -0202010103030101020206ff06bc020201010301010102020603010006010d0100ff00ff -001f0601010000000610010106030202010103030101020206ff06bc0202010103010101 -02020603010006010d0100ff00ff001f0601010006000000060e01000600010006030202 -010103030101020206ff06bc020201010301010102020603010006010d0100ff00ff001f -0601010000000610010106030202010103030101020206ff06bc02020101030101010202 -0603010006010d0100ff00ff001f0601010006000000060e010006000100060302020101 -03030101020206ff06bc020201010301010102020603010006010d0000ff00ff00200601 -010000000610010106030202010103030101020206ff06bc020201010301010102020603 -010006ff06ff062501000600000006000100060001000600010006000100060001000600 -010006000100060001000600010006030202010103030101020206ff06bc020201010301 -010102020603010006ff06ff062501000000060001000600010006000100060001000600 -01000600010006000100060001000600010106030202010103030101020206ff06bc0202 -0101030101010202060301ff01ff013b0603020201010303010102020608000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006080202010103010101020206ff06ff -064302020101030301010202060700000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600010006070202010103010101020206ff06ff064302020101030301010202 -0608000006ff06a8010006080202010103010101020206ff06ff06430202010103030101 -02020607000006ff06aa010006070202010103010101020206ff06ff0643020201010303 -010102020608000006ff06a8010006080202010103010101020206ff06ff064302020101 -0303010102020607000006ff06aa010006070202010103010101020206ff06ff06430202 -01010303010102020608000006ff06a8010006080202010103010101020206ff06ff0643 -020201010303010102020607000006ff06aa010006070202010103010101020206ff06ff -0643020201010303010102020608000006ff06a8010006080202010103010101020206ff -06ff0643020201010303010102020607000006ff06aa0100060702020101030101010202 -06ff06ff0643020201010303010102020608000006ff06a8010006080202010103010101 -020206ff06ff0643020201010303010102020607000006ff06aa01000607020201010301 -0101020206ff06ff0643020201010303010102020608000006ff06a80100060802020101 -03010101020206ff06ff0643020201010303010102020607000006ff0649000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -06000000060000000611010006070202010103010101020206ff06ff0643020201010303 -010102020608000006ff0647000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006110100060802020101 -03010101020206ff06ff0643020201010303010102020607000006ff06490000064c0100 -0611010006070202010103010101020206ff06ff06430202010103030101020206080000 -06ff06470000064c01000611010006080202010103010101020206ff06ff064302020101 -03030101020206070000060d0102061e0100060f010106ff06060000064c010006110100 -06070202010103010101020206ff06ff06430202010103030101020206080000060b0100 -06020100061d0100060e010006ff06070000064c01000611010006080202010103010101 -020206ff06ff06430202010103030101020206070000060c010006060102060301020602 -010006000101060301020602010006000101060b01000604010206020100060001010604 -010106f20000064c01000611010006070202010103010101020206ff06ff064302020101 -03030101020206080000060c010006040100060201000601010006020100060101010601 -010006010100060201000601010106010100060801040601010006020100060101010601 -01000603010106f10000064c010006110100060802020101030101010202060301ff01ff -013b06030202010103030101020206070000060e01010602010006020100060501000601 -0100060501000605010006020100060a010006030100060201000601010006fc0000064c -0100061101000607020201010301010102020603010006ff06ed0100064a010006030202 -010103030101020206080000060f01000601010406020103060101000605010006050100 -06020100060a010006030100060201000601010006fb000006120102061e010006160100 -06110100060802020101030101010202060301000663010506ff06830100064a01000603 -0202010103030101020206070000060c0100060201000601010006050100060201000601 -0100060501000605010006020100060a010006030100060201000601010006fc00000610 -010006020100061d01000617010006110100060702020101030101010202060301000662 -010706ff06820100064a010006030202010103030101020206080000060b010006020100 -060101000602010006010100060201000601010006050100060201000601010006020100 -060a01000603010006020100060101000607010106f10000061101000606010206030102 -060201000600010106030102060201000600010106130100061101000608020201010301 -0101020206030100066101020603010206ff06810100064a010006030202010103030101 -020206070000060d0102060301020603010306010100060601020602010006020100060a -010006040102060201000607010106f20000061101000604010006020100060101000602 -010006010101060101000601010006020100060101010601010006130100061101000607 -0202010103010101020206030100066101010605010106ff06810100064a010006030202 -01010303010102020608000006ff06470000061301010602010006020100060501000601 -010006050100060501000602010006120100061101000608020201010301010102020603 -0100066101020603010206ff06810100064a010006030202010103030101020206070000 -06ff06490000061401000601010406020103060101000605010006050100060201000613 -010006110100060702020101030101010202060301000662010706ff06820100064a0100 -0603020201010303010102020608000006ff064700000611010006020100060101000605 -010006020100060101000605010006050100060201000612010006110100060802020101 -030101010202060301000663010506ff06830100064a0100060302020101030301010202 -0607000006ff064900000610010006020100060101000602010006010100060201000601 -010006050100060201000601010006020100061301000611010006070202010103010101 -0202060301000665010106ff06850100064a010006030202010103030101020206080000 -06ff06470000061201020603010206030103060101000606010206020100060201000612 -010006110100060802020101030101010202060301000665010106ff06850100064a0100 -0603020201010303010102020607000006ff06490000064c010006110100060702020101 -030101010202060301000665010106ff06850100064a0100060302020101030301010202 -0608000006ff06470000064c010006110100060802020101030101010202060301000665 -010106ff06850100064a01000603020201010303010102020607000006ff06490000064c -010006110100060702020101030101010202060301000665010106ff06850100064a0100 -0603020201010303010102020608000006ff06470000064c010006110100060802020101 -030101010202060301000665010106ff06850100064a0100060302020101030301010202 -06070000060b0dff0d2806140000064c0100061101000607020201010301010102020603 -0100066101010600010206ff06850100064a010006030202010103030101020206080000 -060a0dff0d27000006130000064c01000611010006080202010103010101020206030100 -066101010600010206ff06850100064a010006030202010103030101020206070000060b -0d0100ff002606140000064c010006110100060702020101030101010202060301000661 -010506ff06850100064a010006030202010103030101020206080000060a0d0100ff0026 -06130000064c010006110100060802020101030101010202060301000661010506ff0685 -0100064a010006030202010103030101020206070000060b0d0100ff002606140000064c -01000611010006070202010103010101020206030100066101020600010106ff06850100 -064a010006030202010103030101020206080000060a0d0100ff002606130000064c0100 -061101000608020201010301010102020603010006ff06ed0100064a0100060302020101 -03030101020206070000060b0d0100ff0026061400000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000611 -0100060702020101030101010202060301ff01ef064a0100060302020101030301010202 -06080000060a0d0100ff0026061300000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000611010006080202 -010103010101020206030100063513610c04060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -0000060000000600000006000000060000000600000006000000060000000c0406000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -06000000060000000c040600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000c04060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000001000614010006000100060001000600 -010006000100060001000600010006000100060001000624010006030202010103030101 -020206070000060b0d01001f010000ff0005067501000607020201010301010102020603 -01000635136012000c030100000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -0000060000000600000006000000060000000600000006000c0301000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000c03010000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -00000600000006000000060000000600000006000c030100000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060001000613010006000100060001000600 -010006000100060001000600010006000100060001000600000006230100060302020101 -03030101020206080000060a0d01001d0100000001000000010000ff0003067401000608 -020201010301010102020603010006351301115d12010c01010206000000065c01000c01 -010206000000065c01000c01010206000000065c01000c01010206000000061f01000614 -0100040e00000624010006030202010103030101020206070000060b0d01000101000002 -01000002010200030102000301020003010200ff00040675010006070202010103010101 -02020603010006351301112c0100112f12010c0101020000062b0102062d010006000c01 -01020000062b0102062d010006000c0101020000062d0100062d010006000c0101020000 -06200100061301000600040e060000000623010006030202010103030101020206080000 -060a0d010001010000020100000101000002010000010100000201000001010000020100 -0002010200ff0004067401000608020201010301010102020603010006351301112a0102 -112f12010c010102060000000629010006020100062d01000c0101020600000006290100 -06020100062d01000c01010206000000062b0101062e01000c01010206000000061f0100 -06140100040e00000624010006030202010103030101020206070000060b0d0100010100 -0002010000050100000101000009010000010100000001000000010000ff000306750100 -0607020201010301010102020603010006351301112c0100112f12010c0101020000062a -010006020100062c010006000c0101020000062e0100062c010006000c0101020000062b -010006000100062d010006000c010102000006200100061301000600040e060000000623 -010006030202010103030101020206080000060a0d010002010000000100000301030002 -0102000301030003010000ff000506740100060802020101030101010202060301000635 -1301112c0100112f12010c010102060000000629010006020100062d01000c0101020600 -0000062d0100062d01000c01010206000000062a010006000100062e01000c0101020600 -0000061f010006140100040e00000624010006030202010103030101020206070000060b -0d010002010000000100000201000002010000050100000101000002010000ff000a0675 -01000607020201010301010102020603010006351301112c0100112f12010c0101020000 -062d0100062d010006000c0101020000062c0101062d010006000c0101020000062a0100 -06010100062d010006000c010102000006200100061301000600040e0600000006230100 -06030202010103030101020206080000060a0d0100030100000301000002010000010100 -00020100000101000002010000ff000a0674010006080202010103010101020206030100 -06351301112c0100112f12010c01010206000000062b0100062f01000c01010206000000 -062d0100062d01000c010102060000000628010006020100062e01000c01010206000000 -061f010006140100040e00000624010006030202010103030101020206070000060b0d01 -0003010000040103000201020003010300ff000a06750100060702020101030101010202 -0603010006351301112c0100112f12010c0101020000062b0100062f010006000c010102 -0000062e0100062c010006000c010102000006290105062c010006000c01010200000620 -0100061301000600040e060000000623010006030202010103030101020206080000060a -0d0100ff0026067401000608020201010301010102020603010006351301112c0100112f -12010c010102060000000629010006020100062d01000c01010206000000062901000602 -0100062d01000c01010206000000062c0100062e01000c01010206000000061f01000614 -0100040e00000624010006030202010103030101020206070000060b0d0100ff00260614 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006110100060702020101030101010202060301000635 -1301112a0104112d12010c0101020000062a0104062c010006000c0101020000062b0102 -062d010006000c0101020000062c0102062c010006000c01010200000620010006130100 -0600040e060000000623010006030202010103030101020206080000060a0d0100ff0026 -061300000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000611010006080202010103010101020206030100 -06351301115d12010c01010206000000065c01000c01010206000000065c01000c010102 -06000000065c01000c01010206000000061f010006140100040e00000624010006030202 -010103030101020206070000060b0d0100ff002606140000064c01000611010006070202 -01010301010102020603010006351301115d12010c0101020000065c010006000c010102 -0000065c010006000c0101020000065c010006000c010102000006200100061301000600 -040e060000000623010006030202010103030101020206080000060a0d0100ff00260613 -0000064c0100061101000608020201010301010102020603010006351301115d12010c01 -010206000000065c01000c01010206000000065c01000c01010206000000065c01000c01 -010206000000061f010006140100040e0000062401000603020201010303010102020607 -0000060b0d0100ff002606140000064c0100061101000607020201010301010102020603 -010006351301115d12010c0101020000065c010006000c0101020000065c010006000c01 -01020000065c010006000c010102000006200100061301000600040e0600000006230100 -06030202010103030101020206080000060a0d0100ff002606130000064c010006110100 -0608020201010301010102020603010006351301115d12010c01010206000000065c0100 -0c01010206000000065c01000c01010206000000065c01000c01010206000000061f0100 -06140100040e00000624010006030202010103030101020206070000060b0d0100ff0026 -06140000064c0100061101000607020201010301010102020603010006351301115d1201 -0c0101020000065c010006000c0101020000065c010006000c0101020000065c01000600 -0c010102000006200100061301000600040e060000000623010006030202010103030101 -020206080000060a0d0000ff002706130000064c01000611010006080202010103010101 -02020603010006351301125f0c0101020600000006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000c01010206000000 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -06000100060001000c010102060000000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -0600010006000100060001000600010006000100060001000c0101020600000006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -06000100060001000600010006000100060001000600010106140100040e000006240100 -0603020201010303010102020607000006ff06490000064c010006110100060702020101 -030101010202060301000635130012600c00010300000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -01000600010006000100060001000600010006000100060001000600010006000c000103 -000006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -0100060001000600010006000c0001030000060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000c00010300000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100061301000600 -040e06000000062301000603020201010303010102020608000006ff0647000006120102 -061f01020613010006110100060802020101030101010202060301001036006301000063 -010000630100006301000022010006140100040e00000624010006030202010103030101 -02020607000006ff06490000061001000602010006200100061401000611010006070202 -01010301010102020603010010350f000063010000630100006301000063010000220100 -061301000600040e06000000062301000603020201010303010102020608000006ff0647 -000006110100060201000602010206020100060001010603010206030102060501000613 -01000611010006080202010103010101020206030100100108320f010063010000630100 -00630100006301000022010006140100040e000006240100060302020101030301010202 -0607000006ff064900000610010006050100060201000601010106010100060101000602 -010006010100060201000604010006140100061101000607020201010301010102020603 -0100100108320f010063010000630100006301000063010000220100061301000600040e -06000000062301000603020201010303010102020608000006ff06470000061101000609 -010006010100060201000601010006050100060201000604010006130100061101000608 -020201010301010102020603010010010815010408170f01006301000063010000630100 -006301000022010006140100040e00000624010006030202010103030101020206070000 -06ff06490000061001000606010306010100060201000601010006050104060401000614 -010006110100060702020101030101010202060301001001081501000802010008170f01 -000a0100001a01010004010000340100002c010000350100006301000063010000220100 -061301000600040e06000000062301000603020201010303010102020608000006ff0647 -000006110100060201000601010006020100060101000602010006010100060501000608 -010006130100061101000608020201010301010102020603010010010818010008180f01 -00250100003c0100002c01000035010000630100006301000022010006140100040e0000 -062401000603020201010303010102020607000006ff0649000006100100060201000601 -010006020100060101000602010006010100060201000601010006020100060401000614 -0100061101000607020201010301010102020603010010010818010008180f0100080102 -000301020003010200030102000401000004010200020100000001010003010200260100 -000701000002010000020102000301020003010200030102000201040002010200020100 -0000010100260100006301000063010000220100061301000600040e0600000006230100 -0603020201010303010102020608000006ff064700000612010206030103060101000602 -010006020102060301020605010006130100061101000608020201010301010102020603 -010010010818010008180f01000a01000002010000020100000101000002010000010100 -000201000001010400040100000201010001010000010100000201000025010000070100 -000201000001010000020100000101000002010000010100000201000001010000020100 -000301000003010000020100000101010001010000250100006301000063010000220100 -06140100040e0000062401000603020201010303010102020607000006ff06490000064c -0100061101000607020201010301010102020603010010010818010008180f01000a0100 -000201000002010000010100000501000002010000030100000601000002010000020100 -000101000002010000250100000701000002010000050100000101000009010000010100 -000701000007010000010100000201000025010000630100006301000022010006130100 -0600040e06000000062301000603020201010303010102020608000006ff06470000064c -0100061101000608020201010301010102020603010010010817010008190f01000a0100 -000201000002010000020102000201040003010000060100000201000002010000010104 -002501000008010000000100000301030002010200030103000201020004010000040103 -00010100000201000025010000630100006301000022010006140100040e000006240100 -0603020201010303010102020607000006ff06490000064c010006110100060702020101 -0301010102020603010010010817010008190f01000a0100000201000002010000050100 -000101000007010000060100000201000002010000010100002901000008010000000100 -000201000002010000050100000101000002010000050100000301000003010000020100 -000101000002010000250100006301000063010000220100061301000600040e06000000 -062301000603020201010303010102020608000006ff06470000064c0100061101000608 -020201010301010102020603010010010817010008190f01000a01000002010000020100 -000101000002010000010100000201000003010000060100000201000002010000010100 -000201000025010000090100000301000002010000010100000201000001010000020100 -000101000002010000030100000301000002010000010100000201000025010000630100 -006301000022010006140100040e00000624010006030202010103030101020206070000 -06ff06490000064c01000611010006070202010103010101020206030100100108320f01 -000a01000003010200030102000301020004010000060100000201000002010000020102 -002601000009010000040103000201020003010300020102000501010002010300010100 -0002010000250100006301000063010000220100061301000600040e0600000006230100 -0603020201010303010102020608000006ff06470000064c010006110100060802020101 -03010101020206030100100108320f01000a010000570100006301000063010000630100 -0022010006140100040e0000062401000603020201010303010102020607000006ff0649 -0000064c01000611010006070202010103010101020206030100100108320f0100070100 -000101000057010000630100006301000063010000220100061301000600040e06000000 -062301000603020201010303010102020608000006ff06470000064c0100061101000608 -0202010103010101020206030100100108320f0100080101005801000063010000630100 -006301000022010006140100040e00000624010006030202010103030101020206070000 -062200000663010006c00000064c01000611010006070202010103010101020206030100 -100108320f010063010000630100006301000063010000220100061301000600040e0600 -00000623010006030202010103030101020206080000062000000600000006230100063c -010006000100063e0102064b0100062f0000064c01000611010006080202010103010101 -020206030100100108320f01006301000063010000630100006301000022010006140100 -040e00000624010006030202010103030101020206070000062000000600000006000000 -06220100063b01000600010006000100063f0100067d0000060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -061101000607020201010301010102020603010010010f34006301000063010000630100 -0063010000220100061301000600040e0600000006230100060302020101030301010202 -06080000061e00000602000006000000060b010206030102060901040602010206020100 -0600010106020101060001000624010006000a01010006000100060b0102060301020609 -010006000101060301020603010106000100060101000602010006040100060301020602 -010006000101060a01020602010006020100060101000600010106020100060001010603 -010206030102060301020603010206030102060201000600010106210000060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100061101000608020201010301010102020603010010000f3501ff01b70614 -0100040e00000624010006030202010103030101020206070000061e0000060400000600 -000006090100060201000601010006020100060a01000603010006020100060101010601 -01000601010006000100060001000622010006000a030100060001000609010006020100 -060101000602010006080101060101000601010006020100060101000601010106010100 -060201000604010006020100060201000601010106010100060801000602010006010100 -060201000601010106010100060101010601010006010100060201000601010006020100 -060101000602010006040100060201000602010006010101060101000682010006070202 -0101030101010202060301000e3600630100006301000063010000630100002201000613 -01000600040e060000000623010006030202010103030101020206080000061c00000606 -000006000000060c010006010100060e0100060301000602010006010100060501000600 -0100060001000621010006000a05010006000100060c010006010100060c010006050100 -0602010006010100060201000601010006020100060401000606010006010100060c0100 -060201000602010006000100060201000602010006010100060501000602010006010100 -060501000608010006020100060201000601010006020100068101000608020201010301 -01010202060301000e350b00006301000063010000630100006301000022010006140100 -040e00000624010006030202010103030101020206070000061c01000608010006000100 -0608010306020102060b0100060301040601010006050100060001000600010006200000 -06000a070000060000000608010306020102060901000605010406010100060201000601 -010006020100060401000603010306010100060c01040603010006030100060201000601 -010006050104060201020603010206050100060201000602010006010100060201000682 -0100060702020101030101010202060301000e0109320b01006301000063010000630100 -0063010000220100061301000600040e0600000006230100060302020101030301010202 -06080000061c01000606010006000100060801000602010006050100060a010006030100 -060501000605010006000100060001000621000006000a05000006000000060801000602 -010006050100060801000605010006050100060201000601010006020100060401000602 -01000602010006010100060c010006060100060001000602010006020100060101000605 -010006090100060501000604010006020100060201000601010006020100068101000608 -02020101030101010202060301000e0109320b0100630100006301000063010000630100 -0022010006140100040e00000624010006030202010103030101020206070000061e0100 -060401000600010006090100060201000601010006020100060a01000603010006020100 -060101000605010006000100060001000622000006000a03000006000000060901000602 -010006010100060201000608010006050100060201000601010006010101060101000601 -010106040100060201000602010006010100060c01000602010006010100060201000601 -010106010100060101000605010006020100060101000602010006010100060201000604 -010006020100060201000601010006020100068201000607020201010301010102020603 -01000e010916010209180b01006301000063010000630100006301000022010006130100 -0600040e060000000623010006030202010103030101020206080000061e010006020100 -06000100060b010306020102060c01010602010206020100060501000600010006000100 -0623000006000a01000006000000060b0103060201020609010006060102060301010600 -01000602010106000100060401000603010306010100060d010206020100060201000601 -010006000101060201000606010206030102060301020605010006030102060201000602 -010006810100060802020101030101010202060301000e01091501000902010009170b01 -000701000016010000420100000701000006010200100100000c01000030010000630100 -006301000022010006140100040e00000624010006030202010103030101020206070000 -062001000600010006000100065f00000600000006000000063201000632010006b70100 -060702020101030101010202060301000e01091501000902010009170b0100070100005a -0100000701000008010000100100000c0100003001000063010000630100002201000613 -01000600040e060000000623010006030202010103030101020206080000062001000600 -01000661000006000000062f0100060201000632010006b6010006080202010103010101 -0202060301000e01091501000902010009170b0100070100000101000003010200020100 -00000101000301020002010000000101003b010000070100000001010005010000030102 -000301020002010000010100000301020002010000000101000301020002010000000101 -00030101000001000017010000630100006301000022010006140100040e000006240100 -060302020101030301010202060700000622010006630000063101020633010006b70100 -060702020101030101010202060301000e010916010209180b0100070100000001000003 -0100000201000001010100010100000401000002010100010100003a0100000701010001 -010000040100000201000002010000010100000201000001010000000100000301000002 -010000010101000101000001010000020100000101010001010000010100000101010017 -0100006301000063010000220100061301000600040e0600000006230100060302020101 -0303010102020608000006ff06a80100060802020101030101010202060301000e010915 -01000902010009170b01000701010008010000010100000801000002010000020100003a -010000070100000201000004010000060100000101000005010100040100000201000001 -010000020100000101000002010000010100000501000002010000170100006301000063 -01000022010006140100040e0000062401000603020201010303010102020607000006ff -06aa0100060702020101030101010202060301000e01091501000902010009170b010007 -01010005010300010100000801000002010000020100003a010000070100000201000004 -010000030103000101000005010100040104000101000002010000010104000101000005 -01000002010000170100006301000063010000220100061301000600040e060000000623 -01000603020201010303010102020608000006ff06a80100060802020101030101010202 -060301000e01091501000902010009170b01000701000000010000030100000201000001 -0100000801000002010000020100003a0100000701000002010000040100000201000002 -010000010100000501000000010000030100000501000002010000010100000501000005 -0100000201000017010000630100006301000022010006140100040e0000062401000603 -020201010303010102020607000006ff06aa010006070202010103010101020206030100 -0e010916010209180b010007010000010100000201000002010000010100000801000002 -010000020100003a01000007010100010100000401000002010000020100000101000002 -010000010100000101000002010000020100000101010001010000010100000201000001 -0100000501000001010100170100006301000063010000220100061301000600040e0600 -0000062301000603020201010303010102020608000006ff06a801000608020201010301 -01010202060301000e0109320b0100070100000201000002010300010100000801000002 -010000020100003a01000007010000000101000501000003010300020102000201000002 -010000020102000201000000010100030102000201000006010100000100001701000063 -0100006301000022010006140100040e0000062401000603020201010303010102020607 -000006ff06aa0100060702020101030101010202060301000e0109320b0100630100004a -010000170100006301000063010000220100061301000600040e06000000062301000603 -020201010303010102020608000006ff06a8010006080202010103010101020206030100 -0e0109320b01006301000046010000020100001701000063010000630100002201000614 -0100040e0000062401000603020201010303010102020607000006ff06aa010006070202 -0101030101010202060301000e0109320b01006301000047010200180100006301000063 -010000220100061301000600040e06000000062301000603020201010303010102020608 -000006ff06a80100060802020101030101010202060301000e0109320b01006301000063 -010000630100006301000022010006140100040e00000624010006030202010103030101 -02020607000006ff06aa0100060702020101030101010202060301000e0109320b010063 -010000630100006301000063010000220100061301000600040e06000000062301000603 -020201010303010102020608000006ff06a8010006080202010103010101020206030100 -0e010b34006301000063010000630100006301000022010006140100040e000006240100 -060302020101030301010202060700000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -0600010006000100060702020101030101010202060301000e000b3501ff01b706130100 -0600040e0600000006230100060302020101030301010202060801000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -06000100060001000600010006000100060802020101030101010202060301000c360063 -01000063010000630100006301000022010006140100040e000006240100060302020101 -03030101020206ff06bc02020101030101010202060301000c3501000063010000630100 -006301000063010000220100061301000600040e06000000062301000603020201010303 -0101020206ff06bc02020101030101010202060301000c01013400630100006301000063 -0100006301000022010006140100040e00000624010006030202010103030101020206ff -06bc02020101030101010202060301000c01013400630100006301000063010000630100 -00220100061301000600040e060000000623010006030202010103030101020206ff06bc -02020101030101010202060301000c0101160002011a0063010000630100006301000063 -01000022010006140100040e00000624010006030202010103030101020206ff06bc0202 -0101030101010202060301000c010115000001020000011900070100000e010000140100 -00340100002b010200340100006301000063010000220100061301000600040e06000000 -0623010006030202010103030101020206ff06bc02020101030101010202060301000c01 -0115000001020000011900070100000e0100004a0100002d010000340100006301000063 -01000022010006140100040e00000624010006030202010103030101020206ff06bc0202 -0101030101010202060301000c0101150000010200000119000701000001010000030102 -000201040002010200020100000001010003010200020100000001010003010200260100 -000701000002010000010100000001010002010000000101000301020003010200050100 -00030102002d0100006301000063010000220100061301000600040e0600000006230100 -06030202010103030101020206ff06bc02020101030101010202060301000c0101150000 -010200000119000701000000010000030100000201000003010000030100000201000001 -010100010100000401000002010100010100000101000002010000250100000701000002 -010000010101000101000001010100010100000101000002010000010100000201000004 -01000002010000020100002c010000630100006301000022010006140100040e00000624 -010006030202010103030101020206ff06bc02020101030101010202060301000c010116 -000301190007010100080100000301000007010000010100000801000002010000020100 -000501000025010000070100000201000001010000020100000101000002010000010100 -000901000004010000060100002c0100006301000063010000220100061301000600040e -060000000623010006030202010103030101020206ff06bc020201010301010102020603 -01000c010119000001190007010100050103000301000004010300010100000801000002 -010000020100000201030025010000070100000201000001010000020100000101000002 -010000020102000301030004010000030103002c01000063010000630100002201000614 -0100040e00000624010006030202010103030101020206ff06a101000600010006000100 -060001000600010006000100060001000600010006000100060902020101030101010202 -060301000c0101180000011a000701000000010000030100000201000003010000030100 -000201000001010000080100000201000002010000010100000201000025010000070100 -000201000001010000020100000101000002010000050100000101000002010000040100 -0002010000020100002c0100006301000063010000220100061301000600040e06000000 -0623010006030202010103030101020206ff06a001000600010006000100060001000600 -010006000100060001000600010006000100060000000608020201010301010102020603 -01000c0101150002011b0007010000010100000201000002010000030100000301000002 -010000010100000801000002010000020100000101000002010000250100000701000001 -010100010101000101000001010100010100000101000002010000010100000201000004 -01000002010000020100002c010000630100006301000022010006140100040e00000624 -010006030202010103030101020206070dff0d9606020100060601000606000006090202 -0101030101010202060301000c0101340007010000020100000201030004010100020103 -000101000008010000020100000201000002010300250100000801010000010000010100 -00000101000201000000010100030102000301030004010000030103002c010000630100 -0063010000220100061301000600040e0600000006230100060302020101030301010202 -06070dff0d95000006010100060600000608000006080202010103010101020206030100 -0c01013400630100000e010000050100004c010000630100006301000022010006140100 -040e00000624010006030202010103030101020206070d0100ff00940602010006060100 -06060000060902020101030101010202060301000c01013400630100000e010000050100 -004c0100006301000063010000220100061301000600040e060000000623010006030202 -010103030101020206070d0100580101006a010100cc0601010006060000060001000606 -0000060802020101030101010202060301000c01013400630100000e010000050100004c -010000630100006301000022010006140100040e00000624010006030202010103030101 -020206070d0100570100006e010000cb0602010006040000060201000604000006090202 -0101030101010202060301000c0101340063010000630100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206070d01000f0103 -00180102002701000020010200050100002e01000013010000cb06010100060400000602 -010006060000060802020101030101010202060301000c01013400630100006301000063 -0100006301000022010006140100040e0000062401000603020201010303010102020607 -0d01000f01000002010000160100000201000026010000220100003501000013010000cb -06020100060400000602010006040000060902020101030101010202060301000c010134 -0063010000630100006301000063010000220100061301000600040e0600000006230100 -06030202010103030101020206070d01000f010000020100000201020002010000020100 -000c01000003010100200100000401020002010000000101000201000000010100030102 -000501000003010200090100000201000002010200030102000301020003010200020104 -0002010200020100000001010004010000cb060101000604000006040100060400000608 -02020101030101010202060301000c0001ff01ed06140100040e00000624010006030202 -010103030101020206070d01000f01000002010000010100000201000001010000020100 -000c01000003010100200100000301000002010000010101000101000001010100010100 -000101000002010000040100000501000009010000020100000101000002010000010100 -000201000001010000020100000101000002010000030100000301000002010000010101 -000101000003010000cb0602010006020000060601000602000006090202010103010101 -0202060301000e360063010000630100006301000063010000220100061301000600040e -060000000623010006030202010103030101020206070d01000f01030002010000020100 -000101000000010000000100000b01000025010100080100000101000002010000010100 -000201000001010000020100000401000005010000090100000201000005010000010100 -0009010000010100000701000007010000010100000201000004010100c9060101000602 -00000606010006040000060802020101030101010202060301000e350b00006301000063 -010000630100006301000022010006140100040e00000624010006030202010103030101 -020206070d01000f0100000101000002010000020100000101000000010000000100000a -010000280100000401030001010000020100000101000002010000010104000401000005 -0100000a0100000001000003010300020102000301030002010200040100000401030001 -0100000201000003010000cb060201000602000006060100060200000609020201010301 -01010202060301000e0109320b0100630100006301000063010000630100002201000613 -01000600040e060000000623010006030202010103030101020206070d01000f01000002 -010000010100000201000001010000000100000001000009010000290100000301000002 -010000010100000201000001010000020100000101000008010000050100000a01000000 -010000020100000201000005010000010100000201000005010000030100000301000002 -010000010100000201000003010000cb0601010006020000060801000602000006080202 -0101030101010202060301000e0109320b01006301000063010000630100006301000022 -010006140100040e00000624010006030202010103030101020206070d01000f01000002 -010000010100000201000001010000000100000001000008010000070101002001000003 -010000020100000101000002010000010100000201000001010000020100000401000005 -010000040101000401000003010000020100000101000002010000010100000201000001 -01000002010000030100000301000002010000010100000201000003010000cb06020100 -06000000060a010006000000060902020101030101010202060301000e01091301000904 -010209150b010063010000630100006301000063010000220100061301000600040e0600 -00000623010006030202010103030101020206070d01000f010000020100000201020003 -010000000100000901040003010100200100000401030001010000020100000101000002 -010000020102000501000005010000040101000401000004010300020102000301030002 -0102000501010002010300010100000201000003010000cb060101000600000006000100 -060001000600010006000100060001000600010006020000060802020101030101010202 -060301000e0109110102090301000902010009140b010063010000320102002d01000063 -0100006301000022010006140100040e0000062401000603020201010303010102020607 -0d010057010000300100003c010000cb0602010006000100060001000600010006000100 -06000100060001000600010006000000060902020101030101010202060301000e010913 -0100090301000902010009140b010063010000340100002d010000630100006301000022 -0100061301000600040e060000000623010006030202010103030101020206070d010058 -0101002c0101003b010100cc060101000610000006080202010103010101020206030100 -0e0109130100090301000902010009140b01000701010000010000030102000301010000 -010000010100000001010002010000020100000201020034010000070100000001010003 -010200020100000001010002010000000101000201010000010000030102000501000002 -0101000001000026010000630100006301000022010006140100040e0000062401000603 -0202010103030101020206070d0100ff0094060201000600000006000000060000000600 -000006000000060000000600000006000000060902020101030101010202060301000e01 -09130100090301000902010009140b010007010000000100000001000001010000020100 -000101000001010100010101000101000001010000020100000101000002010000330100 -000701010001010000010100000201000001010100010100000101010001010000010100 -000001000000010000010100000201000004010000020100000001000000010000250100 -006301000063010000220100061301000600000006000000060000000600000006000000 -060000000600000006000000060000000623010006030202010103030101020206070d01 -00ff00940601010006000000060000000600000006000000060000000600000006000000 -0600010006000000060802020101030101010202060301000e0109130100090301000902 -010009140b01000701000000010000000100000501000001010000020100000101000002 -010000010100000201000001010000370100000701000002010000010100000201000001 -010000050100000501000000010000000100000501000004010000020100000001000000 -010000250100006301000063010000220100061401000600000006000000060000000600 -000006000000060000000600000006000000062401000603020201010303010102020607 -0d0100ff00940602010006000000060a0100060000000609020201010301010102020603 -01000e0109130100090301000902010009140b0100070100000001000000010000020103 -000101000002010000010100000201000001010000020100000201020034010000070100 -000201000001010000020100000101000005010000050100000001000000010000020103 -000401000002010000000100000001000025010000630100006301000022010006130100 -06000000060c0100060000000623010006030202010103030101020206070d0100ff0094 -0601010006000000060c010006000000060802020101030101010202060301000e010913 -0100090301000902010009140b0100070100000001000000010000010100000201000001 -010000020100000101000002010000010100000201000005010000330100000701000002 -010000010100000201000001010000050100000501000000010000000100000101000002 -010000040100000201000000010000000100002501000063010000630100002201000614 -010006000000060a0100060000000624010006030202010103030101020206070d010058 -01010063010100d30602010006000000060a010006000000060902020101030101010202 -060301000e01091101040902010209150b01000701000000010000000100000101000002 -010000010100000101010001010000020100000101000001010100010100000201000033 -010000070100000201000001010000020100000101000005010000050100000001000000 -010000010100000201000004010000020100000001000000010000250100006301000063 -0100002201000613010006000000060c0100060000000623010006030202010103030101 -020206070d01005701000067010000d20601010006000000060c01000600000006080202 -0101030101010202060301000e0109320b01000701000000010000000100000201030002 -010100000100000101000002010000020101000001000002010200340100000701000002 -010000020102000201000005010000050100000001000000010000020103000401000002 -01000000010000000100002501000063010000630100002201000614010006000000060a -0100060000000624010006030202010103030101020206070d01000f0103001801020027 -0100000d010000130100002e01000013010000d20602010006000000060a010006000000 -060902020101030101010202060301000e0109320b010019010000480100006301000063 -010000630100002201000613010006000000060c01000600000006230100060302020101 -03030101020206070d01000f010000020100001601000002010000260100005201000013 -010000d20601010006000000060c01000600000006080202010103010101020206030100 -0e0109320b01001501000002010000480100006301000063010000630100002201000614 -010006000000060a0100060000000624010006030202010103030101020206070d01000f -010000020100000201020002010000020100000c01000003010100200100000401020003 -010200030102000301020003010200090100000201000002010200030102000301020003 -0102000201040002010200020100000001010004010000d20602010006000000060a0100 -06000000060902020101030101010202060301000e0109320b0100160102004901000063 -01000063010000630100002201000613010006000000060c010006000000062301000603 -0202010103030101020206070d01000f0100000201000001010000020100000101000002 -0100000c0100000301010020010000030100000201000004010000020100000201000001 -010000020100000401000009010000020100000101000002010000010100000201000001 -010000020100000101000002010000030100000301000002010000010101000101000003 -010000d20601010006000000060c01000600000006080202010103010101020206030100 -0e0109320b0100630100006301000063010000630100002201000614010006000000060a -0100060000000624010006030202010103030101020206070d01000f0103000201000002 -0100000101000000010000000100000a0101002501010004010000080100000201000005 -010000080100000901000002010000050100000101000009010000010100000701000007 -010000010100000201000004010100d00602010006000000060a01000600000006090202 -0101030101010202060301000e0109320b01006301000063010000630100006301000022 -01000613010006000000060c010006000000062301000603020201010303010102020607 -0d01000f0100000101000002010000020100000101000000010000000100000c01000026 -01000003010000080100000201000005010000080100000a010000000100000301030002 -01020003010300020102000401000004010300010100000201000003010000d206010100 -06000000060c010006000000060802020101030101010202060301000e010b3400630100 -006301000063010000630100002201000614010006000000060a01000600000006240100 -06030202010103030101020206070d01000f010000020100000101000002010000010100 -0000010000000100000c0100002601000003010000080100000201000005010000080100 -000a01000000010000020100000201000005010000010100000201000005010000030100 -000301000002010000010100000201000003010000d20602010006000000060a01000600 -0000060902020101030101010202060301000e000b3501ff01b7060c0104060101000600 -0000060c0100060000000623010006030202010103030101020206070d01000f01000002 -010000010100000201000001010000000100000001000008010000020100000301010020 -010000030100000201000004010000020100000201000001010000020100000401000004 -010100040100000301000002010000010100000201000001010000020100000101000002 -010000030100000301000002010000010100000201000003010000d20601010006000000 -060c010006000000060802020101030101010202060301000e3600630100006301000063 -01000063010000220100060c0100060201000602010006000000060a0100060000000624 -010006030202010103030101020206070d01000f01000002010000020102000301000000 -0100000a0102000401010020010000040102000501000003010200030102000501000004 -010100040100000401030002010200030103000201020005010100020103000101000002 -01000003010000d20602010006000000060a010006000000060902020101030101010202 -060301000e350b0000630100006301000063010000630100002201000610010006010100 -060000000600010006000100060001000600010006000100060001000600010006000000 -0623010006030202010103030101020206070d010057010000290100003c010000d20601 -010006000000060c010006000000060802020101030101010202060301000e0109320b01 -0063010000630100006301000063010000220100060f0100060301000600000006000000 -060000000600000006000000060000000600000006000000062401000603020201010303 -0101020206070d010058010100250101003b010100d30602010006000000060a01000600 -0000060902020101030101010202060301000e0109320b01006301000063010000630100 -0063010000220100060f01000602010006000000060c0100060000000623010006030202 -010103030101020206070d0100ff00940601010006000000060c01000600000006080202 -0101030101010202060301000e01091301000905010009160b0100630100006301000063 -01000063010000220100060f01000603010006000000060a010006000000062401000603 -0202010103030101020206070d0100ff00940602010006000000060a0100060000000609 -02020101030101010202060301000e01091101020903010209160b010016010200050100 -00420100002b010200340100006301000063010000220100060e01000603010006000000 -060c0100060000000623010006030202010103030101020206070d0100ff009406010100 -06000000060c010006000000060802020101030101010202060301000e01091301000905 -010009160b010018010000490100002d010000340100006301000063010000220100060e -01000604010006000000060a010006000000062401000603020201010303010102020607 -0d0100ff00940602010006000000060a0100060000000609020201010301010102020603 -01000e01091301000905010009160b010007010100000100000301020005010000030102 -0002010000000101003b0100000701000002010000010100000001010002010000000101 -00030102000301020005010000030102002d0100006301000063010000220100060e0100 -0603010006000000060c0100060000000623010006030202010103030101020206070d01 -005801010055010100e10601010006000000060c01000600000006080202010103010101 -0202060301000e01091301000905010009160b0100070100000001000000010000010100 -0002010000040100000501000002010100010100003a0100000701000002010000010101 -000101000001010100010100000101000002010000010100000201000004010000020100 -00020100002c01000063010000630100002201000614010006000000060a010006000000 -0624010006030202010103030101020206070d01005701000059010000e0060201000600 -0000060a010006000000060902020101030101010202060301000e010913010009050100 -09160b010007010000000100000001000005010000040100000501000002010000020100 -003a01000007010000020100000101000002010000010100000201000001010000090100 -0004010000060100002c01000063010000630100002201000613010006000000060c0100 -060000000623010006030202010103030101020206070d01000f0103001b010000260100 -004401000013010000e00601010006000000060c01000600000006080202010103010101 -0202060301000e01091301000905010009160b0100070100000001000000010000020103 -00040100000501000002010000020100003a010000070100000201000001010000020100 -000101000002010000020102000301030004010000030103002c01000063010000630100 -002201000614010006000000060a01000600000006240100060302020101030301010202 -06070d01000f0100000201000019010100260100004401000013010000e0060201000600 -0000060a010006000000060902020101030101010202060301000e010913010009050100 -09160b010007010000000100000001000001010000020100000401000005010000020100 -00020100003a010000070100000201000001010000020100000101000002010000050100 -0001010000020100000401000002010000020100002c0100006301000063010000220100 -0613010006000000060c0100060000000623010006030202010103030101020206070d01 -000f010000020100000201020002010000020100000a0100000001000003010100200100 -000401020002010000020100000201020009010000020100000201020003010200030102 -00030102000201040002010200020100000001010004010000e00601010006000000060c -010006000000060802020101030101010202060301000e01091101040901010409140b01 -000701000000010000000100000101000002010000040100000501000002010000020100 -003a01000007010000010101000101010001010000010101000101000001010000020100 -0001010000020100000401000002010000020100002c0100006301000063010000220100 -0614010006000000060a0100060000000624010006030202010103030101020206070d01 -000f01000002010000010100000201000001010000020100000901000001010000030101 -002001000003010000020100000101000002010000010100000201000008010000020100 -000101000002010000010100000201000001010000020100000101000002010000030100 -000301000002010000010101000101000003010000e00602010006000000060a01000600 -0000060902020101030101010202060301000e0109320b01000701000000010000000100 -0002010300040100000501000002010000020100003a0100000801010000010000010100 -00000101000201000000010100030102000301030004010000030103002c010000630100 -00630100002201000613010006000000060c010006000000062301000603020201010303 -0101020206070d01000f0103000201000002010000010100000001000000010000080100 -000201000024010100040100000201000001010000020100000501000008010000020100 -000501000001010000090100000101000007010000070100000101000002010000040101 -00de0601010006000000060c010006000000060802020101030101010202060301000e01 -09320b0100630100000e010000050100004c010000630100006301000022010006140100 -06000000060a0100060000000624010006030202010103030101020206070d01000f0100 -000101000002010000020100000101000000010000000100000801000002010000260100 -000301040002010000000100000301030009010000000100000301030002010200030103 -00020102000401000004010300010100000201000003010000e00602010006000000060a -010006000000060902020101030101010202060301000e0109320b0100630100000e0100 -00050100004c010000630100006301000022010006130100060000000600010006000100 -060001000600010006000100060001000600010006000000062301000603020201010303 -0101020206070d01000f0100000201000001010000020100000101000000010000000100 -000801050025010000030100000601000000010000020100000201000009010000000100 -000201000002010000050100000101000002010000050100000301000003010000020100 -00010100000201000003010000e00601010006000000060c010006000000060802020101 -030101010202060301000e0109320b0100630100000e010000050100004c010000630100 -006301000022010006140100060001000600010006000100060001000600010006000100 -06000100060000000624010006030202010103030101020206070d01000f010000020100 -0001010000020100000101000000010000000100000c0100000301010020010000030100 -000201000003010000030100000201000003010100040100000301000002010000010100 -000201000001010000020100000101000002010000030100000301000002010000010100 -000201000003010000e00602010006000000060a01000600000006090202010103010101 -0202060301000e0109320b01006301000063010000630100006301000022010006130100 -0600040e060000000623010006030202010103030101020206070d01000f010000020100 -000201020003010000000100000d01000003010100200100000401020004010000040103 -000301010004010000040103000201020003010300020102000501010002010300010100 -000201000003010000e00601010006000000060c01000600000006080202010103010101 -0202060301000e0109320b01006301000063010000630100006301000022010006140100 -040e00000624010006030202010103030101020206070d0100570100001b0100003c0100 -00e00602010006000000060a010006000000060902020101030101010202060301000e01 -0b340063010000630100006301000063010000220100061301000600040e060000000623 -010006030202010103030101020206070d010058010100170101003b010100e106010100 -06000000060c010006000000060802020101030101010202060301000e000b3501ff01b7 -06140100040e00000624010006030202010103030101020206070d0100ff009406020100 -06000000060a010006000000060902020101030101010202060301000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600006301000063 -0100006301000063010000220100061301000600040e0600000006230100060302020101 -03030101020206070d0100ff00940601010006000000060c010006000000060802020101 -030101010202060301000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000100006301000063010000630100006301000022010006140100 -040e00000624010006030202010103030101020206070d0100ff00940602010006000000 -060a01000600000006090202010103010101020206030100060000000632010006000063 -010000630100006301000063010000220100061301000600040e06000000062301000603 -0202010103030101020206070d0100000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000020601010006000000 -060c01000600000006080202010103010101020206030100000006340100006301000063 -010000630100006301000022010006140100040e00000624010006030202010103030101 -020206070d01045801010478010104bc00010602010006000000060a0100060000000609 -020201010301010102020603010006000000061301000604010206150100060000630100 -00630100006301000063010000220100061301000600040e060000000623010006030202 -010103030101020206070d01000004560100047c010004ba010000010601010006000000 -060c01000600000006080202010103010101020206030100000006120102060301000602 -010006150100001f01000042010000120100001701020034010000630100006301000022 -010006140100040e00000624010006030202010103030101020206070d01040f01030417 -01040426010004060100041a010104040100043c01000413010004bb0001060201000600 -0000060a0100060000000609020201010301010102020603010006000000061301000603 -010006020100061401000600006301000012010000190100003401000063010000630100 -00220100061301000600040e060000000623010006030202010103030101020206070d01 -0000040e01000402010004160100040201000426010004210100044401000413010004ba -010000010601010006000000060c01000600000006080202010103010101020206030100 -000006140100060301000602010006150100000701010000010000030102000201000000 -01010003010200030102003b010000080102000301010000010000020102000201000000 -010100020100000001010005010000030102000201000000010100260100006301000063 -01000022010006140100040e00000624010006030202010103030101020206070d01040f -010004020100040201020402010004020100040c01000403010104200100040401020403 -010204030102040301020404010004040102040201000400010104030102040901000402 -010004020102040301020403010204030102040201040402010204020100040001010404 -010004bb00010602010006000000060a0100060000000609020201010301010102020603 -010006000000061301000606010006150100060000070100000001000000010000010100 -000201000001010100010100000401000002010000020100003a01000007010000020100 -000101000001010100010100000201000001010100010100000101010001010000040100 -000201000002010000010101000101000025010000630100006301000022010006130100 -0600040e060000000623010006030202010103030101020206070d010000040e01000402 -010004010100040201000401010004020100040b01000404010104200100040601000402 -010004020100040101000402010004010100040201000401010404040100040201010401 -010004010100040201000408010004020100040101000402010004010100040201000401 -010004020100040101000402010004030100040301000402010004010101040101000403 -010004ba010000010601010006000000060c010006000000060802020101030101010202 -060301000000061401000605010006170100000701000000010000000100000501000001 -01000008010000060100003a010000070100000201000001010000020100000101000002 -010000010100000201000001010000020100000401000006010000010100000201000025 -010000630100006301000022010006140100040e00000624010006030202010103030101 -020206070d01040f01030402010004020100040101000400010004000100040b01000425 -010104070100040201000402010004010100040501000402010004030100040601000402 -010004020100040101000402010004080100040201000405010004010100040901000401 -0100040701000407010004010100040201000404010104b900010602010006000000060a -010006000000060902020101030101010202060301000600000006130100060401000617 -0100060000070100000001000000010000020103000101000008010000030103003a0100 -000701000002010000010100000201000001010400010100000201000001010000020100 -000401000003010300010100000201000025010000630100006301000022010006130100 -0600040e060000000623010006030202010103030101020206070d010000040e01000401 -01000402010004020100040101000400010004000100040b010004270100040601000402 -010004020100040201020402010404030100040601000402010004020100040101040409 -010004000100040301030402010204030103040201020404010004040103040101000402 -01000403010004ba010000010601010006000000060c0100060000000608020201010301 -010102020603010000000614010006030100060201000615010000070100000001000000 -0100000101000002010000010100000801000002010000020100003a0100000701000002 -010000010100000201000001010000050100000201000001010000020100000401000002 -01000002010000010100000201000025010000630100006301000022010006140100040e -00000624010006030202010103030101020206070d01040f010004020100040101000402 -0100040101000400010004000100040a0100042801000406010004020100040201000405 -0100040101000407010004060100040201000402010004010100040d0100040001000402 -010004020100040501000401010004020100040501000403010004030100040201000401 -0100040201000403010004bb00010602010006000000060a010006000000060902020101 -030101010202060301000600000006110104060101040614010006000007010000000100 -00000100000101000002010000010100000801000002010000020100003a010000070100 -000201000001010000010101000101000002010000010100000201000001010100010100 -000401000002010000020100000101000002010000250100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206070d010000040e -0100040201000401010004020100040101000400010004000100040a0100040501010420 -010004060100040201000402010004010100040201000401010004020100040301000406 -010004020100040201000401010004020100040301010404010004030100040201000401 -010004020100040101000402010004010100040201000403010004030100040201000401 -0100040201000403010004ba010000010601010006000000060c01000600000006080202 -010103010101020206030100000006340100000701000000010000000100000201030001 -01000008010000030103003a010000080102000301010000010000020102000201000002 -010000010100000001010005010000030103000101000002010000250100006301000063 -01000022010006140100040e00000624010006030202010103030101020206070d01040f -010004020100040201020403010004000100040b01000405010104200100040601000403 -010204030102040301020404010004060100040201000402010004020102040401010404 -010004040103040201020403010304020102040501010402010304010100040201000403 -010004bb00010602010006000000060a0100060000000609020201010301010102020603 -0100060000000632010006000063010000230100003e0100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206070d0100000456 -01000406010004360100043c010004ba010000010601010006000000060c010006000000 -060802020101030101010202060301000000063401000063010000230100003e01000063 -0100006301000022010006140100040e0000062401000603020201010303010102020607 -0d0104580101040101000401010004340101043b010104bc00010602010006000000060a -010006000000060902020101030101010202060301000600000006320100060000630100 -00230100003e0100006301000063010000220100061301000600040e0600000006230100 -06030202010103030101020206070d010000045c010104ff043101000001060101000600 -0000060c0100060000000608020201010301010102020603010000000634010000630100 -0063010000630100006301000022010006140100040e0000062401000603020201010303 -0101020206070d0104ff049200010602010006000000060a010006000000060902020101 -030101010202060301000600000006320100060000630100006301000063010000630100 -00220100061301000600040e060000000623010006030202010103030101020206070d01 -000004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010000010601010006000000060c01000600000006080202 -010103010101020206030100000006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010000630100006301000063010000630100002201000614 -0100040e00000624010006030202010103030101020206070d0100ff0094060201000600 -0000060a0100060000000609020201010301010102020603010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -0100060001000600010006000100060001000600010006000100060001ff01b706130100 -0600040e060000000623010006030202010103030101020206070d010058010100710101 -00c50601010006000000060c010006000000060802020101030101010202060301000e36 -006301000063010000630100006301000022010006140100040e00000624010006030202 -010103030101020206070d01005701000075010000c40602010006000000060a01000600 -0000060902020101030101010202060301000e350b000063010000630100006301000063 -010000220100061301000600040e06000000062301000603020201010303010102020607 -0d01000f0103001901000004010200200100000d01000009010000170100002d01000013 -010000c40601010006000000060c01000600000006080202010103010101020206030100 -0e0109320b01006301000063010000630100006301000022010006140100040e00000624 -010006030202010103030101020206070d01000f01000002010000170101000301000002 -0100001f01000018010000170100002d01000013010000c40602010006000000060a0100 -06000000060902020101030101010202060301000e0109320b0100630100006301000063 -01000063010000220100061301000600040e060000000623010006030202010103030101 -020206070d01000f01000002010000020102000201000002010000080100000001000003 -010000020100000301010019010000030100000001010003010200030102000201000000 -010100030102000201000000010100030101000001000008010000020100000201020003 -01020003010200030102000201040002010200020100000001010004010000c406010100 -06000000060c010006000000060802020101030101010202060301000e01091301000904 -010209150b01006301000063010000630100006301000022010006140100040e00000624 -010006030202010103030101020206070d01000f01000002010000010100000201000001 -010000020100000a01000003010000020100000301010019010000030101000101000004 -010000020100000201000001010100010100000101000002010000010101000101000001 -010000010101000801000002010000010100000201000001010000020100000101000002 -0100000101000002010000030100000301000002010000010101000101000003010000c4 -0602010006000000060a010006000000060902020101030101010202060301000e010911 -0102090301000902010009140b0100170100004a01000007010000300102002601000063 -01000063010000220100061301000600040e060000000623010006030202010103030101 -020206070d01000f01030002010000020100000101000000010000000100000a01000004 -0102001e0101000401000008010000020100000501000002010000050100000101000005 -010000020100000801000002010000050100000101000009010000010100000701000007 -010000010100000201000004010100c20601010006000000060c01000600000006080202 -0101030101010202060301000e01091301000907010009140b0100170100004a01000007 -0100003201000026010000630100006301000022010006140100040e0000062401000603 -0202010103030101020206070d01000f0100000101000002010000020100000101000000 -010000000100000a01000003010000020100001f01000003010000080100000201000005 -010000020100000201030001010000050100000201000009010000000100000301030002 -01020003010300020102000401000004010300010100000201000003010000c406020100 -06000000060a010006000000060902020101030101010202060301000e01091301000907 -010009140b01000701010000010000030102000201040002010200420100000701000000 -010100020100000001010003010200020101000001000002010100000100000301020002 -010000000101000501000003010200020100000001010018010000630100006301000022 -0100061301000600040e060000000623010006030202010103030101020206070d01000f -0100000201000001010000020100000101000000010000000100000a0100000301000002 -0100001f0100000301000008010000020100000501000002010000010100000201000001 -010000050100000201000009010000000100000201000002010000050100000101000002 -01000005010000030100000301000002010000010100000201000003010000c406010100 -06000000060c010006000000060802020101030101010202060301000e01091301000905 -010109150b01000701000000010000000100000101000002010000030100000301000002 -010000410100000701010001010000010101000101000001010000020100000101000000 -010000000100000101000000010000000100000101000002010000010101000101000004 -010000020100000201000001010100010100001701000063010000630100002201000614 -0100040e00000624010006030202010103030101020206070d01000f0100000201000001 -010000020100000101000000010000000100000a01000003010000020100000301010019 -010000030100000801000002010000020100000101000002010000010100000201000001 -010000050100000101010003010100040100000301000002010000010100000201000001 -010000020100000101000002010000030100000301000002010000010100000201000003 -010000c40602010006000000060a01000600000006090202010103010101020206030100 -0e01091301000907010009140b0100070100000001000000010000050100000301000003 -010000450100000701000002010000010100000501000002010000010100000001000000 -010000010100000001000000010000050100000101000002010000040100000601000001 -01000002010000170100006301000063010000220100061301000600040e060000000623 -010006030202010103030101020206070d01000f01000002010000020102000301000000 -010000090104000201020004010100190100000301000008010000030102000201000002 -010000020103000101000006010100000100000301010004010000040103000201020003 -010300020102000501010002010300010100000201000003010000c40601010006000000 -060c010006000000060802020101030101010202060301000e0109130100090701000914 -0b0100070100000001000000010000020103000301000004010200420100000701000002 -010000010100000501000002010000010100000001000000010000010100000001000000 -010000020103000101000002010000040100000301030001010000020100001701000063 -0100006301000022010006140100040e0000062401000603020201010303010102020607 -0d010057010000370100003c010000c40602010006000000060a01000600000006090202 -0101030101010202060301000e0109130100090301000902010009140b01000701000000 -010000000100000101000002010000030100000701000041010000070100000201000001 -010000050100000201000001010000000100000001000001010000000100000001000001 -010000020100000101000002010000040100000201000002010000010100000201000017 -0100006301000063010000220100061301000600040e0600000006230100060302020101 -03030101020206070d010058010100330101003b010100c50601010006000000060c0100 -06000000060802020101030101010202060301000e01091101040902010209150b010007 -010000000100000001000001010000020100000301000003010000020100004101000007 -010100010100000101000005010000020100000101000000010000000100000101000000 -010000000100000101000002010000010101000101000004010000020100000201000001 -0100000201000017010000630100006301000022010006140100040e0000062401000603 -0202010103030101020206070d0100ff00940602010006000000060a0100060000000609 -02020101030101010202060301000e0109320b0100070100000001000000010000020103 -000401010002010200420100000701000000010100020100000601020002010000000100 -000001000001010000000100000001000002010300010100000001010005010000030103 -000101000002010000170100006301000063010000220100061301000600040e06000000 -0623010006030202010103030101020206070d0100ff00940601010006000000060c0100 -06000000060802020101030101010202060301000e0109320b0100630100003101000030 -010000630100006301000022010006140100040e00000624010006030202010103030101 -020206070d0100ff00940602010006000000060a01000600000006090202010103010101 -0202060301000e0109320b01006301000031010000300100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206070d0100ff0094 -0601010006000000060c010006000000060802020101030101010202060301000e010932 -0b0100630100003101000030010000630100006301000022010006140100040e00000624 -010006030202010103030101020206070d01005801010071010100c50602010006000000 -060a010006000000060902020101030101010202060301000e0109320b01006301000063 -0100006301000063010000220100061301000600040e0600000006230100060302020101 -03030101020206070d01005701000075010000c40601010006000000060c010006000000 -060802020101030101010202060301000e0109320b010063010000630100006301000063 -01000022010006140100040e00000624010006030202010103030101020206070d01000f -0103001801020004010100200100006001000013010000c40602010006000000060a0100 -06000000060902020101030101010202060301000e010b34006301000063010000630100 -0063010000220100061301000600040e0600000006230100060302020101030301010202 -06070d01000f01000002010000160100000201000002010000010100001f010000600100 -0013010000c40601010006000000060c0100060000000608020201010301010102020603 -01000e000b3501ff01b706140100040e0000062401000603020201010303010102020607 -0d01000f010000020100000201020002010000020100000c010000020100000101000003 -010100190100000401020002010000020100000201020003010200020100000001010002 -010000000101000301020009010000020100000201020003010200030102000301020002 -01040002010200020100000001010004010000c40602010006000000060a010006000000 -060902020101030101010202060301000e36006301000063010000630100006301000022 -0100061301000600040e060000000623010006030202010103030101020206070d01000f -01000002010000010100000201000001010000020100000c010000020100000101000003 -010100190100000301000002010000010100000201000001010000020100000101000002 -010000010101000101000001010100010100000101000002010000080100000201000001 -010000020100000101000002010000010100000201000001010000020100000301000003 -01000002010000010101000101000003010000c40601010006000000060c010006000000 -060802020101030101010202060301000e350b0000630100006301000063010000630100 -0022010006140100040e00000624010006030202010103030101020206070d01000f0103 -0002010000020100000101000000010000000100000b01000003010000010100001d0101 -000401000005010000020100000101000009010000010100000201000001010000020100 -000101000002010000080100000201000005010000010100000901000001010000070100 -0007010000010100000201000004010100c20602010006000000060a0100060000000609 -02020101030101010202060301000e0109320b0100630100006301000063010000630100 -00220100061301000600040e060000000623010006030202010103030101020206070d01 -000f0100000101000002010000020100000101000000010000000100000a010000040100 -00010100001f010000040102000201000002010000020102000301030001010000020100 -000101000002010000010104000901000000010000030103000201020003010300020102 -000401000004010300010100000201000003010000c40601010006000000060c01000600 -0000060802020101030101010202060301000e0109320b01006301000063010000630100 -006301000022010006140100040e00000624010006030202010103030101020206070d01 -000f01000002010000010100000201000001010000000100000001000009010000050100 -00010100001f010000070100000101000002010000050100000101000002010000010100 -00020100000101000002010000010100000d010000000100000201000002010000050100 -000101000002010000050100000301000003010000020100000101000002010000030100 -00c40602010006000000060a010006000000060902020101030101010202060301000e01 -091301000906010009150b01006301000063010000630100006301000022010006130100 -0600040e060000000623010006030202010103030101020206070d01000f010000020100 -000101000002010000010100000001000000010000080100000601000001010000030101 -001901000003010000020100000101000001010100010100000201000001010000020100 -000101000002010000010100000201000001010000020100000301010004010000030100 -000201000001010000020100000101000002010000010100000201000003010000030100 -0002010000010100000201000003010000c40601010006000000060c0100060000000608 -02020101030101010202060301000e01091101020905010109150b010011010000500100 -001e0100001801000029010000630100006301000022010006140100040e000006240100 -06030202010103030101020206070d01000f010000020100000201020003010000000100 -000901040003010100040101001901000004010200030101000001000002010200030103 -000101000002010000010100000201000002010200040101000401000004010300020102 -0003010300020102000501010002010300010100000201000003010000c4060201000600 -0000060a010006000000060902020101030101010202060301000e010913010009040100 -0900010009150b0100630100001e01000018010000290100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206070d0100570100 -00370100003c010000c40601010006000000060c01000600000006080202010103010101 -0202060301000e0109130100090401000900010009150b01000701000000010100030102 -000201000000010100030102004201000008010100000100000101000002010000020102 -000201040002010200020100000201000002010200020100000001010003010200020100 -0000010100030101000001000010010000630100006301000022010006140100040e0000 -0624010006030202010103030101020206070d010058010100330101003b010100c50602 -010006000000060a010006000000060902020101030101010202060301000e0109130100 -090301000901010009150b01000701010001010000040100000201010001010000010100 -000201000041010000070100000101010001010000020100000101000002010000030100 -000301000002010000010100000201000001010000020100000101010001010000010100 -000201000001010100010100000101000001010100100100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206070d0100ff0094 -0601010006000000060c010006000000060802020101030101010202060301000e010913 -0100090201000902010009150b0100070100000201000004010000020100000201000005 -010000410100000701000002010000010100000201000001010000070100000701000001 -010000020100000101000005010000020100000101000002010000010100000501000002 -01000010010000630100006301000022010006140100040e000006240100060302020101 -03030101020206070d0100ff00940602010006000000060a010006000000060902020101 -030101010202060301000e01091301000902010509140b01000701000002010000040100 -000201000002010000020103004101000007010000020100000101000002010000020102 -000401000004010300020100000001000003010200020100000201000001010400010100 -000501000002010000100100006301000063010000220100061301000600040e06000000 -0623010006030202010103030101020206070d0100ff00940601010006000000060c0100 -06000000060802020101030101010202060301000e01091301000906010009150b010007 -010000020100000401000002010000020100000101000002010000410100000701000002 -010000010100000201000005010000030100000301000002010000020100000001000006 -010000010100000201000001010000050100000501000002010000100100006301000063 -01000022010006140100040e00000624010006030202010103030101020206070d0100ff -00940602010006000000060a010006000000060902020101030101010202060301000e01 -091101040903010209140b01000701000002010000040100000201000002010000010100 -000201000041010000070100000101010001010000010101000101000002010000030100 -000301000002010000030100000301000002010000010101000101000001010000020100 -00010100000501000001010100100100006301000063010000220100061301000600040e -060000000623010006030202010103030101020206070d0100ff00940601010006000000 -060c010006000000060802020101030101010202060301000e0109320b01000701000002 -010000040100000201000002010000020103004101000008010100000100000201010000 -010000020102000501010002010300030100000401020002010000000101000301020002 -010000060101000001000010010000630100006301000022010006140100040e00000624 -010006030202010103030101020206070d0100ff00940602010006000000060a01000600 -0000060902020101030101010202060301000e0109320b0100630100000b010000440100 -00100100006301000063010000220100061301000600040e060000000623010006030202 -010103030101020206070d0100ff00940601010006000000060c01000600000006080202 -0101030101010202060301000e0109320b01006301000007010000020100004001000002 -01000010010000630100006301000022010006140100040e000006240100060302020101 -03030101020206070d0100ff00940602010006000000060a010006000000060902020101 -030101010202060301000e0109320b010063010000080102004201020011010000630100 -0063010000220100061301000600040e0600000006230100060302020101030301010202 -06070d0100ff00940601010006000000060c010006000000060802020101030101010202 -060301000e0109320b01006301000063010000630100006301000022010006140100040e -00000624010006030202010103030101020206070d0100ff00940602010006000000060a -010006000000060902020101030101010202060301000e0109320b010063010000630100 -006301000063010000220100061301000600040e06000000062301000603020201010303 -0101020206070d0100ff00940601010006000000060c0100060000000608020201010301 -01010202060301000e010b34006301000063010000630100006301000022010006140100 -040e00000624010006030202010103030101020206070d0100ff00940602010006000000 -060a010006000000060902020101030101010202060301000e000b3501ff01b706130100 -0600040e060000000623010006030202010103030101020206070d0100ff009406010100 -06000000060c010006000000060802020101030101010202060301000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600006301000063 -010000630100006301000022010006140100040e00000624010006030202010103030101 -020206070d0100ff00940602010006000000060a01000600000006090202010103010101 -020206030100000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -06000000060001000063010000630100006301000063010000220100061301000600040e -060000000623010006030202010103030101020206070d0100ff00940601010006000000 -060c01000600000006080202010103010101020206030100060000000632010006000063 -01000063010000630100006301000022010006140100040e000006240100060302020101 -03030101020206070d0100ff00940602010006000000060a010006000000060902020101 -030101010202060301000000063401000063010000630100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206070d0100ff0094 -0601010006000000060c0100060000000608020201010301010102020603010006000000 -061301000603010406140100060000630100006301000063010000630100002201000614 -0100040e00000624010006030202010103030101020206070d0100ff0094060201000600 -0000060a0100060000000609020201010301010102020603010000000612010206030100 -06190100000f010200030102004901000007010000230100000b010200030102001f0100 -006301000063010000220100061301000600040e06000000062301000603020201010303 -0101020206070d0100ff00940601010006000000060c0100060000000608020201010301 -010102020603010006000000061301000603010006180100060000110100000501000049 -01000007010000230100000d010000050100001f01000063010000630100002201000614 -0100040e00000624010006030202010103030101020206070d0100ff0094060201000600 -0000060a0100060000000609020201010301010102020603010000000614010006030100 -061901000008010200050100000501000003010200420100000701000000010100030102 -000201000000010100020100000001010003010200020104000101000002010000040100 -00050100001f0100006301000063010000220100061301000600040e0600000006230100 -06030202010103030101020206070d0100ff009406010100060000000600010006000100 -060001000600010006000100060001000600010006000000060802020101030101010202 -060301000600000006130100060301030615010006000007010000020100000401000005 -010000020100000201000041010000070101000101000001010000020100000101010001 -010000010101000101000001010000020100000301000003010000020100000401000005 -0100001f010000630100006301000022010006140100040e000006240100060302020101 -03030101020206070d0100ff009406020100060001000600010006000100060001000600 -010006000100060001000600000006090202010103010101020206030100000006140100 -060701000615010000070100000201000004010000050100000201000002010000410100 -000701000002010000010100000201000001010000050100000201000001010000070100 -00030100000201000004010000050100001f010000630100006301000022010006130100 -0600040e060000000623010006030202010103030101020206070d0100ff009406010100 -061000000608020201010301010102020603010006000000061301000607010006140100 -060000070100000201000004010000050100000201040041010000070100000201000001 -010000020100000101000005010000020100000201020004010000030100000201000004 -010000050100001f010000630100006301000022010006140100040e0000062401000603 -0202010103030101020206070d0100ff0094060201000600000006000000060000000600 -000006000000060000000600000006000000060902020101030101010202060301000000 -061401000602010006030100061501000007010000020100000401000005010000020100 -004501000007010000020100000101000002010000010100000501000002010000050100 -0003010000030100000201000004010000050100001f0100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206070d0100ff0094 -060101000602000006000000060000000600000006000000060000000600010006000000 -060802020101030101010202060301000600000006110104060101030615010006000007 -010000020100000401000005010000020100000201000041010000070100000201000001 -010000020100000101000005010000020100000101000002010000030100000301000001 -01010004010000050100001f010000630100006301000022010006140100040e00000624 -010006030202010103030101020206070d0100ff00940602010006000000060a01000600 -000006090202010103010101020206030100000006340100000801020005010000050100 -000301020042010000070100000201000002010200020100000501000002010000020102 -0005010100020101000001000004010000050100001f0100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206070d0100ff0094 -060101000602000006080100060200000608020201010301010102020603010006000000 -063201000600006301000063010000630100006301000022010006140100040e00000624 -010006030202010103030101020206070d0100ff00940602010006020000060601000602 -000006090202010103010101020206030100000006340100006301000063010000630100 -0063010000220100061301000600040e0600000006230100060302020101030301010202 -06070d0100ff009406010100060400000606010006020000060802020101030101010202 -060301000600000006320100060000630100006301000063010000630100002201000614 -0100040e00000624010006030202010103030101020206070d0100ff0094060201000602 -000006060100060200000609020201010301010102020603010000000634010000630100 -00630100006301000063010000220100061301000600040e060000000623010006030202 -010103030101020206070d0100ff00940601010006040000060401000604000006080202 -010103010101020206030100060000000632010006000063010000630100006301000063 -01000022010006140100040e00000624010006030202010103030101020206070d0100ff -009406020100060400000602010006040000060902020101030101010202060301000000 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -0063010000630100006301000063010000220100061301000600040e0600000006230100 -06030202010103030101020206070d0100ff009406010100060600000602010006040000 -060802020101030101010202060301000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -06000100060001000600010006000100060001ff01b706140100040e0000062401000603 -0202010103030101020206070d0100ff0094060201000604000006020100060400000609 -02020101030101010202060301000e360063010000630100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206070d0100ff0094 -06010100060600000600010006060000060802020101030101010202060301000e350b00 -006301000063010000630100006301000022010006140100040e00000624010006030202 -010103030101020206070d0100ff00940602010006060100060600000609020201010301 -01010202060301000e0109320b0100630100006301000063010000630100002201000613 -01000600040e060000000623010006030202010103030101020206070d0100ff00940601 -01000608010006060000060802020101030101010202060301000e0109320b0100630100 -0063010000630100006301000022010006140100040e0000062401000603020201010303 -0101020206070d0000ff0095060201000606010006060000060902020101030101010202 -060301000e01091301000905010209140b01006301000063010000630100006301000022 -0100061301000600040e060000000623010006030202010103030101020206ff06a00100 -060000000600000006000000060000000600000006000000060000000600000006000000 -060802020101030101010202060301000e01091101020904010009170b0100170100000d -010000020100003701000008010200050100000301020005010000090100000d01020026 -010000630100006301000022010006140100040e00000624010006030202010103030101 -020206ff06a1000006000000060000000600000006000000060000000600000006000000 -06000000060902020101030101010202060301000e01091301000903010009180b010017 -01000011010000370100000a0100000c010000100100000f010000260100006301000063 -010000220100061301000600040e06000000062301000603020201010303010102020606 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000618 -02020101030101010202060301000e01091301000903010009180b010007010000000101 -0003010200020104000101000000010100030102000201000001010000340100000a0100 -000301020005010000030102000301020002010000000101000301020005010000020101 -000001000003010200020100000001010011010000630100006301000022010006140100 -040e00000624010006030202010103030101020206050100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000000061702020101030101010202 -060301000e01091301000903010309150b01000701010001010000010100000201000003 -0100000301010001010000040100000201000000010000350100000a0100000501000005 -010000050100000201000002010000010101000101000001010000020100000401000002 -010000000100000001000001010000020100000101010001010000100100006301000063 -010000220100061301000600040e06000000062301000603020201010303010102020606 -010006100000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006020000060c0000061802020101030101010202060301000e010913010009030100 -0902010009140b0100070100000201000005010000030100000301000008010000020101 -00360100000a010000050100000501000005010000020100000201000001010000020100 -000101000002010000040100000201000000010000000100000101000002010000010100 -000201000010010000630100006301000022010006140100040e00000624010006030202 -010103030101020206050100060c00000600010006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -0600000006000000060000000600000006000000060001000600000006000000060c0000 -061702020101030101010202060301000e0109130100090301000902010009140b010007 -010000020100000201030003010000030100000801000002010100360100000a01000005 -010000050100000501000002010400010100000201000001010000020100000401000002 -010000000100000001000001010400010100000201000010010000630100006301000022 -0100061301000600040e060000000623010006030202010103030101020206060100060a -0000060001000602000006ff067601000602000006000000060000000608000006180202 -0101030101010202060301000e0109130100090301000902010009140b01000701000002 -01000001010000020100000301000003010000080100000201000000010000350100000a -010000050100000501000005010000020100000501000002010000010100000201000004 -010000020100000001000000010000010100000501000002010000100100006301000063 -01000022010006140100040e000006240100060302020101030301010202060501000608 -000006000000060201000600000006ff0678010006000000060200000600000006080000 -061702020101030101010202060301000e01091101040902010209150b01000701010001 -01000001010000020100000301000003010000080100000201000001010000340100000a -010000050100000501000005010000020100000201000001010000020100000101000002 -010000040100000201000000010000000100000101000002010000010100000201000010 -0100006301000063010000220100061301000600040e0600000006230100060302020101 -030301010202060601000606000006000000060201000602000006ff0676010006020000 -060400000600000006040000061802020101030101010202060301000e0109320b010007 -01000000010100030103000401010001010000080100000201000002010000330100000a -010000050100000501000005010000030102000201000002010000020102000501000002 -010000000100000001000002010200020100000201000010010000630100006301000022 -010006140100040e00000624010006030202010103030101020206050100060400000600 -0000060601000600000006ff067801000600000006060000060000000604000006170202 -0101030101010202060301000e0109320b0100070100005a0100001f0100004201000063 -01000063010000220100061301000600040e060000000623010006030202010103030101 -0202060601000602000006000000060601000602000006ff067601000602000006080000 -0600000006000000061802020101030101010202060301000e0109320b0100070100005a -0100001c0100000101000042010000630100006301000022010006140100040e00000624 -0100060302020101030301010202060501000600010006000100060a01000600000006ff -0678010006000000060a0100060001000600000006170202010103010101020206030100 -0e0109320b0100070100005a0100001d0101004301000063010000630100002201000613 -01000600040e060000000623010006030202010103030101020206060100060201000600 -0100060601000602000006ff067601000602000006080100060001000600000006180202 -0101030101010202060301000e0109320b01006301000063010000630100006301000022 -010006140100040e00000624010006030202010103030101020206050100060401000600 -0100060601000600000006ff067801000600000006060100060001000604000006170202 -0101030101010202060301000e0109320b01006301000063010000630100006301000022 -0100061301000600040e0600000006230100060302020101030301010202060601000606 -010006000100060201000602000006ff0676010006020000060401000600010006040000 -061802020101030101010202060301000e010b3400630100006301000063010000630100 -0022010006140100040e0000062401000603020201010303010102020605010006080100 -06000100060201000600000006ff06780100060000000602010006000100060800000617 -02020101030101010202060301000e000b3501ff01b7061301000600040e060000000623 -010006030202010103030101020206060100060a0100060001000602000006ff06760100 -060200000600010006000100060800000618020201010301010102020603010010360063 -01000063010000630100006301000022010006140100040e000006240100060302020101 -03030101020206050100060c010006000100060000000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600000006000100060c00000617 -020201010301010102020603010010350f00006301000063010000630100006301000022 -0100061301000600040e0600000006230100060302020101030301010202060601000610 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000602 -0100060c000006180202010103010101020206030100100108320f010063010000630100 -00630100006301000022010006140100040e000006240100060302020101030301010202 -060501000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -0600000006170202010103010101020206030100100108320f0100630100006301000063 -01000063010000220100061301000600040e060000000623010006030202010103030101 -020206060000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -0000061802020101030101010202060301001001081301000803010408140f0100630100 -0063010000630100006301000022010006140100040e0000062401000603020201010303 -0101020206ff06bc02020101030101010202060301001001081101020803010008020100 -08140f01006301000010010000200102002d010000630100006301000022010006130100 -0600040e060000000623010006030202010103030101020206ff06bc0202010103010101 -0202060301001001081301000806010008150f01006301000010010000220100002d0100 -00630100006301000022010006140100040e000006240100060302020101030301010202 -06ff06bc02020101030101010202060301001001081301000806010008150f0100070100 -000001010003010200020100000001010049010000080102000201040001010000020100 -000101000000010100030102000201000000010100050100000301020002010000000101 -001f0100006301000063010000220100061301000600040e060000000623010006030202 -010103030101020206ff06bc020201010301010102020603010010010813010008060100 -08150f010007010100010100000101000002010000010101000101000048010000070100 -000201000003010000030100000201000001010100010100000101000002010000010101 -000101000004010000020100000201000001010100010100001e01000063010000630100 -0022010006140100040e00000624010006030202010103030101020206ff06bc02020101 -030101010202060301001001081301000806010008150f01000701000002010000010100 -0002010000010100004c0100000701000007010000030100000201000001010000050100 -00020100000101000002010000040100000601000001010000020100001e010000630100 -0063010000220100061301000600040e0600000006230100060302020101030301010202 -06ff06bc02020101030101010202060301001001081301000805010008160f0100070100 -000201000001010400010100004c01000008010200040100000301000002010000010100 -00050104000101000002010000040100000301030001010000020100001e010000630100 -006301000022010006140100040e00000624010006030202010103030101020206ff06bc -02020101030101010202060301001001081301000805010008160f010007010000020100 -0001010000050100004c0100000b01000003010000030100000201000001010000050100 -00050100000201000004010000020100000201000001010000020100001e010000630100 -0063010000220100061301000600040e0600000006230100060302020101030301010202 -06ff06bc02020101030101010202060301001001081101040803010008160f0100070101 -00010100000101000002010000010100004c010000070100000201000003010000030100 -000101010001010000050100000201000001010100010100000401000002010000020100 -0001010000020100001e010000630100006301000022010006140100040e000006240100 -06030202010103030101020206ff06bc0202010103010101020206030100100108320f01 -00070100000001010003010200020100004c010000080102000501010002010100000100 -0001010000060102000201000000010100050100000301030001010000020100001e0100 -006301000063010000220100061301000600040e06000000062301000603020201010303 -0101020206ff06bc0202010103010101020206030100100108320f0100070100005a0100 -002a01000037010000630100006301000022010006140100040e00000624010006030202 -010103030101020206ff06bc0202010103010101020206030100100108320f0100070100 -005a0100002a010000370100006301000063010000220100061301000600040e06000000 -0623010006030202010103030101020206ff06bc02020101030101010202060301001001 -08320f0100070100005a0100002a01000037010000630100006301000022010006140100 -040e00000624010006030202010103030101020206ff06bc020201010301010102020603 -0100100108320f010063010000630100006301000063010000220100061301000600040e -060000000623010006030202010103030101020206ff06bc020201010301010102020603 -0100100108320f01006301000063010000630100006301000022010006140100040e0000 -0624010006030202010103030101020206ff06bc02020101030101010202060301001001 -0f340063010000630100006301000063010000220100061301000600040e060000000623 -010006030202010103030101020206ff06bc020201010301010102020603010010000f35 -01ff01b706140100040e00000624010006030202010103030101020206ff06bc02020101 -030101010202060301000e36006301000063010000630100006301000022010006130100 -0600040e060000000623010006030202010103030101020206ff06bc0202010103010101 -0202060301000e350b00006301000063010000630100006301000022010006140100040e -00000624010006030202010103030101020206ff06bc0202010103010101020206030100 -0e0109320b010063010000630100006301000063010000220100061301000600040e0600 -00000623010006030202010103030101020206410100060a010006ff066d020201010301 -01010202060301000e0109320b0100630100006301000063010000630100002201000614 -0100040e0000062401000603020201010303010102020607010206100100060801000612 -010006050100060c0100060d0101061a010006ff06400202010103010101020206030100 -0e01091301000904010209150b0100630100006301000063010000630100002201000613 -01000600040e06000000062301000603020201010303010102020606010006020100060f -0100061c010006050100060c0100060c0100061c010006ff064002020101030101010202 -060301000e0109110102090301000902010009140b01001101000009010000170100002c -0100002c01000035010000630100006301000022010006140100040e0000062401000603 -0202010103030101020206060100060d0102060201000600010106030102060301020603 -010206020104060201000605010206050100060b01000604010206020100060201000601 -010006000101060301010600010006ff064002020101030101010202060301000e010913 -0100090301000902010009140b01001c010000170100002c0100002c0100003501000063 -01000063010000220100061301000600040e060000000623010006030202010103030101 -020206060100060c01000602010006010101060101000604010006020100060201000601 -010006020100060301000604010006040100060201000604010006090104060101000602 -010006010100060201000601010106010100060101000601010106ff0640020201010301 -01010202060301000e0109130100090301000902010009140b0100070100000001010003 -01020003010200020100000001010003010200020100000001010003010100000100002c -010000070100000201000002010200030102000301020003010200020104000201020002 -0100000001010026010000630100006301000022010006140100040e0000062401000603 -020201010303010102020606010306090100060201000601010006020100060401000602 -0100060201000601010006070100060401000604010006080100060b0100060301000602 -010006010100060201000601010006020100060101000602010006ff0640020201010301 -01010202060301000e01091301000904010209150b010007010100010100000401000002 -010000020100000101010001010000010100000201000001010100010100000101000001 -0101002c0100000701000002010000010100000201000001010000020100000101000002 -010000010100000201000003010000030100000201000001010100010100002501000063 -01000063010000220100061301000600040e060000000623010006030202010103030101 -020206060100060201000608010006020100060101000602010006040100060201040601 -010006070100060401000605010206050100060b01000603010006020100060101000602 -01000601010006020100060101000602010006ff06400202010103010101020206030100 -0e0109130100090301000902010009140b01000701000008010000020100000501000002 -010000050100000101000005010000020100002c01000007010000020100000501000001 -010000090100000101000007010000070100000101000002010000250100006301000063 -01000022010006140100040e000006240100060302020101030301010202060601000602 -010006080100060201000601010006020100060401000602010006050100060701000604 -01000608010006040100060b010006030100060201000601010006020100060101000602 -0100060101000602010006ff064002020101030101010202060301000e01091301000903 -01000902010009140b010007010000080100000201000005010000020100000201030001 -01000005010000020100002c010000080100000001000003010300020102000301030002 -010200040100000401030001010000020100002501000063010000630100002201000613 -01000600040e060000000623010006030202010103030101020206060100060201000608 -010006020100060101010601010006040100060201000602010006010100060201000603 -010006050100060301000602010006030100060c01000603010006020100060101000601 -01010601010006020100060101000601010106ff06400202010103010101020206030100 -0e0109130100090301000902010009140b01000701000008010000020100000501000002 -01000001010000020100000101000005010000020100002c010000080100000001000002 -010000020100000501000001010000020100000501000003010000030100000201000001 -0100000201000025010000630100006301000022010006140100040e0000062401000603 -0202010103030101020206070102060a0102060201000600010106050100060301020603 -010206050101060301000604010206040100060c01000604010206030101060001000601 -010006020100060201010600010006ff064002020101030101010202060301000e010911 -01040902010209150b010007010000080100000201000002010000010100000201000001 -010000020100000101000005010000010101002c01000009010000030100000201000001 -010000020100000101000002010000010100000201000003010000030100000201000001 -01000002010000250100006301000063010000220100061301000600040e060000000623 -010006030202010103030101020206250100061a0100060a010006ff066d020201010301 -01010202060301000e0109320b0100070100000801000003010200020100000201000002 -0103000101000006010100000100002c0100000901000004010300020102000301030002 -010200050101000201030001010000020100002501000063010000630100002201000614 -0100040e000006240100060302020101030301010202062201000601010006ff06950202 -0101030101010202060301000e0109320b01006301000063010000630100006301000022 -0100061301000600040e06000000062301000603020201010303010102020623010106ff -069602020101030101010202060301000e0109320b010063010000630100006301000063 -01000022010006140100040e00000624010006030202010103030101020206ff06bc0202 -0101030101010202060301000e0109320b01006301000063010000630100006301000022 -0100061301000600040e060000000623010006030202010103030101020206ff06bc0202 -0101030101010202060301000e0109320b01006301000063010000630100006301000022 -010006140100040e00000624010006030202010103030101020206ff06bc020201010301 -01010202060301000e0109320b0100630100006301000063010000630100002201000613 -01000600040e060000000623010006030202010103030101020206ff06bc020201010301 -01010202060301000e010b34006301000063010000630100006301000022010006140100 -040e00000624010006030202010103030101020206ff06bc020201010301010102020603 -01000e000b3501ff01b7061301000600040e060000000623010006030202010103030101 -020206ff06bc020201010301010102020603010010360063010000630100006301000063 -01000022010006140100040e00000624010006030202010103030101020206ff06bc0202 -01010301010102020603010010350f000063010000630100006301000063010000220100 -061301000600040e060000000623010006030202010103030101020206ff06bc02020101 -03010101020206030100100108320f010063010000630100006301000063010000220100 -06140100040e00000624010006030202010103030101020206ff06bc0202010103010101 -020206030100100108320f01006301000063010000630100006301000022010006130100 -0600040e060000000623010006030202010103030101020206ff06bc0202010103010101 -0202060301001001081301000804010208150f0100630100006301000063010000630100 -0022010006140100040e0000062401000603020201010303000406ff06bc000403010101 -020206030100100108110102080301000802010008140f01001001000006010000490100 -000e0100001c0100000b010200030102001f010000630100006301000022010006130100 -0600040e0600000006230100060302020101030300000202050006ff06bc000002020500 -03010101020206030100100108130100080301000802010008140f010010010000510100 -000e0100001c0100000d010000050100001f010000630100006301000022010006140100 -040e000006240100060302020101030300000202050006ff06bc00000202050003010101 -020206030100100108130100080301000802010008140f01000801020002010400020102 -000201000000010100030102003b01000008010200020100000101000003010200020100 -00000101000301020002010400010100000201000004010000050100001f010000630100 -0063010000220100061301000600040e0600000006230100060302020101030300000202 -050006ff06bc000002020500030101010202060301001001081301000803010008020100 -08140f010007010000020100000301000006010000020101000101000001010000020100 -003a01000007010000020100000101000000010000030100000201000001010100010100 -00010100000201000003010000030100000201000004010000050100001f010000630100 -006301000022010006140100040e000006240100060302020101030300000202050006ff -06bc000002020500030101010202060301001001081301000804010308140f0100070100 -0007010000060100000201000002010000050100003a0100000701000005010100080100 -0001010000020100000101000007010000030100000201000004010000050100001f0100 -006301000063010000220100061301000600040e06000000062301000603020201010303 -00000202050006ff06bc0000020205000301010102020603010010010813010008070100 -08140f01000801020004010000060100000201000002010000020103003a010000080102 -000201010005010300010100000201000002010200040100000301000002010000040100 -00050100001f010000630100006301000022010006140100040e00000624010006030202 -01010303000002020500000502ff02b00006020205000301010102020603010010010813 -01000806010008150f01000b010000030100000601000002010000020100000101000002 -0100003a0100000b01000001010000000100000301000002010000010100000201000005 -01000003010000030100000201000004010000050100001f010000630100006301000022 -0100061301000600040e0600000006230100060302020101030300000208050002ff02b0 -000002080500030101010202060301001001081101040801010208160f01000701000002 -0100000301000006010000020100000201000001010000020100003a0100000701000002 -010000010100000101000002010000020100000101000002010000010100000201000003 -010000030100000101010004010000050100001f01000063010000630100002201000614 -0100040e000006240100060302020101030300000208050002ff02b00000020805000301 -0101020206030100100108320f0100080102000501010004010000020100000201000002 -0103003a0100000801020002010000020100000201030001010000020100000201020005 -010100020101000001000004010000050100001f01000063010000630100002201000613 -01000600040e0600000006230100060302020101030300000208050001ff01b000000208 -050003010101020206030100100108320f01006301000063010000630100006301000022 -010006140100040e00000624010006030202010103030000050901ff01b0000005090301 -0101020206030100100108320f0100630100006301000063010000630100002201000613 -01000600040e060000000623010006030202010103ff03cc010102020603010010010832 -0f01006301000063010000630100006301000022010006140100040e0000062401000603 -0202010103ff03cc0101020206030100100108320f010063010000630100006301000063 -010000220100061301000600040e060000000623010006030202010103ff03cc01010202 -06030100100108320f01006301000063010000630100006301000022010006140100040e -00000624010006030202010103ff03cc010102020603010010010f340063010000630100 -006301000063010000220100061301000600040e060000000623010006030202010103ff -03cc010102020603010010000f3501ff01b706140100040e000006240100060302020101 -03ff03cc01010202060301000e3600630100006301000063010000630100002201000613 -01000600040e060000000623010006030202010103ff03cc01010202060301000e350b00 -006301000063010000630100006301000022010006140100040e00000624010006030202 -010103ff03cc01010202060301000e0109320b0100630100006301000063010000630100 -00220100061301000600040e060000000623010006030202010103ff03cc010102020603 -01000e0109320b01006301000063010000630100006301000022010006140100040e0000 -0624010006030202010103ff03cc01010202060301000e01091201020903010209150b01 -0063010000630100006301000063010000220100061301000600040e0600000006230100 -06030202010103ff03cc01010202060301000e0109110100090201000901010009020100 -09140b0100630100002c01000035010000630100006301000022010006140100040e0000 -0624010006030202010103ff03cc01010202060301000e01091101000902010009010100 -0902010009140b0100630100002c01000035010000630100006301000022010006130100 -0600040e060000000623010006030202010103ff03cc01010202060301000e0109110100 -09020100090101000902010009140b010008010200020100000201000002010200030102 -0002010000000101000201000000010100030102002d0100000701000002010000020102 -000301020003010200030102000201040002010200020100000001010026010000630100 -006301000022010006140100040e00000624010006030202010103ff03cc010102020603 -01000e0109140100090201000902010009140b0100070100000201000001010000020100 -000101000002010000010100000201000001010100010100000101010001010000010100 -00020100002c010000070100000201000001010000020100000101000002010000010100 -000201000001010000020100000301000003010000020100000101010001010000250100 -006301000063010000220100061301000600040e060000000623010006030202010103ff -03cc01010202060301000e0109130100090301000902010009140b010007010000050100 -000201000001010000090100000101000002010000010100000201000001010000020100 -002c01000007010000020100000501000001010000090100000101000007010000070100 -00010100000201000025010000630100006301000022010006140100040e000006240100 -06030202010103ff03cc01010202060301000e0109120100090401000902010009140b01 -000801020002010000020100000201020003010300010100000201000001010000020100 -00010104002c010000080100000001000003010300020102000301030002010200040100 -00040103000101000002010000250100006301000063010000220100061301000600040e -060000000623010006030202010103ff03cc01010202060301000e010911010009020100 -090101000902010009140b01000b01000001010000020100000501000001010000020100 -000101000002010000010100000201000001010000300100000801000000010000020100 -000201000005010000010100000201000005010000030100000301000002010000010100 -000201000025010000630100006301000022010006140100040e00000624010006030202 -010103ff03cc01010202060301000e01091101040902010209150b010007010000020100 -000101000001010100010100000201000001010000020100000101000002010000010100 -000201000001010000020100002c01000009010000030100000201000001010000020100 -000101000002010000010100000201000003010000030100000201000001010000020100 -00250100006301000063010000220100061301000600040e060000000623010006030202 -010103ff03cc01010202060301000e0109320b0100080102000301010000010000020102 -000301030001010000020100000101000002010000020102002d01000009010000040103 -000201020003010300020102000501010002010300010100000201000025010000630100 -006301000022010006140100040e00000624010006030202010103ff03cc010102020603 -01000e0109320b010063010000630100006301000063010000220100061301000600040e -060000000623010006030202010103ff03cc01010202060301000e0109320b0100630100 -0063010000630100006301000022010006140100040e00000624010006030202010103ff -03cc01010202060301000e0109320b010063010000630100006301000063010000220100 -061301000600040e060000000623010006030202010103ff03cc01010202060301000e01 -09320b01006301000063010000630100006301000022010006140100040e000006240100 -06030202010103ff03cc01010202060301000e0109320b01006301000063010000630100 -0063010000220100061301000600040e060000000623010006030202010103ff03cc0101 -0202060301000e010b34006301000063010000630100006301000022010006140100040e -00000624010006030202010103ff03cc01010202060301000e000b3501ff01b706130100 -0600040e060000000623010006030202010103ff03cc0101020206030100060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000630100 -006301000063010000630100002201000614010006000000060000000600000006000000 -060000000600000006000000060000000624010006030202010103ff03cc010102020603 -01ff01ef0613010006000000060000000600000006000000060000000600000006000000 -06000000060000000623010006030202010103ff03cc010102020603010006ff06ff0639 -010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff -03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100 -06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603 -0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101 -02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff -0639010006030202010103ff03cc01010202060301000649010006ff06ee010006030202 -010103ff03cc01010202060301000648010106ff06ee010006030202010103ff03cc0101 -020206030100064701000600010006ff06ee010006030202010103ff03cc010102020603 -01000649010006ff06ee010006030202010103ff03cc01010202060301000649010006ff -06ee010006030202010103ff03cc01010202060301000649010006ff06ee010006030202 -010103ff03cc01010202060301000649010006ff06ee010006030202010103ff03cc0101 -0202060301000649010006ff06ee010006030202010103ff03cc01010202060301000647 -010406ff06ec010006030202010103ff03cc010102020603010006ff06ff063901000603 -0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101 -02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff -0639010006030202010103ff03cc010102020603010006ff06ff06390100060302020101 -03ff03cc0101020206030100063801000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100064b010006030202010103ff -03cc01010202060301000637010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -0100060001000600010006000100060001000600010006000000064a0100060302020101 -03ff03cc0101020206030100063801000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -0600000004ff04940000064b010006030202010103ff03cc010102020603010006370100 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060004ff049406000000064a -010006030202010103ff03cc01010202060301000638010006000000060c0000060c0100 -04ff04940000064b010006030202010103ff03cc01010202060301000637010006000000 -060c0100060c0100060004ff049406000000064a010006030202010103ff03cc01010202 -060301000638010006000000060c0000060c010004ff04940000064b0100060302020101 -03ff03cc01010202060301000637010006000000060c0100060c0100060004ff04940600 -0000064a010006030202010103ff03cc01010202060301000638010006000000060c0000 -060c010004ff04940000064b010006030202010103ff03cc010102020603010006370100 -06000000060c0100060c0100060004ff049406000000064a010006030202010103ff03cc -01010202060301000638010006000000060c0000060c010004ff04940000064b01000603 -0202010103ff03cc01010202060301000637010006000000060c0100060c0100060004ff -049406000000064a010006030202010103ff03cc01010202060301000638010006000000 -060c0000060c010004ff04940000064b010006030202010103ff03cc0101020206030100 -0637010006000000060c0100060c0100060004ff049406000000064a0100060302020101 -03ff03cc01010202060301000638010006000000060c0000060c010004ff04940000064b -010006030202010103ff03cc010102020603010006370100060000000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060004ff049406000000064a010006030202010103ff03cc -010102020603010006380100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -04ff04940000064b010006030202010103ff03cc01010202060301000637010006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -0600000006000000064a010006030202010103ff03cc0101020206030100063800000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000064b010006030202010103ff03cc010102020603010006ff06ff06390100 -06030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc -010102020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff -06ff0639010006030202010103ff03cc010102020603010006ff06ff0639010006030202 -010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc01010202 -0603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff0639 -010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff -03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100 -06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603 -0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101 -02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff -0639010006030202010103ff03cc010102020603010006ff06ff06390100060302020101 -03ff03cc010102020603010006ff06ff0639010006030202010103ff03cc010102020603 -010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff06390100 -06030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc -010102020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff -06ff0639010006030202010103ff03cc010102020603010006ff06ff0639010006030202 -010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc01010202 -0603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff0639 -010006030202010103ff03cc010102020603010006ff06ff0639010006030202010103ff -03cc010102020603010006ff06ff0639010006030202010103ff03cc0101020206030100 -06ff06ff0639010006030202010103ff03cc010102020603010006ff06ff063901000603 -0202010103ff03cc010102020603010006ff06ff0639010006030202010103ff03cc0101 -02020603010006ff06ff0639010006030202010103ff03cc010102020603010006ff06ff -0639010006030202010103ff03cc00040603010006ff06ff063901000603000403ff03cc -000002020500060301ff01ff013b060300000202050003ff03cc00000202050006ff06ff -064300000202050003ff03cc00000202050006ff06ff064300000202050003ff03cc0000 -0202050006ff06ff064300000202050003ff03cc00000202050006ff06ff064300000202 -050003ff03cc000002020500000502ff02ff023700060202050003ff03cc000002080500 -02ff02ff023700000208050003ff03cc00000208050002ff02ff023700000208050003ff -03cc00000208050001ff01ff013700000208050003ff03cc0000050901ff01ff01370000 -050903ff03ff03ff03ff03ff03ff03ff03ff0337 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 34 400 249 -%%EOF diff --git a/lib/tv/doc/src/tv_search_window.gif b/lib/tv/doc/src/tv_search_window.gif Binary files differdeleted file mode 100644 index d6e72dda2f..0000000000 --- a/lib/tv/doc/src/tv_search_window.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_search_window.ps b/lib/tv/doc/src/tv_search_window.ps deleted file mode 100644 index a6dd2ef9fc..0000000000 --- a/lib/tv/doc/src/tv_search_window.ps +++ /dev/null @@ -1,975 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_search_window.eps) -%%CreationDate: (Mon Mar 19 17:15:21 2001) -%%BoundingBox: 0 0 228 183 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 228 183 -userdict begin -%%BeginData: -DisplayImage -0 0 -228.000000 183.000000 -12 -455 365 -1 -0 -0 -8 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -aa2455 -999999 -000a01ff01b0000b0208040001ff01b000000208040000000208040002ff02b000000208 -0400000002080400020000ff00ad040002000000020804000000020204060200000004ff -04ad020000000405020204000000020204000209000d02ff02a400000202040000000202 -040002080000020d0400029001030211010302330101021501010206010102a100000202 -040000000202040002080000020d04000290010102020107020001010203010102010101 -020e010302200101020c0103020401010206010102110100028e00000202040000000202 -040002080000020d04000290010102050101020301010203010102010101020d01010201 -0101021f0101020b0101020101010203010102190101028e000002020400000002020400 -0208000002020406020304000290010102050101020301010203010102010101020d0101 -020601030203010302020101020001010201010302020101020001010207010102030101 -020201010200010102030101020201030203010302000104028c00000202040000000403 -020800000202040003040000020304000290010102050101020401010202010002020101 -020d01020204010102010101020101010201010102010101020001010200010102010101 -020101020200010102060101020301010202010202000101020201010201010102010101 -020101010201010102000101028e000004030101020b0000020304000302000002040400 -0290010102050101020401010201010102020101020e0103020201010201010102050101 -020101020202010102050101020101010206010102030101020201010201010102020101 -0201010102010101020101010204010102910103020b0000020304000302000002040400 -029001010205010102050101020001000203010102100102020101050202010402010101 -020301010205010102010101020601010203010102020101020101010202010102010105 -020101010204010102910103020b00000204040003000000020504000290010102050101 -020501030203010102110101020101010205010102010101020101010203010102050101 -020101010206010102030101020201010201010102020101020101010205010102040101 -02910103020b000002040400030000000205040002900101020501010206010102040101 -020d01010201010102010101020201000201010102010101020101010203010102020100 -020101010201010102070101020101010203010102010101020201010201010102020100 -02010101020201000200010102910103020b000002050000020604000290010102050101 -0206010102040101020e0103020301030203010202000101020001010204010302020101 -02010101020801030204010402030101020201030203010302020102028f0103020b0000 -020d040002900103021101030254010102a40103020b0000020d040002fd010202a50103 -020b0000020d040002ff02a60103020c040d02ff02a7010302ff02c2010302ff02c20103 -020200ff00bb0400020201030202000004ff04bb0202010302ff02c20103020205ff05bc -02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202 -05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202 -0103020205ff05bc02020103020205ff05bc020201030202050800000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000508020201030202050700000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500010005070202010302020508000005ff05a8 -010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8 -010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8 -010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8 -010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8 -010005080202010302020507000005ff05aa010005070202010302020508000005ff05a8 -010005080202010302020507000005ff0549000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005110100 -05070202010302020508000005ff05470000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000051101000508 -0202010302020507000005ff05490000054c010005110100050702020103020205080000 -05ff05470000054c010005110100050802020103020205070000050d0102051e0100050f -010105ff05060000054c010005110100050702020103020205080000050b010005020100 -051d0100050e010005ff05070000054c010005110100050802020103020205070000050c -010005060102050301020502010005000101050301020502010005000101050b01000504 -010205020100050001010504010105f20000054c01000511010005070202010302020508 -0000050c0100050401000502010005010100050201000501010105010100050101000502 -0100050101010501010005080104050101000502010005010101050101000503010105f1 -0000054c010005110100050802020103020205070000050e010105020100050201000505 -010005010100050501000505010005020100050a010005030100050201000501010005fc -0000054c010005110100050702020103020205080000050f010005010104050201030501 -0100050501000505010005020100050a010005030100050201000501010005fb00000512 -0102051e01000516010005110100050802020103020205070000050c0100050201000501 -0100050501000502010005010100050501000505010005020100050a0100050301000502 -01000501010005fc00000510010005020100051d01000517010005110100050702020103 -020205080000050b01000502010005010100050201000501010005020100050101000505 -0100050201000501010005020100050a01000503010005020100050101000507010105f1 -000005110100050601020503010205020100050001010503010205020100050001010513 -010005110100050802020103020205070000050d01020503010205030103050101000506 -01020502010005020100050a010005040102050201000507010105f20000051101000504 -010005020100050101000502010005010101050101000501010005020100050101010501 -0100051301000511010005070202010302020508000005ff054700000513010105020100 -050201000505010005010100050501000505010005020100051201000511010005080202 -010302020507000005ff0549000005140100050101040502010305010100050501000505 -010005020100051301000511010005070202010302020508000005ff0547000005110100 -050201000501010005050100050201000501010005050100050501000502010005120100 -0511010005080202010302020507000005ff054900000510010005020100050101000502 -010005010100050201000501010005050100050201000501010005020100051301000511 -010005070202010302020508000005ff0547000005120102050301020503010305010100 -050601020502010005020100051201000511010005080202010302020507000005ff0549 -0000054c01000511010005070202010302020508000005ff05470000054c010005110100 -050802020103020205070000050901ff012c05120000054c010005110100050702020103 -020205080000050801ff012c05110000054c010005110100050802020103020205070000 -0509010107ff0728010105120000054c0100051101000507020201030202050800000508 -010107ff07270000010105110000054c0100051101000508020201030202050700000509 -0101070100ff0026010105120000054c0100051101000507020201030202050800000508 -0101070100ff0026010105110000054c0100051101000508020201030202050700000509 -0101070100ff0026010105120000054c0100051101000507020201030202050800000508 -010107010000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000000300000003000000030000000300 -000003000000030000000300000003000000030000a0010105110000054c010005110100 -05080202010302020507000005090101070103840101009f010105120000050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100051101000507020201030202050800000508010107010000030401000377 -010003040101009f01010511000005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005110100050802020103 -0202050700000509010107010304010003030102031e0100034001000310010003030101 -009f01010573010005070202010302020508000005080101070100000302010003030100 -03020100031d01000353010003020101009f010105720100050802020103020205070000 -050901010701030201000304010003060102030301020302010003000101030301020302 -010003000101030a01020302010003020100030101000300010103020100030001010303 -01020303010203030102030301020303010203020100030001010304010003010101009f -010105730100050702020103020205080000050801010701000003000100030601000304 -010003020100030101000302010003010101030101000301010003020100030101010301 -010003080100030201000301010003020100030101010301010003010101030101000301 -010003020100030101000302010003010100030201000304010003020100030201000301 -0101030101000304010003000101009f0101057201000508020201030202050700000509 -010107010300010003080101030201000302010003050100030101000305010003050100 -030201000308010003020100030201000300010003020100030201000301010003050100 -030201000301010003050100030801000302010003020100030101000302010003050102 -009f01010573010005070202010302020508000005080101070100000300010003090100 -030101040302010303010100030501000305010003020100030801040303010003030100 -030201000301010003050104030201020303010203050100030201000302010003010100 -030201000304010003000101009f01010572010005080202010302020507000005090101 -070103020100030401000302010003010100030501000302010003010100030501000305 -010003020100030801000306010003000100030201000302010003010100030501000309 -01000305010003040100030201000302010003010100030201000303010003010101009f -010105730100050702020103020205080000050801010701000003020100030301000302 -010003010100030201000301010003020100030101000305010003020100030101000302 -010003080100030201000301010003020100030101010301010003010100030501000302 -010003010100030201000301010003020100030401000302010003020100030101000302 -01000302010003020101009f010105720100050802020103020205070000050901010701 -030401000303010203030102030301030301010003060102030201000302010003090102 -030201000302010003010100030001010302010003060102030301020303010203050100 -0303010203020100030201000301010003030101009f0101057301000507020201030202 -05080000050801010701000003040100034001000335010003040101009f010105720100 -05080202010302020507000005090101070103470100033b0101009f0101051200000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000511010005070202010302020508000005080101070100000346 -0100033b0101009f01010511000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005110100050802020103 -020205070000050901010701030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300010003000100 -030001000300010003000100030001000300010003000100030001000300009f01010512 -0000054c01000511010005070202010302020508000005080101070100ff002601010511 -0000054c01000511010005080202010302020507000005090101070100ff002601010512 -0000054c01000511010005070202010302020508000005080101070100ff002601010511 -0000054c01000511010005080202010302020507000005090101070100ff002601010512 -0000054c01000511010005070202010302020508000005080101070000ff002701010511 -0000054c010005110100050802020103020205070000050901ff012c05120000054c0100 -05110100050702020103020205080000050801ff012c0511000005120102051f01020513 -01000511010005080202010302020507000005ff05490000051001000502010005200100 -051401000511010005070202010302020508000005ff0547000005110100050201000502 -010205020100050001010503010205030102050501000513010005110100050802020103 -02020507000005ff05490000051001000505010005020100050101010501010005010100 -050201000501010005020100050401000514010005110100050702020103020205080000 -05ff05470000051101000509010005010100050201000501010005050100050201000504 -0100051301000511010005080202010302020507000005ff054900000510010005060103 -050101000502010005010100050501040504010005140100051101000507020201030202 -0508000005ff054700000511010005020100050101000502010005010100050201000501 -01000505010005080100051301000511010005080202010302020507000005ff05490000 -051001000502010005010100050201000501010005020100050101000502010005010100 -0502010005040100051401000511010005070202010302020508000005ff054700000512 -010205030103050101000502010005020102050301020505010005130100051101000508 -0202010302020507000005ff05490000054c010005110100050702020103020205080000 -05ff05470000054c01000511010005080202010302020507000005ff05490000054c0100 -0511010005070202010302020508000005ff05470000054c010005110100050802020103 -02020507000005ff05490000054c01000511010005070202010302020508000005ff0547 -0000054c01000511010005080202010302020507000005ff05490000054c010005110100 -05070202010302020508000005ff05470000054c01000511010005080202010302020507 -0000052201000563000005c00000054c0100051101000507020201030202050800000520 -01000500010005230100053c000005000000053e0102054b0100052f0000054c01000511 -010005080202010302020507000005200100050001000500010005220100053b00000500 -000005000000053f0100057d000005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005110100050702020103 -020205080000051e010005000601010005000100050b0102050301020509010405020102 -05020100050001010502010105000100052400000502000005000000050b010205030102 -050901000500010105030102050301010500010005010100050201000504010005030102 -0502010005000101050a0102050201000502010005010100050001010502010005000101 -050301020503010205030102050301020503010205020100050001010521000005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005110100050802020103020205070000051e01000500060301000500 -010005090100050201000501010005020100050a01000503010005020100050101010501 -010005010100050001000500010005220000050400000500000005090100050201000501 -010005020100050801010501010005010100050201000501010005010101050101000502 -010005040100050201000502010005010101050101000508010005020100050101000502 -010005010101050101000501010105010100050101000502010005010100050201000501 -010005020100050401000502010005020100050101010501010005820100050702020103 -020205080000051c010005000605010005000100050c010005010100050e010005030100 -0502010005010100050501000500010005000100052100000506000005000000050c0100 -05010100050c010005050100050201000501010005020100050101000502010005040100 -0506010005010100050c0100050201000502010005000100050201000502010005010100 -050501000502010005010100050501000508010005020100050201000501010005020100 -05810100050802020103020205070000051c000005000607000005000000050801030502 -0102050b0100050301040501010005050100050001000500010005200100050801000500 -010005080103050201020509010005050104050101000502010005010100050201000504 -01000503010305010100050c010405030100050301000502010005010100050501040502 -010205030102050501000502010005020100050101000502010005820100050702020103 -020205080000051c000005000605000005000000050801000502010005050100050a0100 -050301000505010005050100050001000500010005210100050601000500010005080100 -050201000505010005080100050501000505010005020100050101000502010005040100 -050201000502010005010100050c01000506010005000100050201000502010005010100 -050501000509010005050100050401000502010005020100050101000502010005810100 -050802020103020205070000051e00000500060300000500000005090100050201000501 -010005020100050a01000503010005020100050101000505010005000100050001000522 -010005040100050001000509010005020100050101000502010005080100050501000502 -01000501010005010101050101000501010105040100050201000502010005010100050c -010005020100050101000502010005010101050101000501010005050100050201000501 -010005020100050101000502010005040100050201000502010005010100050201000582 -0100050702020103020205080000051e000005000601000005000000050b010305020102 -050c01010502010205020100050501000500010005000100052301000502010005000100 -050b01030502010205090100050601020503010105000100050201010500010005040100 -0503010305010100050d0102050201000502010005010100050001010502010005060102 -050301020503010205050100050301020502010005020100058101000508020201030202 -05070000052000000500000005000000055f010005000100050001000532010005320100 -05b7010005070202010302020508000005200000050000000561010005000100052f0100 -050201000532010005b60100050802020103020205070000052200000563010005310102 -0533010005b7010005070202010302020508000005ff05a8010005080202010302020507 -000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507 -000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507 -000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507 -000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507 -000005ff05aa010005070202010302020508000005ff05a8010005080202010302020507 -000005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050702020103 -020205080100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050802020103 -020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc -02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202 -05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05a10100 -050001000500010005000100050001000500010005000100050001000500010005090202 -0103020205ff05a001000500010005000100050001000500010005000100050001000500 -010005000100050000000508020201030202050707ff0796050201000506010005060000 -0509020201030202050707ff079500000501010005060000050800000508020201030202 -0507070100ff009405020100050601000506000005090202010302020507070100ff0094 -0501010005060000050001000506000005080202010302020507070100ff009405020100 -05040000050201000504000005090202010302020507070100ff00940501010005040000 -050201000506000005080202010302020507070100ff0094050201000504000005020100 -0504000005090202010302020507070100ff009405010100050400000504010005040000 -05080202010302020507070100ff00940502010005020000050601000502000005090202 -010302020507070100ff0094050101000502000005060100050400000508020201030202 -0507070100ff009405020100050200000506010005020000050902020103020205070701 -00ff00940501010005020000050801000502000005080202010302020507070100ff0094 -0502010005000000050a01000500000005090202010302020507070100ff009405010100 -050000000500010005000100050001000500010005000100050001000502000005080202 -010302020507070100ff0094050201000500010005000100050001000500010005000100 -05000100050001000500000005090202010302020507070100ff00940501010005100000 -05080202010302020507070100ff00940502010005000000050000000500000005000000 -0500000005000000050000000500000005090202010302020507070100ff009405010100 -050000000500000005000000050000000500000005000000050000000500010005000000 -05080202010302020507070100ff00940502010005000000050a01000500000005090202 -010302020507070100ff00940501010005000000050c0100050000000508020201030202 -0507070100ff00940502010005000000050a010005000000050902020103020205070701 -00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 -0502010005000000050a01000500000005090202010302020507070100ff009405010100 -05000000050c01000500000005080202010302020507070100ff00940502010005000000 -050a01000500000005090202010302020507070100ff00940501010005000000050c0100 -0500000005080202010302020507070100ff00940502010005000000050a010005000000 -05090202010302020507070100ff00940501010005000000050c01000500000005080202 -010302020507070100ff00940502010005000000050a0100050000000509020201030202 -0507070100ff00940501010005000000050c010005000000050802020103020205070701 -00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 -0501010005000000050c01000500000005080202010302020507070100ff009405020100 -05000000050a01000500000005090202010302020507070100ff00940501010005000000 -050c01000500000005080202010302020507070100ff00940502010005000000050a0100 -0500000005090202010302020507070100ff00940501010005000000050c010005000000 -05080202010302020507070100ff00940502010005000000050a01000500000005090202 -010302020507070100ff00940501010005000000050c0100050000000508020201030202 -0507070100ff00940502010005000000050a010005000000050902020103020205070701 -00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 -0502010005000000050a01000500000005090202010302020507070100ff009405010100 -05000000050c01000500000005080202010302020507070100ff00940502010005000000 -050a01000500000005090202010302020507070100ff00940501010005000000050c0100 -0500000005080202010302020507070100ff00940502010005000000050a010005000000 -05090202010302020507070100ff00940501010005000000050c01000500000005080202 -010302020507070100ff00940502010005000000050a0100050000000509020201030202 -0507070100ff00940501010005000000050c010005000000050802020103020205070701 -00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 -0501010005000000050c01000500000005080202010302020507070100ff009405020100 -05000000050a01000500000005090202010302020507070100ff00940501010005000000 -050c01000500000005080202010302020507070100ff00940502010005000000050a0100 -0500000005090202010302020507070100ff00940501010005000000050c010005000000 -05080202010302020507070100ff00940502010005000000050a01000500000005090202 -010302020507070100ff00940501010005000000050c0100050000000508020201030202 -0507070100ff00940502010005000000050a010005000000050902020103020205070701 -00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 -0502010005000000050a01000500000005090202010302020507070100ff009405010100 -05000000050c01000500000005080202010302020507070100ff00940502010005000000 -050a01000500000005090202010302020507070100ff00940501010005000000050c0100 -0500000005080202010302020507070100ff00940502010005000000050a010005000000 -05090202010302020507070100ff00940501010005000000050c01000500000005080202 -010302020507070100ff00940502010005000000050a0100050000000509020201030202 -0507070100ff00940501010005000000050c010005000000050802020103020205070701 -00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 -0501010005000000050c01000500000005080202010302020507070100ff009405020100 -05000000050a01000500000005090202010302020507070100ff00940501010005000000 -050c01000500000005080202010302020507070100ff00940502010005000000050a0100 -0500000005090202010302020507070100ff00940501010005000000050c010005000000 -05080202010302020507070100ff00940502010005000000050a01000500000005090202 -010302020507070100ff00940501010005000000050c0100050000000508020201030202 -0507070100ff00940502010005000000050a010005000000050902020103020205070701 -00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 -0502010005000000050a01000500000005090202010302020507070100ff009405010100 -05000000050c01000500000005080202010302020507070100ff00940502010005000000 -050a01000500000005090202010302020507070100ff00940501010005000000050c0100 -0500000005080202010302020507070100ff00940502010005000000050a010005000000 -05090202010302020507070100ff00940501010005000000050c01000500000005080202 -010302020507070100ff00940502010005000000050a0100050000000509020201030202 -0507070100ff00940501010005000000050c010005000000050802020103020205070701 -00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 -0501010005000000050c01000500000005080202010302020507070100ff009405020100 -05000000050a01000500000005090202010302020507070100ff00940501010005000000 -050c01000500000005080202010302020507070100ff00940502010005000000050a0100 -0500000005090202010302020507070100ff00940501010005000000050c010005000000 -05080202010302020507070100ff00940502010005000000050a01000500000005090202 -010302020507070100ff00940501010005000000050c0100050000000508020201030202 -0507070100ff00940502010005000000050a010005000000050902020103020205070701 -00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 -0502010005000000050a01000500000005090202010302020507070100ff009405010100 -05000000050c01000500000005080202010302020507070100ff00940502010005000000 -050a01000500000005090202010302020507070100ff00940501010005000000050c0100 -0500000005080202010302020507070100ff00940502010005000000050a010005000000 -05090202010302020507070100ff00940501010005000000050c01000500000005080202 -010302020507070100ff00940502010005000000050a0100050000000509020201030202 -0507070100ff00940501010005000000050c010005000000050802020103020205070701 -00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 -0501010005000000050c01000500000005080202010302020507070100ff009405020100 -05000000050a01000500000005090202010302020507070100ff00940501010005000000 -050c01000500000005080202010302020507070100ff00940502010005000000050a0100 -0500000005090202010302020507070100ff00940501010005000000050c010005000000 -05080202010302020507070100ff00940502010005000000050a01000500000005090202 -010302020507070100ff00940501010005000000050c0100050000000508020201030202 -0507070100ff00940502010005000000050a010005000000050902020103020205070701 -00ff00940501010005000000050c01000500000005080202010302020507070100ff0094 -0502010005000000050a01000500000005090202010302020507070100ff009405010100 -05000000050c01000500000005080202010302020507070100ff00940502010005000000 -050a01000500000005090202010302020507070100ff00940501010005000000050c0100 -0500000005080202010302020507070100ff00940502010005000000050a010005000000 -05090202010302020507070100ff00940501010005000000050c01000500000005080202 -010302020507070100ff00940502010005000000050a0100050000000509020201030202 -0507070100ff00940501010005000000050c010005000000050802020103020205070701 -00ff00940502010005000000050a01000500000005090202010302020507070100ff0094 -050101000500000005000100050001000500010005000100050001000500010005000100 -0500000005080202010302020507070100ff009405020100050001000500010005000100 -050001000500010005000100050001000500000005090202010302020507070100ff0094 -050101000510000005080202010302020507070100ff0094050201000500000005000000 -050000000500000005000000050000000500000005000000050902020103020205070701 -00ff00940501010005020000050000000500000005000000050000000500000005000100 -0500000005080202010302020507070100ff00940502010005000000050a010005000000 -05090202010302020507070100ff00940501010005020000050801000502000005080202 -010302020507070100ff0094050201000502000005060100050200000509020201030202 -0507070100ff009405010100050400000506010005020000050802020103020205070701 -00ff00940502010005020000050601000502000005090202010302020507070100ff0094 -0501010005040000050401000504000005080202010302020507070100ff009405020100 -05040000050201000504000005090202010302020507070100ff00940501010005060000 -050201000504000005080202010302020507070100ff0094050201000504000005020100 -0504000005090202010302020507070100ff009405010100050600000500010005060000 -05080202010302020507070100ff00940502010005060100050600000509020201030202 -0507070100ff009405010100050801000506000005080202010302020507070000ff0095 -050201000506010005060000050902020103020205ff05a0010005000000050000000500 -0000050000000500000005000000050000000500000005000000050802020103020205ff -05a100000500000005000000050000000500000005000000050000000500000005000000 -050902020103020205060100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005180202010302020505010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500000005170202010302020506010005100000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005020000 -050c0000051802020103020205050100050c000005000100050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050001000500000005000000 -050c0000051702020103020205060100050a0000050001000502000005ff057601000502 -000005000000050000000508000005180202010302020505010005080000050000000502 -01000500000005ff05780100050000000502000005000000050800000517020201030202 -050601000506000005000000050201000502000005ff0576010005020000050400000500 -0000050400000518020201030202050501000504000005000000050601000500000005ff -057801000500000005060000050000000504000005170202010302020506010005020000 -05000000050601000502000005ff05760100050200000508000005000000050000000518 -020201030202050501000500010005000100050a01000500000005ff0578010005000000 -050a01000500010005000000051702020103020205060100050201000500010005060100 -0502000005ff057601000502000005080100050001000500000005180202010302020505 -01000504010005000100050601000500000005ff05780100050000000506010005000100 -050400000517020201030202050601000506010005000100050201000502000005ff0576 -010005020000050401000500010005040000051802020103020205050100050801000500 -0100050201000500000005ff057801000500000005020100050001000508000005170202 -0103020205060100050a0100050001000502000005ff0576010005020000050001000500 -010005080000051802020103020205050100050c01000500010005000000050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050000000500 -0100050c0000051702020103020205060100051001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01000500010005000100050001000500010005020100050c000005180202010302020505 -010005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005170202010302020506000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -00000500000005000000051802020103020205ff05bc02020103020205ff05bc02020103 -020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc -02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202 -05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202 -0103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff -05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103 -020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc -02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc020201030202 -05ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc0202 -0103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff -05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103 -020205ff05bc02020103020205ff05bc02020103020205ff05bc02020103020205ff05bc -02020101000405ff05bc00050202040005ff05bc00000202040000000202040005ff05bc -00000202040000000202040005ff05bc00000202040000000202040005ff05bc00000202 -040000000202040005ff05bc000002020400000002020400000502ff02b0000602020400 -00000208040002ff02b000000208040000000208040002ff02b000000208040000000208 -040001ff01b00000020804000000040901ff01b000000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 228 183 -%%EOF diff --git a/lib/tv/doc/src/tv_start.gif b/lib/tv/doc/src/tv_start.gif Binary files differdeleted file mode 100644 index 7a8a0cf6ce..0000000000 --- a/lib/tv/doc/src/tv_start.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_start.ps b/lib/tv/doc/src/tv_start.ps deleted file mode 100644 index 7dae8e4a5a..0000000000 --- a/lib/tv/doc/src/tv_start.ps +++ /dev/null @@ -1,828 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./tv_start.tmp.eps) -%%CreationDate: (Tue Jun 12 16:02:24 2001) -%%BoundingBox: 0 42 377 247 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 42 377 247 -userdict begin -%%BeginData: -DisplayImage -0 42 -377.000000 205.000000 -12 -755 410 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -b22222 -828282 -aab6aa -000000 -000000 -000000 -000000 -000000 -000000 -000000 -000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff -02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202 -04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff -02d000000202040000000202040002080000020d040002f6010302110103023801010206 -0101024001010230010102ff020400000202040000000202040002080000020d040002f6 -010102020107020001010203010102010101020e0105020001070201010302070100020b -01010206010102400101020c0104021e010102ff02040000020204000000020204000208 -0000020d040002f6010102050101020301010203010102010101020e0101020701010203 -01010201010102050101020b010102060101024e010102020101021d010102ff02040000 -0202040000000202040002080000020204060203040002f6010102050101020301010203 -010102010101020e01010207010102030101020801040201010302030101020001010203 -010102020103020301040206010302030101020001010207010102000101020101010203 -010302030101020201010200010102020101020101030202010102000101020101010203 -010302020101020001010201010102020103020201010202010102f30000020204000000 -04030208000002020400030400000203040002f601010205010102040101020201000202 -0101020e0101020701010203010202080101020201010201010102020102020001010202 -010102010101020101010201010102090101020101010202010202000101020601020200 -010202000101020101010201010102020101020201020200010102010101020001010200 -010102020102020001020200010102010101020101010201010102000101020101010201 -010102010101020101010202010102f3000004030101020b000002030400030200000204 -040002f6010102050101020401010201010102020101020e010402040101020401030206 -010102060101020201010201010102020101020101010201010102010102020801010201 -010102020101020101010206010102010101020101010205010102020101020201010201 -010102010101020001010200010102020101020101010201010102050101020101020203 -01010201010102010101020101010202010002f70103020b000002030400030200000204 -040002f6010102050101020501010200010002030101020e010102070101020601020205 -010102030104020201010201010102020101020101050202010302060101020101010202 -010102010101020601010201010102010101020201040202010102020101020101010201 -010102000101020001010202010102010101020101010202010402010101020401010201 -0105020201010200010102f70103020b000002040400030000000205040002f601010205 -01010205010302030101020e010102070101020701010205010102020101020101010202 -010102010101020201010201010102080102020501010201010102020101020101010206 -010102010101020101010201010102010101020201010202010102010101020101010201 -010102000101020101010201010102010101020101010201010102010101020401010201 -0101020601010200010002f80103020b000002040400030000000205040002f601010205 -01010206010102040101020e010102070101020301010201010102050101020201010201 -010102020101020101010202010102010101020201000205010102050101020101010202 -010102010101020601010201010102010101020101010201010102020101020201010201 -010102020101020701010201010102010101020101010201010102010101020401010201 -0101020201000203010202f80103020b0000020500000206040002f60101020501010206 -010102040101020e01050203010102040103020701020201010202000101020101040203 -010102020103020201040207010302030101020101010206010102010101020101010202 -010202000101020101010202010102010101020301050202010102010101020101010202 -0102020001010200010102040101020201030204010102f90103020b0000020d040002f6 -01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000 -020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff -02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff -02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff -05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 -0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202 -010302020001050b06040504060005030602051f0600050206000504060005270602050b -06000506060005ff05ff053506000502060005090602051307010202010302020001050b -0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502 -0600050b0600051307010202010302020001050b06000506060205050600050306020518 -060005020600050206020503060205020600050206000517060005020600050106000500 -060105020604050206020503060205020600050006010503060205ff05ff052006000502 -060005020602050506000502060005000601050c07010202010302020001050b06000508 -060005050600050206000502060005180600050006000505060005020600050206000501 -060005020600051706000502060005010601050106000503060005060600050206000502 -06000501060105010600050106000502060005ff05ff051f060005020600050106000502 -0600050406000502060105010600050b07010202010302020001050b0603050506000505 -060005020600050206000518060005000600050506000502060005020600050106000500 -060005000600051706000502060005010600050206000503060005060600050206000502 -060005010600050206000501060005ff05ff052306040501060005020600050406000502 -060005020600050b07010202010302020001050b06000508060005050600050206040518 -060005000600050506000502060405010600050006000500060005170600050206000501 -0600050206000503060005060600050206000502060005010600050206000502060205ff -05ff052006000502060005010604050406000502060005020600050b0701020201030202 -0001050b0600050806000505060005020600051d06000506060005020600050506000500 -060005000600051706000502060005010600050206000503060005060600050206000502 -060005010600050206000505060005ff05ff051f06000502060005010600050806000502 -060005020600050b07010202010302020001050b06000508060005050600050206000502 -060005190600050606000502060005020600050106000500060005000600051706000502 -060005010601050106000503060005060600050206000502060005010600050206000501 -06000502060005ff05ff051f060005020600050106000502060005040600050206010501 -0600050b07010202010302020001050b0600050806000505060005030602051a06000506 -060005030602050306000500060005190602050206000500060105050601050406000503 -060205020600050206000502060205ff05ff052006000502060005020602050506000502 -060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202 -010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f -07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e -0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 -0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103 -0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103 -05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202 -01030202050e01060508010005060101050f010205010102059b01060508010005060101 -0510010505040101054d010205240104050d0101051e0102052401020501010205930106 -0508010005060101051101030535020201030202050e0100050101010500010005070101 -050601000511010105010100059d01000501010105000100050701010506010005130101 -05060100054d0101050001010524010105000101050c0100051e01010500010105240101 -050101000595010005010101050001000507010105060100051101010501010105340202 -010302020510010105030103050201030503010105030103050801020500010105010103 -05000101050001000500010005020103058b010105030103050201030503010105030103 -050a010105030104054c0101050101050500010305000102050201030501010105000102 -05070101050101010500010305030104051d010105010105050001030500010205020103 -050101010500010205070102050001010501010305000101050001000500010005020103 -058301010503010305020103050301010503010305090101050101000500010305020105 -050101030521020201030202051001010506010105000101050101010502010105020101 -0501010105070100050001000500010005050101050001050500010105010101058a0101 -050601010500010105010101050201010502010105010101050901010502010105010101 -054c01000502010105000101050201000500010205000101050001010501010105010102 -050001000507010105010101050201010502010105010101051d01000502010105000101 -050201000500010205000101050001010501010105010102050001000507010005000100 -050001000505010105000105050001010501010105820101050601010500010105010101 -050201010502010105010101050801020504010105020101050001010501010105010101 -052002020103020205100100050401040500010105010101050201010501010605070100 -0500010205020104050001010500010005000107058a0100050401040500010105010101 -0502010105010106050901010501010105020101054b0101050201000501010105000100 -05000100050001010501010805010101050a0103050401010501010105020101051c0101 -05020100050101010500010005000100050001010501010805010101050a010005000102 -050201040500010105000100050001070582010005040104050001010501010105020101 -05010106050901020503010105040101050101060520020201030202050f010105020101 -0501010105000101050201010501010105020101050b0101050001010501010105010101 -05010100050001000500010005000101058e010105020101050101010500010105020101 -0501010105020101050d01010502010105010101054c0101050101010501010205000100 -05010100050201000500010105050101050a0101050601010502010105010101051d0101 -05010101050101020500010005010100050201000500010105050101050a010105000101 -050101010501010105010100050001000500010005000101058601010502010105010101 -05000101050201010501010105020101050b010105010101050201010503010105030101 -0525020201030202050f0101050201010501010105000101050101010502010105020101 -050101010507010005010101050101010501010105000101050001000500010005000101 -05010101058a010105020101050101010500010105010101050201010502010105010101 -050901010502010105010101054c01010500010105020103050101010501010105000101 -0501010105010101050a0101050601010502010105010101051d01010500010105020103 -0501010105010101050001010501010105010101050a0100050101010501010105010101 -050001010500010005000100050001010501010105820101050201010501010105000101 -050101010502010105020101050101010507010105010101050201010502010205000101 -05000101050101010521020201030202050e01030502010a050101050501010305070102 -0500010105020107050001000500010105000103058a01030502010a0501010505010103 -0508010505010105054c0102050301010500010005000103050001020500010305010104 -050701030503010505010105051d01020503010105000100050001030500010205000103 -05010104050701020500010105020107050001000500010105000103058201030502010a -050101050501010305090103050101050500010505010103052202020103020205ff05ff -05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff -05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff -05e8020201030202050201ff01ff01e205020202010302020503080000cb080001000081 -01010059010100c30101005801000711000005020202010302020503080000cb08000100 -000b0101004e0101002201010059010100c3010100580100070103060700030600010502 -0202010302020503080000cb08000100000a0100001c0100002a01000008010000210101 -000c0100002a0100001f010100c301010058010007010305000007000306000105020202 -0103020205030800001f0800000a080000060802009408000100000a0100000401020003 -0102000c010000040101000a010200030102000b0101000201000007010000210101000b -010000040101000a010200030102000b010100020100001e010100c30101000a0101004b -0100070103050000070103050001050202020103020205030800001f0800000a08000008 -0800009408000100000a010000030100000201000001010000020100000a010000040100 -000101000008010000020100000101000002010000090100000101000002010000060100 -00210101000a010000040100000101000008010000020100000101000002010000090100 -0001010000020100001d010100c301010009010000010100004a01000701030400010701 -030500010502020201030202050308000008080100000800000208000002080000080804 -0002080200020800000008010005080000030802008d08000100000a0100000701000005 -0100000901000005010000010100000c0100000501000009010000010100000301000005 -010000210101000901000005010000010100000c01000005010000090100000101000003 -0100001c010100c301010009010000010100004a01000701030400010500070103040001 -0502020201030202050308000008080000000800000008000001080000020800000a0800 -00030800000208000001080100010800000408000002080000020800008c08000100000a -01000007010000050100000801000006010000010100000c010000050100000901000001 -0100000401000004010000210101000801000006010000010100000c0100000501000009 -01000001010000040100001b010100c301010009010000010100004a0100070103030001 -050107010304000105020202010302020503080000080800000008000000080000020800 -00010800000a0800000708000001080000020800000408000002080000020800008c0800 -0100000801010007010000050100000801000007010000010100000a010100040101000a -0100000101000005010000040101001f0101000701000007010000010100000a01010004 -0101000a01000001010000050100001a010100c301010009010000010100004a01000701 -030300010502070103030001050202020103020205030800000808000000080000000800 -0002080000010800000a08000004080300010800000208000004080000020804008c0800 -0100000a01000005010000050100000a01000006010000010100000c0100000501000009 -010000010100000401000004010000210101000801000006010000010100000c01000005 -0100000901000001010000040100001b010100c301010009010000010100004a01000701 -030200010503070103030001050202020103020205030800000808000000080000000800 -0003080000000800000a0800000308000002080000010800000208000004080000020800 -009008000100000a01000004010000050100000c01000005010000010100000c01000005 -01000009010000010100000301000005010000210101000901000005010000010100000c -010000050100000901000001010000030100001c010100c301010009010000010100004a -010007010302000105040701030200010502020201030202050308000008080000000800 -0000080000030801000b0800000308000002080000010801000108000004080000020800 -00020800008c08000100000a010000030100000501000007010100040100000401000001 -010000030101000201000002010000010100000201000003010100030100000101000002 -01000006010000210101000a010000040100000101000003010100020100000201000001 -01000002010000030101000301000001010000020100001d010100c30101000901000001 -0100004a0100070103010001050507010302000105020202010302020503080000080800 -000008000000080000040800000c08010002080300010800000008010005080000030802 -008d08000100000a01000003010400010104000301010005010000040101000401010003 -0102000301020004010100040101000201000007010000210101000b0100000401010004 -01010003010200030102000401010004010100020100001e010100c30101000a0101004b -010007010301000105060701030100010502020201030202050308000012080000010805 -00af08000100000a01000014010000060100002a01000008010000210101000c0100002a -0100001f010100c301010058010007010300000105070701030100010502020201030202 -05030800000f08000000080000b808000100000b010100100101003b0101002201010059 -010100c30101005801000701030000010508070103000001050202020103020205030800 -0010080000b908000100008101010059010100c301010058010007010001070b03000001 -05020202010302020503080000cb08000100008101010059010100c30101005801000701 -0000070d000105020202010302020503080000cb08000100008101010059010100c30101 -005801000701030e000105020202010302020503080000cb080001000081010100590101 -00c30101005801000701001005020202010302020503080000cb08000100008101010059 -010100c30101005801000701000d070000010502020201030202050308cd01ff01ff0100 -07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202 -01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce0701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a070100010502020201030202050301ff01ff01ce07010001050a -070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -0502020201030202050301ff01ff01ce07010001050a0701000105020202010302020503 -01ff01ff01ce07010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a070100010502020201030202050301ff01ff -01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502 -020201030202050301ff01ff01ce07010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -0202050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a070100010502020201030202050301ff01ff01ce07010001 -050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -00010502020201030202050301ff01ff01ce07010001050a070100010502020201030202 -050301ff01ff01ce07010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a070100010502020201030202050301ff -01ff01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001070c -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0000070d00010502020201030202050301ff01ff01ce0701030e00010502020201030202 -050301ff01ff01ce0701030e000105020202010302020503010000cb0101008101010059 -010100c30101005801000701030e000105020202010302020503010000cb010100810101 -0059010100c30101005801000701030e000105020202010302020503010000cb01010081 -01010059010100c30101005801000701030e000105020202010302020503010000cb0101 -008101010059010100c30101005801000701030e000105020202010302020503010000cb -0101008101010059010100c30101005801000701030e0001050202020103020205030100 -00cb0101008101010059010100c30101005801000701030e000105020202010302020503 -010000cb0101008101010059010100c30101005801000701030e00010502020201030202 -0503010000cb0101008101010059010100c30101005801000701030e0001050202020103 -02020503010000cb0101008101010059010100c30101005801000701030e000105020202 -010302020503010000cb0101008101010059010100c30101005801000701030e00010502 -0202010302020503010000cb0101008101010059010100c30101005801000701030e0001 -05020202010302020503010000cb0101008101010059010100c30101005801000701030e -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -030e000105020202010302020503010000cb0101008101010059010100c3010100580100 -0701030e000105020202010302020503010000cb0101008101010059010100c301010058 -01000701030e000105020202010302020503010000cb0101008101010059010100c30101 -005801000701030e000105020202010302020503010000cb0101008101010059010100c3 -0101005801000701030e000105020202010302020503010000cb01010081010100590101 -00c30101005801000701030e000105020202010302020503010000cb0101008101010059 -010100c30101005801000701030e00010502020201030202050301ff01ff01ce0701030e -00010502020201030202050301ff01ff01ce0701001005020202010302020503010000cb -0101008101010059010100c301010058010007010300000c070000010502020201030202 -0503010000cb0101008101010059010100c3010100580100070103000001050807010300 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -03010001050707010300000105020202010302020503010000cb01010081010100590101 -00c3010100580100070103010001050607010301000105020202010302020503010000cb -0101008101010059010100c3010100580100070103020001050507010301000105020202 -010302020503010000cb0101008101010059010100c30101005801000701030200010504 -07010302000105020202010302020503010000cb0101008101010059010100c301010058 -0100070103030001050307010302000105020202010302020503010000cb010100810101 -0059010100c3010100580100070103030001050207010303000105020202010302020503 -010000cb0101008101010059010100c30101005801000701030400010501070103030001 -05020202010302020503010000cb0101008101010059010100c301010058010007010304 -0001050007010304000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010305000007020304000105020202010302020503010000cb01010081 -01010059010100c301010058010007010305000007010305000105020202010302020503 -010000cb0101008101010059010100c30101005801000701030607010305000105020202 -010302020503010000cb0101008101010059010100c30101005801000701030607000306 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -001005020202010302020503010000cb0101008101010059010100c30101005801000700 -00110502020201030202050207ff07ff07d30511020201030202050207ff07ff07d20000 -051102020103020205020701030d0000030000ff00ff00af03000001030c000105110202 -0103020205020701030b00010700030000ff00ff00ae070003000003030a000105110202 -01030202050207010309000207010300000105ff05ff05ab070103000005030800010511 -0202010302020502070103070003050007010300000105ff05ff05ab0701030000010501 -00030306000105110202010302020502070103050003050207010300000105ff05ff05ab -070103000001050300030304000105110202010302020502070103030003050407010300 -000105ff05ff05ab07010300000105050003030200010511020201030202050207010301 -0003050607010300000105ff05ff05ab0701030000010507000303000001051102020103 -020205020705050807010300000105ff05ff05ab07010300000105080703000105110202 -010302020502070103010703050607010300000105ff05ff05ab07010300000105070703 -0300000105110202010302020502070103030703050407010300000105ff05ff05ab0701 -030000010505070303020001051102020103020205020701030507030502070103000001 -05ff05ff05ab070103000001050307030304000105110202010302020502070103070703 -050007010300000105ff05ff05ab07010300000105010703030600010511020201030202 -05020701030907040300000105ff05ff05ab070103000001070303080001051102020103 -020205020701030b07020300000107ff07ff07ad030000010701030a0001051102020101 -000405020701030d07000300000007ff07ff07ae030000000700030c0001051100050202 -04000502070100ff00ff00d105110000020204000000020204000502070000ff00ff00d2 -051100000202040000000202040005ff05ff05e800000202040000000202040005ff05ff -05e800000202040000000202040005ff05ff05e8000002020400000002020400000502ff -02ff02dc00060202040000000208040002ff02ff02dc00000208040000000208040002ff -02ff02dc00000208040000000208040001ff01ff01dc0000020804000000040901ff01ff -01dc00000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 42 377 247 -%%EOF diff --git a/lib/tv/doc/src/tv_start_mnesia.gif b/lib/tv/doc/src/tv_start_mnesia.gif Binary files differdeleted file mode 100644 index 0ad04331cd..0000000000 --- a/lib/tv/doc/src/tv_start_mnesia.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_start_mnesia.ps b/lib/tv/doc/src/tv_start_mnesia.ps deleted file mode 100644 index a90185089d..0000000000 --- a/lib/tv/doc/src/tv_start_mnesia.ps +++ /dev/null @@ -1,835 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_mnesia.eps) -%%CreationDate: (Mon Mar 19 17:15:23 2001) -%%BoundingBox: 0 0 377 205 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 377 205 -userdict begin -%%BeginData: -DisplayImage -0 0 -377.000000 205.000000 -12 -755 410 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -b22222 -828282 -a3a3a3 -000000 -000000 -000000 -000000 -000000 -000000 -000000 -000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff -02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202 -04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff -02d000000202040000000202040002080000020d040002ea01030211010302330101021b -010102060101024001010230010102f700000202040000000202040002080000020d0400 -02ea010102020107020001010203010102010101020e010202020102021b0101020e0100 -020b01010206010102400101020c0104021e010102f70000020204000000020204000208 -0000020d040002ea010102050101020301010203010102010101020e010202020102022b -0101020b010102060101024e010102020101021d010102f7000002020400000002020400 -02080000020204060203040002ea010102050101020301010203010102010101020e0102 -020201020202010102000101020301030203010402020101020201030205010402010103 -020301010200010102030101020201030203010402060103020301010200010102070101 -020001010201010102030103020301010202010102000101020201010201010302020101 -020001010201010102030103020201010200010102010101020201030202010102020101 -02e6000002020400000004030208000002020400030400000203040002ea010102050101 -020401010202010002020101020e01000200010102000100020001010202010202000101 -020101010201010102010101020601010201010102010101020501010202010102010101 -020201020200010102020101020101010201010102010101020901010201010102020102 -020001010206010202000102020001010201010102010101020201010202010202000101 -020101010200010102000101020201020200010202000101020101010201010102010101 -02000101020101010201010102010101020101010202010102e6000004030101020b0000 -02030400030200000204040002ea010102050101020401010201010102020101020e0100 -020001010200010002000101020201010201010102010101020101010201010202050101 -020501010205010102060101020201010201010102020101020101010201010102010102 -020801010201010102020101020101010206010102010101020101010205010102020101 -020201010201010102010101020001010200010102020101020101010201010102050101 -02010102020301010201010102010101020101010202010002ea0103020b000002030400 -030200000204040002ea010102050101020501010200010002030101020e010002000101 -020001000200010102020101020101010201010502020103020301010202010402050101 -020301040202010102010101020201010201010502020103020601010201010102020101 -020101010206010102010101020101010202010402020101020201010201010102010101 -020001010200010102020101020101010201010102020104020101010204010102010105 -020201010200010102ea0103020b000002040400030000000205040002ea010102050101 -0205010302030101020e0100020101010201010102020101020101010201010102080102 -020201010201010102010101020501010202010102010101020201010201010102020101 -020101010208010202050101020101010202010102010101020601010201010102010101 -020101010201010102020101020201010201010102010101020101010200010102010101 -020101010201010102010101020101010201010102040101020101010206010102000100 -02eb0103020b000002040400030000000205040002ea0101020501010206010102040101 -020e01000201010102010101020201010201010102010101020201000205010102020101 -020101010201010102050101020201010201010102020101020101010202010102010101 -020201000205010102050101020101010202010102010101020601010201010102010101 -020101010201010102020101020201010201010102020101020701010201010102010101 -0201010102010101020101010204010102010101020201000203010202eb0103020b0000 -020500000206040002ea0101020501010206010102040101020e01000205010102020101 -020101010202010302020104020301010202010202000101020501020201010202000101 -020101040203010102020103020201040207010302030101020101010206010102010101 -020101010202010202000101020101010202010102010101020301050202010102010101 -0201010102020102020001010200010102040101020201030204010102ec0103020b0000 -020d040002ea01030211010302dd010102ed0103020b0000020d040002ff02e2010102ed -0103020b0000020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee -010302ff02ff02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202 -010302ff02ff02ee0103020200ff00ff00e802020103020200ff00ff00e7070002020103 -0202000105ff05ff05e40701020201030202000105ff05ff05e407010202010302020001 -05ff05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff -05e407010202010302020001050b06040504060005030602051f06000502060005040600 -05270602050b06000506060005ff05ff0535060005020600050906020513070102020103 -02020001050b0600050f0600051f060005020600052c060005020600050a060005ff05ff -053d060005020600050b0600051307010202010302020001050b06000506060205050600 -050306020518060005020600050206020503060205020600050206000517060005020600 -050106000500060105020604050206020503060205020600050006010503060205ff05ff -052006000502060005020602050506000502060005000601050c07010202010302020001 -050b06000508060005050600050206000502060005180600050006000505060005020600 -050206000501060005020600051706000502060005010601050106000503060005060600 -05020600050206000501060105010600050106000502060005ff05ff051f060005020600 -0501060005020600050406000502060105010600050b07010202010302020001050b0603 -050506000505060005020600050206000518060005000600050506000502060005020600 -050106000500060005000600051706000502060005010600050206000503060005060600 -050206000502060005010600050206000501060005ff05ff052306040501060005020600 -050406000502060005020600050b07010202010302020001050b06000508060005050600 -050206040518060005000600050506000502060405010600050006000500060005170600 -050206000501060005020600050306000506060005020600050206000501060005020600 -0502060205ff05ff052006000502060005010604050406000502060005020600050b0701 -0202010302020001050b0600050806000505060005020600051d06000506060005020600 -050506000500060005000600051706000502060005010600050206000503060005060600 -050206000502060005010600050206000505060005ff05ff051f06000502060005010600 -050806000502060005020600050b07010202010302020001050b06000508060005050600 -050206000502060005190600050606000502060005020600050106000500060005000600 -051706000502060005010601050106000503060005060600050206000502060005010600 -05020600050106000502060005ff05ff051f060005020600050106000502060005040600 -0502060105010600050b07010202010302020001050b0600050806000505060005030602 -051a06000506060005030602050306000500060005190602050206000500060105050601 -050406000503060205020600050206000502060205ff05ff052006000502060005020602 -050506000502060005000601050c070102020103020200010576060005ff05ff055b0600 -050f07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606 -050e0600050f07010202010302020001050a0606052a0606052a06060500060005ff05ff -05450606050e0600050f0701020201030202000105ff05ff05e407010202010302020001 -05ff05ff05e40701020201030202000105ff05ff05e40701020201030202000107ff07ff -07e6020201030202000007ff07ff07e702020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e8020201030202051c -01020504010305c1080205040803051a0802057f01010505010205f00102050401030519 -0101052f020201030202050e01060508010005060101050f010205010102059b08060508 -0800050608010510080505040801054d010205240104050d0101051e0102052401020501 -0102059301060508010005060101051101030535020201030202050e0100050101010500 -010005070101050601000511010105010100059d08000501080105000800050708010506 -08000513080105060800054d0101050001010524010105000101050c0100051e01010500 -010105240101050101000595010005010101050001000507010105060100051101010501 -010105340202010302020510010105030103050201030503010105030103050801020500 -01010501010305000101050001000500010005020103058b080105030803050208030503 -080105030803050a080105030804054c0101050101050500010305000102050201030501 -01010500010205070101050101010500010305030104051d010105010105050001030500 -010205020103050101010500010205070102050001010501010305000101050001000500 -010005020103058301010503010305020103050301010503010305090101050101000500 -010305020105050101030521020201030202051001010506010105000101050101010502 -010105020101050101010507010005000100050001000505010105000105050001010501 -0101058a0801050608010500080105010801050208010502080105010801050908010502 -080105010801054c01000502010105000101050201000500010205000101050001010501 -010105010102050001000507010105010101050201010502010105010101051d01000502 -010105000101050201000500010205000101050001010501010105010102050001000507 -010005000100050001000505010105000105050001010501010105820101050601010500 -010105010101050201010502010105010101050801020504010105020101050001010501 -010105010101052002020103020205100100050401040500010105010101050201010501 -0106050701000500010205020104050001010500010005000107058a0800050408040500 -0801050108010502080105010806050908010501080105020801054b0101050201000501 -01010500010005000100050001010501010805010101050a010305040101050101010502 -0101051c010105020100050101010500010005000100050001010501010805010101050a -010005000102050201040500010105000100050001070582010005040104050001010501 -01010502010105010106050901020503010105040101050101060520020201030202050f -0101050201010501010105000101050201010501010105020101050b0101050001010501 -01010501010105010100050001000500010005000101058e080105020801050108010500 -0801050208010501080105020801050d08010502080105010801054c0101050101010501 -01020500010005010100050201000500010105050101050a010105060101050201010501 -0101051d010105010101050101020500010005010100050201000500010105050101050a -010105000101050101010501010105010100050001000500010005000101058601010502 -01010501010105000101050201010501010105020101050b010105010101050201010503 -0101050301010525020201030202050f0101050201010501010105000101050101010502 -010105020101050101010507010005010101050101010501010105000101050001000500 -01000500010105010101058a080105020801050108010500080105010801050208010502 -080105010801050908010502080105010801054c01010500010105020103050101010501 -0101050001010501010105010101050a0101050601010502010105010101051d01010500 -0101050201030501010105010101050001010501010105010101050a0100050101010501 -010105010101050001010500010005000100050001010501010105820101050201010501 -010105000101050101010502010105020101050101010507010105010101050201010502 -01020500010105000101050101010521020201030202050e01030502010a050101050501 -0103050701020500010105020107050001000500010105000103058a08030502080a0501 -0805050108030508080505010805054c0102050301010500010005000103050001020500 -010305010104050701030503010505010105051d01020503010105000100050001030500 -010205000103050101040507010205000101050201070500010005000101050001030582 -01030502010a050101050501010305090103050101050500010505010103052202020103 -020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103 -020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103 -020205ff05ff05e8020201030202050201ff01ff01e205020202010302020503010000cb -0101008101010059010100c30101005801000711000005020202010302020503010000cb -0101008101010059010100c3010100580100070103060700030600010502020201030202 -0503010000cb010100810101000c0100002a0100001f010100c301010058010007010305 -0000070003060001050202020103020205030100000a010000130100000c0100000a0100 -000601020086010100810101000b0100000401010009010400010104000a010100020100 -001e0101002701000028010000040100006a0101000a0101004b01000701030500000701 -03050001050202020103020205030100000a010000130100000c0100000a010000080100 -0086010100810101000a01000004010000010100000801000002010000010100000d0100 -0001010000020100001d010100570100006a01010009010000010100004a010007010304 -000107010305000105020202010302020503010000080104000201020003010200020104 -000801040002010200020100000001010005010000030102007f01010081010100090100 -0005010000010100000c010000010100000d01000001010000030100001c010100080101 -000001000002010000000101000301020003010200030102000301020009010100000100 -0003010200020100000001010003010200020104000201020002010000000101005b0101 -0009010000010100004a0100070103040001050007010304000105020202010302020503 -0100000a01000003010000020100000101000002010000030100000c0100000301000002 -01000001010100010100000401000002010000020100007e010100810101000801000006 -010000010100000b010000020103000a01000001010000040100001b0101000801000000 -010000000100000101010001010000010100000201000001010000020100000401000002 -010000020100000801000000010000000100000101000002010000010101000101000004 -01000004010000030100000201000001010100010100005a01010009010000010100004a -01000701030300010501070103040001050202020103020205030100000a010000030100 -000201000001010000070100000c01000007010000010100000201000004010000020100 -00020100007e010100810101000701000007010000010100000b01000006010000090100 -0001010000050100001a0101000801000000010000000100000101000002010000010100 -000201000001010000080100000601000008010000000100000001000001010000020100 -00010100000201000004010000040100000301000002010000010100005e010100090100 -00010100004a01000701030300010502070103030001050202020103020205030100000a -0100000301040002010200040100000c0100000401030001010000020100000401000002 -0104007e010100810101000801000006010000010100000b010000060100000901000001 -010000040100001b01010008010000000100000001000001010000020100000101040002 -010200050100000301030008010000000100000001000001010000020100000101000002 -01000004010000040100000301000002010000010100005e01010009010000010100004a -01000701030200010503070103030001050202020103020205030100000a010000030100 -0009010000030100000c0100000301000002010000010100000201000004010000020100 -0082010100810101000901000005010000010100000a0100000301000002010000090100 -0001010000030100001c0101000801000000010000000100000101000002010000010100 -000901000004010000020100000201000008010000000100000001000001010000020100 -00010100000201000004010000040100000301000002010000010100005e010100090100 -00010100004a01000701030200010504070103020001050202020103020205030100000a -01000003010000020100000101000002010000030100000c010000030100000201000001 -010100010100000401000002010000020100007e010100810101000a0100000401000001 -01000003010100040100000301000002010000030101000301000001010000020100001d -010100080100000001000000010000010100000201000001010000020100000101000002 -010000040100000201000002010000080100000001000000010000010100000201000001 -0100000201000004010000040100000301000002010000010100005e0101000901000001 -0100004a01000701030100010505070103020001050202020103020205030100000b0101 -000201020003010200050101000b01010002010300010100000001010005010000030102 -007f010100810101000b0100000401010004010100040100000401020004010100040101 -00020100001e010100080100000001000000010000010100000201000002010200030102 -000501000003010300080100000001000000010000020102000201000002010000040100 -000501010002010200020100005e0101000a0101004b0100070103010001050607010301 -00010502020201030202050301000023010500a1010100810101000c0100002a0100001f -010100310105008b01010058010007010300000105070701030100010502020201030202 -0503010000cb0101008101010059010100c3010100580100070103000001050807010300 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001070b0300000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010000070d000105020202010302020503010000cb01010081010100590101 -00c30101005801000701030e000105020202010302020503010000cb0101008101010059 -010100c30101005801000701001005020202010302020503010000cb0101008101010059 -010100c30101005801000701000d070000010502020201030202050301ff01ff01ce0701 -0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103 -0202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -01ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce07010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a070100010502020201030202050301ff01ff01ce07010001050a0701 -00010502020201030202050301ff01ff01ce07010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -020201030202050301ff01ff01ce07010001050a070100010502020201030202050301ff -01ff01ce07010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a070100010502020201030202050301ff01ff01ce -07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202 -01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff01ce0701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a070100010502020201030202050301ff01ff01ce07010001050a -070100010502020201030202050301ff01ff01ce07010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -0502020201030202050301ff01ff01ce07010001050a0701000105020202010302020503 -01ff01ff01ce07010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a070100010502020201030202050301ff01ff -01ce07010001050a070100010502020201030202050301ff01ff01ce07010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001070c0001 -05020202010302020503010000cb0101008101010059010100c301010058010007010000 -070d00010502020201030202050301ff01ff01ce0701030e000105020202010302020503 -01ff01ff01ce0701030e000105020202010302020503010000cb01010081010100590101 -00c30101005801000701030e000105020202010302020503010000cb0101008101010059 -010100c30101005801000701030e000105020202010302020503010000cb010100810101 -0059010100c30101005801000701030e000105020202010302020503010000cb01010081 -01010059010100c30101005801000701030e000105020202010302020503010000cb0101 -008101010059010100c30101005801000701030e000105020202010302020503010000cb -0101008101010059010100c30101005801000701030e0001050202020103020205030100 -00cb0101008101010059010100c30101005801000701030e000105020202010302020503 -010000cb0101008101010059010100c30101005801000701030e00010502020201030202 -0503010000cb0101008101010059010100c30101005801000701030e0001050202020103 -02020503010000cb0101008101010059010100c30101005801000701030e000105020202 -010302020503010000cb0101008101010059010100c30101005801000701030e00010502 -0202010302020503010000cb0101008101010059010100c30101005801000701030e0001 -05020202010302020503010000cb0101008101010059010100c30101005801000701030e -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -030e000105020202010302020503010000cb0101008101010059010100c3010100580100 -0701030e000105020202010302020503010000cb0101008101010059010100c301010058 -01000701030e000105020202010302020503010000cb0101008101010059010100c30101 -005801000701030e000105020202010302020503010000cb0101008101010059010100c3 -0101005801000701030e000105020202010302020503010000cb01010081010100590101 -00c30101005801000701030e00010502020201030202050301ff01ff01ce0701030e0001 -0502020201030202050301ff01ff01ce0701001005020202010302020503010000cb0101 -008101010059010100c301010058010007010300000c0700000105020202010302020503 -010000cb0101008101010059010100c30101005801000701030000010508070103000001 -05020202010302020503010000cb0101008101010059010100c301010058010007010301 -0001050707010300000105020202010302020503010000cb0101008101010059010100c3 -010100580100070103010001050607010301000105020202010302020503010000cb0101 -008101010059010100c30101005801000701030200010505070103010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010302000105040701 -0302000105020202010302020503010000cb0101008101010059010100c3010100580100 -070103030001050307010302000105020202010302020503010000cb0101008101010059 -010100c30101005801000701030300010502070103030001050202020103020205030100 -00cb0101008101010059010100c301010058010007010304000105010701030300010502 -0202010302020503010000cb0101008101010059010100c3010100580100070103040001 -050007010304000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010305000007020304000105020202010302020503010000cb010100810101 -0059010100c3010100580100070103050000070103050001050202020103020205030100 -00cb0101008101010059010100c301010058010007010306070103050001050202020103 -02020503010000cb0101008101010059010100c301010058010007010306070003060001 -05020202010302020503010000cb0101008101010059010100c301010058010007010010 -05020202010302020503010000cb0101008101010059010100c301010058010007000011 -0502020201030202050207ff07ff07d30511020201030202050207ff07ff07d200000511 -02020103020205020701030d0000030000ff00ff00af03000001030c0001051102020103 -020205020701030b00010700030000ff00ff00ae070003000003030a0001051102020103 -0202050207010309000207010300000105ff05ff05ab0701030000050308000105110202 -010302020502070103070003050007010300000105ff05ff05ab07010300000105010003 -0306000105110202010302020502070103050003050207010300000105ff05ff05ab0701 -030000010503000303040001051102020103020205020701030300030504070103000001 -05ff05ff05ab070103000001050500030302000105110202010302020502070103010003 -050607010300000105ff05ff05ab07010300000105070003030000010511020201030202 -05020705050807010300000105ff05ff05ab070103000001050807030001051102020103 -02020502070103010703050607010300000105ff05ff05ab070103000001050707030300 -000105110202010302020502070103030703050407010300000105ff05ff05ab07010300 -0001050507030302000105110202010302020502070103050703050207010300000105ff -05ff05ab0701030000010503070303040001051102020103020205020701030707030500 -07010300000105ff05ff05ab070103000001050107030306000105110202010302020502 -0701030907040300000105ff05ff05ab0701030000010703030800010511020201030202 -05020701030b07020300000107ff07ff07ad030000010701030a00010511020201010004 -05020701030d07000300000007ff07ff07ae030000000700030c00010511000502020400 -0502070100ff00ff00d105110000020204000000020204000502070000ff00ff00d20511 -00000202040000000202040005ff05ff05e800000202040000000202040005ff05ff05e8 -00000202040000000202040005ff05ff05e8000002020400000002020400000502ff02ff -02dc00060202040000000208040002ff02ff02dc00000208040000000208040002ff02ff -02dc00000208040000000208040001ff01ff01dc0000020804000000040901ff01ff01dc -00000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 377 205 -%%EOF diff --git a/lib/tv/doc/src/tv_start_other_node.gif b/lib/tv/doc/src/tv_start_other_node.gif Binary files differdeleted file mode 100644 index 897686e5ef..0000000000 --- a/lib/tv/doc/src/tv_start_other_node.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_start_other_node.ps b/lib/tv/doc/src/tv_start_other_node.ps deleted file mode 100644 index 34477bed6c..0000000000 --- a/lib/tv/doc/src/tv_start_other_node.ps +++ /dev/null @@ -1,2316 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (./tv_start_other_node.tmp.eps) -%%CreationDate: (Tue Jun 12 16:05:42 2001) -%%BoundingBox: 0 21 400 186 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 21 400 186 -userdict begin -%%BeginData: -DisplayImage -0 21 -400.000000 165.000000 -12 -1001 414 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -4ac1df -c2c2c2 -6b6b6b -d9d9d9 -b22222 -aab6aa -e7e7e7 -000000 -000000 -000000 -000000 -000000 -000000 -03ff03ff03ff03ff03ff03ff03ff03ff03c5000a01ff01ff01dc000a03f5000002080500 -01ff01ff01dc00000208050003f500000208050002ff02ff02dc00000208050003f50000 -0208050002ff02ff02dc00000208050003f500000202050602ff02ff02dc000005050202 -050003f50000020205000209000d02ff02ff02d000000202050003f50000020205000208 -0000020d050002e101030211010302380101020601010238010102310101022f010102ee -00000202050003f500000202050002080000020d050002e1010102020107020001010203 -010102010101020e0105020001070201010302070100020b010102060101023301000203 -010102310101020b0104021e010102ee00000202050003f500000202050002080000020d -050002e1010102050101020301010203010102010101020e010102070101020301010201 -010102050101020b010102060101023201010203010102310101020a010102020101021d -010102ee00000202050003f500000202050002080000020205060203050002e101010205 -0101020301010203010102010101020e0101020701010203010102080104020101030203 -010102000101020301010202010302030104020601030203010102000101020701030201 -01040201010102000101020301030202010102000101020a010102000101020301030203 -010402020103020201010201010302020101020001010201010102030103020201010200 -01010201010102020103020201010202010102dd00000202050003f50000050302080000 -02020500040400000203050002e1010102050101020401010202010002020101020e0101 -020701010203010202080101020201010201010102020102020001010202010102010101 -020101010201010102090101020101010202010202000101020501010201010102010101 -020301020200010102010101020101010201010102000101020a01020200010102010101 -020101010201010102010101020101010201010102010101020001010200010102020102 -020001020200010102010101020101010201010102000101020101010201010102010101 -020101010202010102dd0000050303f50101020b000002030500040200000204050002e1 -010102050101020401010201010102020101020e01040204010102040103020601010206 -010102020101020101010202010102010101020101010201010202080101020101010202 -010102010101020501010201010102010101020301010201010102010101020101010201 -0102020c0101020101010201010102010101020101010201010102010101020101010201 -010102000101020001010202010102010101020101010205010102010102020301010201 -010102010101020101010202010002e1010103f50101020b000002030500040200000204 -050002e1010102050101020501010200010002030101020e010102070101020601020205 -010102030104020201010201010102020101020101050202010302060101020101010202 -01010201010102050101020101010201010102030101020101010201010502010101020d -010102010101020101010201010102010101020101010201010502010101020001010200 -010102020101020101010201010102020104020101010204010102010105020201010200 -010102e1010103f50101020b000002040500040000000205050002e10101020501010205 -010302030101020e01010207010102070101020501010202010102010101020201010201 -010102020101020101010208010202050101020101010202010102010101020501010201 -01010201010102030101020101010201010102050101020d010102010101020101010201 -010102010101020101010201010102050101020101010200010102010101020101010201 -01010201010102010101020101010204010102010101020601010200010002e2010103f5 -0101020b000002040500040000000205050002e10101020501010206010102040101020e -010102070101020301010201010102050101020201010201010102020101020101010202 -010102010101020201000205010102050101020101010202010102010101020501010201 -0101020101010203010102010101020101010202010002010101020d0101020101010201 -010102010101020101010200010202010101020201000202010102070101020101010201 -01010201010102010101020101010204010102010101020201000203010202e2010103f5 -0101020b0000020500000206050002e10101020501010206010102040101020e01050203 -010102040103020701020201010202000101020101040203010102020103020201040207 -01030203010102010101020601030203010202010101020101010202010302020101020d -010102010101020201030203010102000101020201030204010502020101020101010201 -010102020102020001010200010102040101020201030204010102e3010103f50101020b -0000020d050002e1010302110103029201060255010102e4010103f50101020b0000020d -050002ff02eb010102e4010103f50101020b0000020d050002ff02ff02d2010103f50101 -020c050d02ff02ff02d3010103f5010102ff02ff02ee010103f5010102ff02ff02ee0101 -03f5010102ff02ff02ee010103f5010102ff02ff02ee010103f5010102ff02ff02ee0101 -03f501010202060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -00000600000006000000060000000600000006000202010103f501010202000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -06000000060001000202010103f5010102020600000006ff06ff06e40100060002020101 -03f501010202000006ff06ff06e601000202010103f5010102020600000006ff06ff06e4 -010006000202010103f501010202000006ff06ff06e601000202010103f5010102020600 -000006ff06ff06e4010006000202010103f5010102020000060c07040604070006030702 -061f0700060207000604070006270702060b07000606070006ff06ff0635070006020700 -06090702061401000202010103f50101020206000000060b0700060f0700061f07000602 -0700062c070006020700060a070006ff06ff063d070006020700060b0700061301000600 -0202010103f5010102020000060c07000606070206050700060307020618070006020700 -060207020603070206020700060207000617070006020700060107000600070106020704 -060207020603070206020700060007010603070206ff06ff062007000602070006020702 -060507000602070006000701060d01000202010103f50101020206000000060b07000608 -070006050700060207000602070006180700060007000605070006020700060207000601 -070006020700061707000602070006010701060107000603070006060700060207000602 -07000601070106010700060107000602070006ff06ff061f070006020700060107000602 -0700060407000602070106010700060b010006000202010103f5010102020000060c0703 -060507000605070006020700060207000618070006000700060507000602070006020700 -060107000600070006000700061707000602070006010700060207000603070006060700 -060207000602070006010700060207000601070006ff06ff062307040601070006020700 -060407000602070006020700060c01000202010103f50101020206000000060b07000608 -070006050700060207040618070006000700060507000602070406010700060007000600 -070006170700060207000601070006020700060307000606070006020700060207000601 -0700060207000602070206ff06ff06200700060207000601070406040700060207000602 -0700060b010006000202010103f5010102020000060c0700060807000605070006020700 -061d07000606070006020700060507000600070006000700061707000602070006010700 -060207000603070006060700060207000602070006010700060207000605070006ff06ff -061f07000602070006010700060807000602070006020700060c01000202010103f50101 -020206000000060b07000608070006050700060207000602070006190700060607000602 -070006020700060107000600070006000700061707000602070006010701060107000603 -07000606070006020700060207000601070006020700060107000602070006ff06ff061f -0700060207000601070006020700060407000602070106010700060b0100060002020101 -03f5010102020000060c0700060807000605070006030702061a07000606070006030702 -060307000600070006190702060207000600070106050701060407000603070206020700 -060207000602070206ff06ff062007000602070006020702060507000602070006000701 -060d01000202010103f501010202060000000676070006ff06ff065b0700060f01000600 -0202010103f5010102020000060b0706062a0706062a07060600070006ff06ff06450706 -060e0700061001000202010103f50101020206000000060a0706062a0706062a07060600 -070006ff06ff06450706060e0700060f010006000202010103f501010202000006ff06ff -06e601000202010103f5010102020600000006ff06ff06e4010006000202010103f50101 -0202000006ff06ff06e601000202010103f5010102020600000006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -0202010103f5010102020000060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -0600010006000100060001000600010006000100060001000202010103f50101020206ff -06ff06e80202010103f50101020206ff06ff06e80202010103f50101020206ff06ff06e8 -0202010103f50101020206ff06ff06e80202010103f50101020206ff06ff06e802020101 -0303000a01d9000a03010101020206ff06ff06e802020101030300000208050001d90000 -0208050003010101020206ff06ff06e802020101030300000208050002d9000002080500 -03010101020206ff06ff06e802020101030300000208050002d900000208050003010101 -020206ff06ff06e802020101030300000202050602d90000050502020500030101010202 -06ff06ff06e80202010103030000020205000209000d02cd000002020500030101010202 -06ff06ff06e802020101030300000202050002080000020d0500021a0103021101030250 -0101021a0101022700000202050003010101020206ff06ff06e802020101030300000202 -050002080000020d0500021a01010202010702000101020301010201010102100103022b -0100020e0101021a0101022700000202050003010101020206ff06ff06e8020201010303 -00000202050002080000020d0500021a010102050101020301010203010102010101020f -01010201010102290101020e0101021a0101022700000202050003010101020206ff06ff -06e8020201010303000002020500020800000202050602030500021a0101020501010203 -01010203010102010101020e010102060103020301010200010102030101020001010203 -010302030103020001040201010302030104020601010200010102030103020301040202 -010302030104021700000202050003010101020206ff06ff06e802020101030300000503 -02080000020205000404000002030500021a010102050101020401010202010002020101 -020e01010205010102010101020201020200010102020102020001010201010102010101 -020101010201010102000101020201010201010102010101020101010206010202000101 -02010101020101010201010102010101020101010201010102010101021b000005030301 -0101020206ff06ff06e80202010103030101020b0000020305000402000002040500021a -010102050101020401010201010102020101020e01010205010102010101020201010201 -010102020101020101010201010102010101020101010204010102020101020101010201 -010102010101020601010201010102010101020101010201010102010101020101010201 -010102010102021d010103010101020206ff06ff06e80202010103030101020b00000203 -05000402000002040500021a010102050101020501010200010002030101020e01010205 -010102010101020201010201010102020101020101010201010502010101020401010202 -010502010101020101010206010102010101020101010201010102010101020101010201 -010502020103021b010103010101020206ff06ff06e80202010103030101020b00000204 -05000400000002050500021a0101020501010205010302030101020e0101020501010201 -010102020101020101010202010102010101020101010205010102040101020201010205 -010102010101020601010201010102010101020101010201010102010101020101010208 -0102021a010103010101020206ff06ff06e80202010103030101020b0000020405000400 -000002050500021a0101020501010206010102040101020f010102020100020001010201 -010102020101020101010202010102010101020101010202010002010101020201000200 -010102020101020201000201010102000102020601010201010102010101020101010201 -010102000102020101010202010002050101021a010103010101020206ff06ff06e80202 -010103030101020b00000205000002060500021a01010205010102060101020401010210 -010302020103020301010201010102020101020101010202010302030103020201020201 -010302030101020001010206010102010101020201030203010102000101020201030202 -0104021b010103010101020206ff06ff06e80202010103030101020b0000020d0500021a -010302110103029a010103010101020206ff06ff06e80202010103030101020b0000020d -050002cf010103010101020206ff06ff06e80202010103030101020b0000020d050002cf -010103010101020206ff06ff06e80202010103030101020c050d02d00101030101010202 -06ff06ff06e8020201010303010102eb010103010101020206ff06ff06e8020201010303 -010102eb010103010101020206ff06ff06e8020201010303010102eb0101030101010202 -06ff06ff06e8020201010303010102eb0101030101010202061c01020604010306c10102 -06040103061a0102067f01010605010206f001020604010306190101062f020201010303 -010102eb0101030101010202060e01060608010006060101060f010206010102069b0106 -06080100060601010610010506040101064d010206240104060d0101061e010206240102 -060101020693010606080100060601010611010306350202010103030101020206000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -06000000060000000600000006000000060000000600000002020101030101010202060e -0100060101010600010006070101060601000611010106010100069d0100060101010600 -010006070101060601000613010106060100064d0101060001010624010106000101060c -0100061e0101060001010624010106010100069501000601010106000100060701010606 -010006110101060101010634020201010303010102020000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060002020101030101010202061001010603010306020103 -060301010603010306080102060001010601010306000101060001000600010006020103 -068b010106030103060201030603010106030103060a010106030104064c010106010105 -060001030600010206020103060101010600010206070101060101010600010306030104 -061d01010601010506000103060001020602010306010101060001020607010206000101 -060101030600010106000100060001000602010306830101060301030602010306030101 -060301030609010106010100060001030602010506010103062102020101030301010202 -0600000006e2010002020101030101010202061001010606010106000101060101010602 -010106020101060101010607010006000100060001000605010106000105060001010601 -0101068a0101060601010600010106010101060201010602010106010101060901010602 -010106010101064c01000602010106000101060201000600010206000101060001010601 -010106010102060001000607010106010101060201010602010106010101061d01000602 -010106000101060201000600010206000101060001010601010106010102060001000607 -010006000100060001000605010106000105060001010601010106820101060601010600 -010106010101060201010602010106010101060801020604010106020101060001010601 -010106010101062002020101030301010202000006e20100060002020101030101010202 -061001000604010406000101060101010602010106010106060701000600010206020104 -060001010600010006000107068a01000604010406000101060101010602010106010106 -060901010601010106020101064b01010602010006010101060001000600010006000101 -0601010806010101060a0103060401010601010106020101061c01010602010006010101 -0600010006000100060001010601010806010101060a0100060001020602010406000101 -060001000600010706820100060401040600010106010101060201010601010606090102 -0603010106040101060101060620020201010303010102020600000006e2010002020101 -030101010202060f0101060201010601010106000101060201010601010106020101060b -010106000101060101010601010106010100060001000600010006000101068e01010602 -01010601010106000101060201010601010106020101060d01010602010106010101064c -010106010101060101020600010006010100060201000600010106050101060a01010606 -01010602010106010101061d010106010101060101020600010006010100060201000600 -010106050101060a01010600010106010101060101010601010006000100060001000600 -010106860101060201010601010106000101060201010601010106020101060b01010601 -0101060201010603010106030101062502020101030301010202000006e2010006000202 -0101030101010202060f0101060201010601010106000101060101010602010106020101 -060101010607010006010101060101010601010106000101060001000600010006000101 -06010101068a010106020101060101010600010106010101060201010602010106010101 -060901010602010106010101064c01010600010106020103060101010601010106000101 -0601010106010101060a0101060601010602010106010101061d01010600010106020103 -0601010106010101060001010601010106010101060a0100060101010601010106010101 -060001010600010006000100060001010601010106820101060201010601010106000101 -060101010602010106020101060101010607010106010101060201010602010206000101 -06000101060101010621020201010303010102020600000006e201000202010103010101 -0202060e01030602010a0601010506010103060701020600010106020107060001000600 -010106000103068a01030602010a06010105060101030608010506010105064c01020603 -01010600010006000103060001020600010306010104060701030603010506010105061d -010206030101060001000600010306000102060001030601010406070102060001010602 -0107060001000600010106000103068201030602010a0601010506010103060901030601 -010506000105060101030622020201010303010102020000060c07040604070006030702 -06c3010006000202010103010101020206ff06ff06e80202010103030101020206000000 -060b0700060f070006c401000202010103010101020206ff06ff06e80202010103030101 -02020000060c070006060702060507000603070206bc0100060002020101030101010202 -06ff06ff06e80202010103030101020206000000060b0700060807000605070006020700 -0602070006bc01000202010103010101020206ff06ff06e8020201010303010102020000 -060c07030605070006050700060207000602070006bb0100060002020101030101010202 -06ff06ff06e80202010103030101020206000000060b0700060807000605070006020704 -06bc01000202010103010101020206ff06ff06e8020201010303010102020000060c0700 -06080700060507000602070006bf010006000202010103010101020206ff06ff06e80202 -010103030101020206000000060b07000608070006050700060207000602070006bc0100 -02020101030101010202060201ff01ff01e20602020201010303010102020000060c0700 -06080700060507000603070206bc01000600020201010301010102020603010000cb0101 -008101010059010100c30101005801010600010006000100060001000600010006000100 -060001000600010006000100060000000602020201010303010102020600000006e20100 -020201010301010102020603010000cb0101008101010059010100c30101005801000600 -010004060100040600000603020201010303010102020000060b070606cf010006000202 -01010301010102020603010000cb010100810101000c0100002a0100001f010100c30101 -00580101060004050000060004060600000006020202010103030101020206000000060a -070606d001000202010103010101020206030100001f0100000a0100009e010100810101 -000b0100000301020003010200090104000a010100020100001e0101001e010200050100 -0012010000060100002e010000120102000301020031010100080104004a010006000100 -040506000100060004050000060302020101030301010202000006e20100060002020101 -03010101020206030100001f0100000a0100009e010100810101000a0100000301000002 -0100000101000002010000080100000d01000001010000020100001d0101002001000019 -0100003601000014010000050100003101010008010000020100004a0101060004040600 -0000060001000405060000000602020201010303010102020600000006e2010002020101 -03010101020206030100000901020003010200090104000201020002010000000101009b -010100810101000901000008010000010100000c0100000d01000001010000030100001c -010100090102000201000000010100020100000001010005010000030102000301020003 -01020002010400020102000301020002010000000101000a010200030102000201000000 -010100020104000101000000010100030102000501000005010000030102000201000000 -010100230101000c0100004a010006000100040400000602010004040000060302020101 -030301010202000006e20100060002020101030101010202060301000008010000020100 -0001010000020100000a010000030100000201000001010100010100009a010100810101 -000801000009010000010100000c0103000a01000001010000040100001b010100080100 -000201000001010100010100000101010001010000040100000501000002010000020100 -000101000002010000030100000601000002010000020100000101010001010000080100 -000201000001010000020100000101010001010000030100000301010001010000010100 -0002010000040100000501000002010000020100000101010001010000220101000b0100 -004b01010600040300000602010006000404060000000602020201010303010102020600 -000006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010002020101030101010202 -06030100000c010000010100000e0100000701000001010000020100009a010100810101 -000701000009010000020103000d0100000901000001010000050100001a0101000c0100 -000101000002010000010100000201000004010000050100000201000009010000030100 -000601000002010000020100000101000002010000080100000501000002010000010100 -000201000003010000030100000501000002010000040100000501000002010000020100 -0001010000260101000b0100004b01000600010004030600000006020100060004030000 -060302020101030301010202000006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -0100060002020101030101010202060301000009010300010100000e0100000401030001 -010000020100009a01010081010100080100000701000003010000020100000c01000009 -01000001010000040100001b010100090103000101000002010000010100000201000004 -010000050100000201000006010300030100000601000002010000020100000101000002 -010000080100000501000002010000010100000201000003010000030100000501000002 -01000004010000050100000201040001010000260101000b0100004b0101060004020600 -00000604010004030600000006020202010103030101020206e502020101030101010202 -06030100000801000002010000010100000e010000030100000201000001010000020100 -009a01010081010100090100000501000004010000020100000801000002010000090100 -0001010000030100001c0101000801000002010000010100000201000001010000020100 -000401000005010000020100000501000002010000030100000601000002010000020100 -000101000002010000080100000501000002010000010100000201000003010000030100 -00050100000201000004010000050100000201000005010000260101000a0100004c0100 -0600010004020000060601000402000006030202010103030101020206e5020201010301 -010102020603010000080100000201000001010000020100000a01000003010000020100 -0001010100010100009a010100810101000a010000030100000501000002010000030101 -000201000002010000030101000301000001010000020100001d01010008010000020100 -000101010001010000010101000101000004010000050100000201000002010000010100 -000201000003010000060100000201000002010000010100000201000008010000020100 -000101000002010000010100000201000003010000030100000501000002010000040100 -0005010000020100000201000001010000260101000a0100004c01010600040100000606 -0100060004020600000006020202010103030101020206e5020201010301010102020603 -01000009010300020102000c0101000201030001010000000101009b010100810101000b -010000020104000201020004010100030102000401010004010100020100001e01010009 -010300010100000001010002010000000101000501000005010000030102000301030004 -010100040100000301020002010000020100000901020003010200020100000201000004 -010100010100000601020005010000050100000301020002010000260101000a0100004c -0100060001000401060000000606010006000401000006030202010103030101020206e5 -02020101030101010202060301000015010500af010100810101000c0100002a0100001f -0101000f010000050100003c010500680101005801010600040006000000060801000401 -0600000006020202010103030101020206e5020201010301010102020603010000cb0101 -0081010100590101000f01000005010000ab0101005801000600010004000000060a0100 -0400000006030202010103030101020206e5020201010301010102020603010000cb0101 -0081010100590101000f01000005010000ab010100580101060000000600010006000100 -060001000600010006000100060001000600040006000000060202020101030301010202 -06e5020201010301010102020603010000cb0101008101010059010100c3010100580100 -060001000600010006000100060001000600010006000100060001000600010006000000 -06030202010103030101020206e5020201010301010102020603010000cb010100810101 -0059010100c30101005801010600040e0600000006020202010103030101020206e50202 -01010301010102020603010000cb0101008101010059010100c301010058010006000100 -060000000600000006000000060000000600000006000000060000000600000006030202 -010103030101020206e5020201010301010102020603010000cb01010081010100590101 -00c301010058010106000000060000000600000006000000060000000600000006000000 -060001000600000006020202010103030101020206e502020101030101010202060301ff -01ff01ce0600010006000000060a01000600000006030202010103030101020206e50202 -0101030101010202060308cd01ff01ff010106000000060c010006000000060202020101 -03030101020206e5020201010301010102020603080009cb080001000981010109590101 -09c30101095801000600010006000000060a010006000000060302020101030301010202 -06e5020201010301010102020603080009cb08000100090b010109550101091b01010959 -010109c301010958010106000000060c01000600000006020202010103030101020206e5 -020201010301010102020603080009cb08000100090a0100091c01000931010009080100 -091a0101090c0100093101000918010109c30101095801000600010006000000060a0100 -0600000006030202010103030101020206e50202010103010101020206030800091a0800 -09af08000100090a01000905010009050101090c01000903010209030102090a01020902 -0104090a01010902010009070100091a0101090b01000903010209030102090a01020902 -0104090a01010902010009170101091a010009a70101090901020904010109030102093d -010106000000060c01000600000006020202010103030101020206cf0100060001000600 -010006000100060001000600010006000100060001000600010006040202010103010101 -020206030800091a080009af08000100090a0100090401010904010009010100090a0100 -090301000902010009010100090201000908010009020100090101000902010009090100 -090101000902010009060100091a0101090a010009030100090201000901010009020100 -0908010009020100090101000902010009090100090101000902010009160101091a0100 -09a70101090801000902010009020100090101000901010009020100093c010006000100 -06000000060a01000600000006030202010103030101020206ce01000600010006000100 -060001000600010006000100060001000600010006000100060000000603020201010301 -0101020206030800090908020903080209030801090008000902080209a908000100090a -010009030100090001000904010009010100090901000908010009010100091001000905 -010009090100090101000903010009050100091a01010909010009080100090101000910 -010009050100090901000901010009030100091501010909010209030102090301010900 -010009020102090a01020903010209020100090001010902010009020100090201020902 -01000900010109700101090c01000902010009010100090101000940010106000000060c -010006000000060202020101030301010202060500000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000602010004060100040600000604 -020201010301010102020603080009080800090208000901080009020800090108000901 -0801090108000902080009a808000100090a010009050100090401000901010009080100 -09090100090101000910010009040100090a0100090101000904010009040100091a0101 -0908010009090100090101000910010009040100090a0100090101000904010009140101 -090801000902010009010100090201000901010009010101090101000902010009080100 -090201000901010009020100090101010901010009010100090201000901010009020100 -0901010109010100096f0101090c01000902010009010100090101000940010006000100 -06000000060a010006000000060302020101030301010202060501000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000001000000010000000100 -000001000000010000000100000001000000010000000100000106010100060004050000 -060004060600000006030202010103010101020206030800090808000905080009020800 -0901080009020800090108000902080009a8080001000908010109060100090401000901 -0100090701000909010009020103090c010009050100090a010009010100090501000904 -010109180101090701000909010009020103090c010009050100090a0100090101000905 -010009130101090801000905010009020100090101000902010009010100090201000908 -010009050100090201000901010009050100090201000901010009020100090101000973 -0101090b0100090301000901010009010103093d010106000000060c0100060000000602 -0202010103030101020206050000010000c4060201000405060001000600040500000604 -020201010301010102020603080009080800090508000902080009010800090208000901 -080409a808000100090a0100090501000904010009010100090801000907010009030100 -09020100090a010009060100090a0100090101000904010009040100091a010109080100 -090701000903010009020100090a010009060100090a0100090101000904010009140101 -090801000905010009020100090101000902010009010104090901020902010409010100 -0906010009000100090201040901010009730101090a0100090401000901010009010100 -09020100093c01000600010006000000060a010006000000060302020101030301010202 -0605010000c5060101000600040406000000060001000405060000000603020201010301 -010102020603080009080800090508000902080009010800090208000901080009ac0800 -0100090a0100090501000904010009010100090901000905010009040100090201000909 -010009060100090b0100090101000903010009050100091a010109090100090501000904 -0100090201000909010009060100090b0100090101000903010009150101090801000905 -010009020100090101000902010009010100091001000901010009050100090601000900 -01000902010009050100097301010909010009050100090101000901010009020100093c -010106000000060c01000600000006020202010103030101020206050000010000260100 -009c06020100040400000602010004040000060402020101030101010202060308000908 -08000902080009010800090208000901080009010801090108000902080009a808000100 -090a01000905010009040100090101000903010109040100090301000905010009020100 -0903010109020100090701000905010109030100090101000902010009060100091a0101 -090a01000903010009050100090201000903010109020100090701000905010109030100 -090101000902010009160101090801000902010009010100090201000901010009010101 -090101000902010009080100090201000901010009020100090101000907010009030100 -0902010009010100097301010908010009060100090101000901010009020100093c0100 -0600010006000000060a01000600000006030202010103030101020206050100001a0100 -000a01000000010000180102007f06010100060004030000060201000600040406000000 -060302020101030101010202060308000909080209030802090308010900080009020802 -09a908000100090a01000903010409030101090401010905010009020104090201020904 -0101090201040903010009050101090401010902010009070100091a0101090b01000902 -010409020102090401010902010409030100090501010904010109020100091701010909 -010209030102090301010900010009020102090a01020903010209020100090701000904 -01020902010009730101090801040903010109030102093d010106000000060c01000600 -0000060202020101030301010202060500000100002401000002010000190100007f0602 -0100040306000000060201000600040300000604020201010301010102020603080009cb -08000100090a010009140100090601000931010009080100091a0101090c010009310100 -091801010923010509990101095801000600010006000000060a01000600000006030202 -010103030101020206050100000901010000010000030102000301020002010000000101 -000201000000010200010101000001000003010200020100000001010005010000030102 -000201000002010000700601010006000402060000000604010004030600000006030202 -01010301010102020603080009cb08000100090b01010910010109420101091b01010959 -010109c301010958010106000000060c0100060000000602020201010303010102020605 -000001000008010000000100000001000001010000020100000401000002010100010100 -000101000000010000000100000101000000010000000100000101000002010000010101 -000101000004010000020100000201000001010000020100007006020100040200000606 -0100040200000604020201010301010102020603080009cb080001000981010109590101 -09c30101095801000600010006000000060a010006000000060302020101030301010202 -060501000009010000000100000001000005010000040100000201000002010000010100 -000001000000010000010100000001000000010000050100000101000008010000020100 -000201000002010000010100007006010100060004010000060601000600040206000000 -0603020201010301010102020603080009cb08000100098101010959010109c301010958 -010106000000060c01000600000006020202010103030101020206050000010000080100 -000001000000010000020103000401000002010000020100000101000000010200010100 -000001000000010000020103000101000008010000020104000201000001010000700602 -0100040106000000060601000600040100000604020201010301010102020603080009cb -08000100098101010959010109c30101095801000600010006000000060a010006000000 -060302020101030301010202060501000009010000000100000001000001010000020100 -000401000002010000020100000101000005010000000100000001000001010000020100 -000101000008010000020100000701000000010000700601010006000400060000000608 -01000401060000000603020201010301010102020603080009cb08000100098101010959 -010109c301010958010106000000060c0100060000000602020201010303010102020605 -000001000008010000000100000001000001010000020100000401000002010000020100 -000201000001010000010100000001000000010000010100000201000001010000080100 -00020100000201000003010100710602010004000000060a010004000000060402020101 -0301010102020603080009cb08000100098101010959010109c301010958010006000100 -06000000060a010006000000060302020101030301010202060501000009010000000100 -000001000002010300040100000201000002010000030101000201000000010000000100 -000201030001010000080100000301020005010000710601010006000000060001000600 -010006000100060001000600010006000100060004000600000006030202010103010101 -0202060308cd01ff01ff010106000000060c010006000000060202020101030301010202 -060500000100005101000071060201000600010006000100060001000600010006000100 -060001000600010006000000060402020101030101010202060308cd01ff01ff01000600 -010006000000060a01000600000006030202010103030101020206050100004f01000000 -01000072060101000600040e060000000603020201010301010102020603080009cb0800 -0100098101010959010109c301010958010106000000060c010006000000060202020101 -030301010202060500000100004f01000073060201000600000006000000060000000600 -0000060000000600000006000000060000000604020201010301010102020603080009cb -08000100090b010109550101091b01010959010109c30101095801000600010006000000 -060a0100060000000603020201010303010102020605010000c506010100060000000600 -000006000000060000000600000006000000060000000600010006000000060302020101 -0301010102020603080009cb08000100090a0100091c01000931010009080100091a0101 -090c0100093101000918010109c301010958010106000000060c01000600000006020202 -010103030101020206050000010000c40602010006000000060a01000600000006040202 -010103010101020206030800091a080009af08000100090a01000905010009050100090d -01000903010209030102090a010209020104090a01010902010009070100091a0101090b -01000903010209030102090a010209020104090a01010902010009170101091a010009a7 -01010909010209030102094401000600010006000000060a010006000000060302020101 -030301010202060501000001040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000000400000004000000040000000400000004000000040000000400000004000000 -040000020601010006000000060c01000600000006030202010103010101020206030800 -091a080009af08000100090a01000904010109040101090c010009030100090201000901 -010009020100090801000902010009010100090201000909010009010100090201000906 -0100091a0101090a01000903010009020100090101000902010009080100090201000901 -01000902010009090100090101000902010009160101091a010009a70101090801000902 -010009010100090201000943010106000000060c01000600000006020202010103030101 -020206050000010004c200010602010006000000060a0100060000000604020201010301 -010102020603080009090802090308020903080109000800090208020909080009000801 -0903080209020801090008000903080209030802097f08000100090a0100090301000900 -01000903010009000100090b010009080100090101000910010009050100090901000901 -01000903010009050100091a010109090100090801000901010009100100090501000909 -01000901010009030100091501010909010209030102090301010900010009020102090a -010209030102090201000900010109020100090201000902010209020100090001010970 -0101090c010009050100094301000600010006000000060a010006000000060302020101 -030301010202060501000001044f0100046f010000010601010006000000060c01000600 -000006030202010103010101020206030800090808000902080009010800090208000901 -080009010801090108000902080009080801090108000901080009020800090108000900 -08000900080009010800090208000901080009020800097e08000100090a010009050100 -09050100090a010009090100090101000910010009040100090a01000901010009040100 -09040100091a01010908010009090100090101000910010009040100090a010009010100 -090401000914010109080100090201000901010009020100090101000901010109010100 -090201000908010009020100090101000902010009010101090101000901010009020100 -09010100090201000901010109010100096f0101090c0100090501000943010106000000 -060c0100060000000602020201010303010102020605000001000411010004030100042c -0100040901000400010004180102045300010602010006000000060a0100060000000604 -020201010301010102020603080009080800090508000902080009010800090208000901 -080009020800090808000902080009050800090108000900080009000800090108000902 -080009010800098208000100090801010906010009050100090901000909010009020103 -090c010009050100090a0100090101000905010009040101091801010907010009090100 -09020103090c010009050100090a01000901010009050100091301010908010009050100 -090201000901010009020100090101000902010009080100090501000902010009010100 -090501000902010009010100090201000901010009730101090a01010904010109440100 -0600010006000000060a0100060000000603020201010303010102020605010000010410 -010004030100042c01000408010004020100041901000452010000010601010006000000 -060c01000600000006030202010103010101020206030800090808000905080009020800 -090108000902080009010804090808000902080009020803090108000900080009000800 -0901080409020802097f08000100090a01000905010009050100090a0100090701000903 -010009020100090a010009060100090a0100090101000904010009040100091a01010908 -0100090701000903010009020100090a010009060100090a010009010100090401000914 -010109080100090501000902010009010100090201000901010409090102090201040901 -01000906010009000100090201040901010009730101090c010009050100094301010600 -0000060c0100060000000602020201010303010102020605000001000409010204020104 -040101000400010104030102040201000400010104090100040001010403010204030101 -040001000402010204020100040001020401010104000100040301020402010004000101 -04050100040301020402010004020100044400010602010006000000060a010006000000 -060402020101030101010202060308000908080009050800090208000901080009020800 -09010800090c080009020800090108000902080009010800090008000900080009010800 -09090800097e08000100090a01000905010009050100090b010009050100090401000902 -01000909010009060100090b0100090101000903010009050100091a0101090901000905 -010009040100090201000909010009060100090b01000901010009030100091501010908 -010009050100090201000901010009020100090101000910010009010100090501000906 -010009000100090201000905010009730101090c01000905010009430100060001000600 -0000060a0100060000000603020201010303010102020605010000010407010004020100 -040301000403010104010100040101000402010004010101040101000408010104010100 -040101000402010004010100040101010401010004020100040101000400010004000100 -040101000400010004000100040101000402010004010101040101000404010004020100 -0402010004010100040201000443010000010601010006000000060c0100060000000603 -020201010301010102020603080009080800090208000901080009020800090108000901 -080109010800090208000908080009020800090108000902080009010800090008000900 -080009010800090208000901080009020800097e08000100090a01000905010009050100 -090501010904010009030100090501000902010009030101090201000907010009050101 -09030100090101000902010009060100091a0101090a0100090301000905010009020100 -090301010902010009070100090501010903010009010100090201000916010109080100 -090201000901010009020100090101000901010109010100090201000908010009020100 -090101000902010009010100090701000903010009020100090101000973010109080100 -0902010009010100090201000943010106000000060c0100060000000602020201010303 -010102020605000001000408010004020100040301000403010004020100040101000402 -010004010100040c01000402010004010100040201000401010004020100040101000402 -010004010100040001000400010004010100040001000400010004050100040101000408 -010004020100040201000402010004010100044400010602010006000000060a01000600 -000006040202010103010101020206030800090908020903080209030801090008000902 -08020909080009020800090208030901080009000800090008000902080209030802097f -08000100090a010009030104090101040903010109050100090201040902010209040101 -090201040903010009050101090401010902010009070100091a0101090b010009020104 -090201020904010109020104090301000905010109040101090201000917010109090102 -09030102090301010900010009020102090a010209030102090201000907010009040102 -09020100097301010909010209030102094401000600010006000000060a010006000000 -060302020101030301010202060501000001040701000402010004030100040301000402 -01000401010404010100040c010004020100040101000402010004010100040201000401 -010404010100040001020401010004000100040001000402010304010100040801000402 -010404020100040101000443010000010601010006000000060c01000600000006030202 -0101030101010202060308000923080509a108000100090a010009140100090601000931 -010009080100091a0101090c010009310100091801010923010509990101095801010600 -0000060c0100060000000602020201010303010102020605000001000408010004020100 -0403010004030100040201000401010004050100040c0100040201000401010004020100 -040101000402010004010100040501000405010004000100040001000401010004020100 -0401010004080100040201000407010004000100044400010602010006000000060a0100 -060000000604020201010301010102020603080009cb08000100090b0101091001010942 -0101091b01010959010109c30101095801000600010006000000060a0100060000000603 -020201010303010102020605010000010407010004020100040301000403010004020100 -040101000402010004010100040c01000402010004010100040201000401010004010101 -040101000402010004020100040101000401010004000100040001000401010004020100 -04010100040801000402010004020100040301010444010000010601010006000000060c -0100060000000603020201010301010102020603080009cb080001000981010109590101 -09c301010958010106000000060c01000600000006020202010103030101020206050000 -0100040901020405010104010100040201000402010204020100040c0100040201000402 -010204030101040001000402010204040101040201000400010004000100040201030401 -0100040801000403010204050100044500010602010006000000060a0100060000000604 -020201010301010102020603080009cb08000100098101010959010109c3010109580100 -0600010006000000060a0100060000000603020201010303010102020605010000010429 -0105044a01000444010000010601010006000000060c0100060000000603020201010301 -010102020603080009cb08000100098101010959010109c301010958010106000000060c -010006000000060202020101030301010202060500000100047801000400010004460001 -0602010006000000060a0100060000000604020201010301010102020603080009cb0800 -0100098101010959010109c30101095801000600010006000000060a0100060000000603 -02020101030301010202060501000001047801000446010000010601010006000000060c -0100060000000603020201010301010102020603080009cb080001000981010109590101 -09c301010958010106000000060c01000600000006020202010103030101020206050000 -010004c200010602010006000000060a0100060000000604020201010301010102020603 -08cd01ff01ff01000600010006000000060a010006000000060302020101030301010202 -060501000001040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000400 -010004000100040001000400010004000100040001000400010004000100040001000001 -0601010006000000060c010006000000060302020101030101010202060308cd01ff01ff -010106000000060c01000600000006020202010103030101020206050000010000c40602 -010006000000060a0100060000000604020201010301010102020603080009cb08000100 -098101010959010109c30101095801000600010006000000060a01000600000006030202 -01010303010102020605010000c50601010006000000060c010006000000060302020101 -0301010102020603080009cb08000100090b0101094e0101092201010959010109c30101 -0958010106000000060c01000600000006020202010103030101020206050000010000c4 -0602010006000000060a0100060000000604020201010301010102020603080009cb0800 -0100090a010009150100093101000908010009210101090c0100093101000918010109c3 -0101095801000600010006000000060a0100060000000603020201010303010102020605 -010000c50601010006000000060c01000600000006030202010103010101020206030800 -091d08000908080009a208000100090a010009040102090c01000903010209030102090b -010009030104090a0101090201000907010009210101090b01000903010209030102090b -010009030104090a0101090201000917010109180100090a010009220102097701010909 -0102094b010106000000060c010006000000060202020101030301010202060500000100 -00c40602010006000000060a01000600000006040202010103010101020206030800091d -080009ac08000100090a01000903010009020100090a0100090301000902010009010100 -090201000909010109030100090201000909010009010100090201000906010009210101 -090a01000903010009020100090101000902010009090101090301000902010009090100 -09010100090201000916010109180100090a010009240100097701010908010009020100 -094a01000600010006000000060a01000600000006030202010103030101020206050100 -00c50601010006000000060c010006000000060302020101030101010202060308000909 -080209030802090308020902080009010800090308020903080209030802099408000100 -090a01000903010009020100090901000908010009010100090c01000900010009070100 -0909010009010100090301000905010009210101090901000908010009010100090c0100 -090001000907010009090100090101000903010009150101090801000900010109030102 -090201040908010009010100090301020902010009000101090201000900010109030102 -0905010009770101090c0100094a010106000000060c0100060000000602020201010303 -0101020206050000010000c40602010006000000060a0100060000000604020201010301 -010102020603080009080800090208000901080009020800090108000902080009010800 -090008000906080009020800090208000901080009020800099308000100090a01000903 -010009020100090801000909010009010100090e010009060100090a0100090101000904 -01000904010009210101090801000909010009010100090e010009060100090a01000901 -010009040100091401010908010109010100090101000902010009030100090a01000900 -010009030100090201000901010109010100090101010901010009010100090201000904 -010009770101090c0100094a01000600010006000000060a010006000000060302020101 -0303010102020605010000c50601010006000000060c0100060000000603020201010301 -010102020603080009080800090508000902080009010800090208000901080109070800 -090208000902080009010800099708000100090801010905010209080100090901000902 -0103090b010009060100090a0100090101000905010009040101091f0101090701000909 -010009020103090b010009060100090a0100090101000905010009130101090801000902 -0100090101000902010009030100090a0101090401000902010009010100090501000902 -010009010100090201000904010009770101090b0100094b010106000000060c01000600 -000006020202010103030101020206050000010000c40602010006000000060a01000600 -000006040202010103010101020206030800090808000905080009020800090108000902 -080009010801090708000902080409020802099408000100090a01000903010009020100 -09080100090701000903010009020100090a010009060100090a01000901010009040100 -090401000921010109080100090701000903010009020100090a010009060100090a0100 -09010100090401000914010109080100090201000901010409030100090a010109040104 -090101000905010009020100090101040904010009770101090a0100094c010006000100 -06000000060a0100060000000603020201010303010102020605010000c5060101000600 -0000060c0100060000000603020201010301010102020603080009080800090508000902 -080009010800090208000901080009000800090608000902080009090800099308000100 -090a0100090301000902010009090100090501000904010009020100090a010009050100 -090b01000901010009030100090501000921010109090100090501000904010009020100 -090a010009050100090b0100090101000903010009150101090801000902010009010100 -09070100090a010009000100090301000905010009050100090201000901010009080100 -0977010109090100094d010106000000060c010006000000060202020101030301010202 -06050000010000c40602010006000000060a010006000000060402020101030101010202 -060308000908080009020800090108000902080009010800090208000901080009010800 -0905080009020800090208000901080009020800099308000100090a0100090301000902 -010009030101090401000903010009050100090201000903010109040100090501000905 -01010903010009010100090201000906010009210101090a010009030100090501000902 -010009030101090401000905010009050101090301000901010009020100091601010908 -010009020100090101000902010009030100090a01000901010009020100090201000901 -010009050100090201000901010009020100090401000977010109080100094e01000600 -010006000000060a0100060000000603020201010303010102020605010000c506010100 -06000000060c010006000000060302020101030101010202060308000909080209030802 -090308020902080009020800090408000903080209030802099408000100090a01000904 -010209040101090501000902010409020102090401010902010409030100090501010904 -0101090201000907010009210101090b0100090201040902010209040101090201040903 -010009050101090401010902010009170101090801000902010009020102090501010908 -010009020100090201020902010009050100090201000902010209050100097701010908 -0104094a010106000000060c010006000000060202020101030301010202060500000100 -00c40602010006000000060a0100060000000604020201010301010102020603080009cb -08000100090a0100090d010009060100093101000908010009210101090c010009310100 -09180101091c010509a00101095801000600010006000000060a01000600000006030202 -01010303010102020605010000c50601010006000000060c010006000000060302020101 -0301010102020603080009cb08000100090b010109090101094201010922010109590101 -09c301010958010106000000060c01000600000006020202010103030101020206050000 -010000c40602010006000000060a01000600000006040202010103010101020206030800 -09cb08000100098101010959010109c30101095801000600010006000000060a01000600 -00000603020201010303010102020605010000c50601010006000000060c010006000000 -0603020201010301010102020603080009cb08000100098101010959010109c301010958 -010106000000060c01000600000006020202010103030101020206050000010000c40602 -010006000000060a0100060000000604020201010301010102020603080009cb08000100 -098101010959010109c30101095801000600010006000000060a01000600000006030202 -01010303010102020605010000c50601010006000000060c010006000000060302020101 -0301010102020603080009cb08000100098101010959010109c301010958010106000000 -060c01000600000006020202010103030101020206050000010000c40602010006000000 -060a0100060000000604020201010301010102020603080009cb08000100098101010959 -010109c30101095801000600010006000000060a01000600000006030202010103030101 -02020605010000c50601010006000000060c010006000000060302020101030101010202 -060308cd01ff01ff010106000000060c0100060000000602020201010303010102020605 -0000010000c40602010006000000060a0100060000000604020201010301010102020603 -01ff01ff01ce0600010006000000060a0100060000000603020201010303010102020605 -010000c50601010006000000060c01000600000006030202010103010101020206030100 -00cb0101008101010059010100c301010058010106000000060c01000600000006020202 -010103030101020206050000010000c40602010006000000060a01000600000006040202 -01010301010102020603010000cb0101008101010059010100c301010058010006000100 -06000000060a0100060000000603020201010303010102020605010000c5060101000600 -0000060c0100060000000603020201010301010102020603010000cb010100810101000c -0100003101000018010100c301010058010106000000060c010006000000060202020101 -03030101020206050000010000c40602010006000000060a010006000000060402020101 -030101010202060301000010010200090100000d0102000a010200100100007b01010081 -0101000b01000003010200030102000b010000050100000c010100020100001701010010 -010200090100000d010200930101000a0101004b01000600010006000000060a01000600 -00000603020201010303010102020605010000c50601010006000000060c010006000000 -060302020101030101010202060301000012010000090100000f0100000c010000100100 -007b010100810101000a0100000301000002010000010100000201000009010100040101 -000b01000001010000020100001601010012010000090100000f01000093010100090100 -00010100004a010106000000060c01000600000006020202010103030101020206050000 -010000c40602010006000000060a01000600000006040202010103010101020206030100 -0009010100000100000401000003010200020100000001010003010200050100000c0100 -000301020003010200020100000101000003010200710101008101010009010000080100 -00010100000c0100000001000003010000000100000b0100000101000003010000150101 -000901010000010000040100000301020002010000000101000301020005010000090100 -0000010100030102000201010000010000030102000a0102000301020002010000000101 -0002010000020100000201020002010000000101003f01010009010000010100004a0100 -0600010006000000060a0100060000000603020201010303010102020605010000c50601 -010006000000060c01000600000006030202010103010101020206030100000801000001 -01010004010000020100000201000001010100010100000101000002010000040100000c -010000020100000201000001010000020100000101000000010000030100000201000070 -010100810101000801000009010000010100000e010000050100000b0100000101000004 -010000140101000801000001010100040100000201000002010000010101000101000001 -010000020100000401000009010100010100000101000002010000010100000001000000 -010000010100000201000008010000020100000101000002010000010101000101000001 -01000002010000010100000201000001010100010100003e01010009010000010100004a -010106000000060c01000600000006020202010103030101020206050000010000c40602 -010006000000060a01000600000006040202010103010101020206030100000801000002 -010000040100000201000002010000010100000201000005010000040100000c01000002 -010000020100000101000005010100040100007401010081010100070100000901000002 -0103000b010000050100000b010000010100000501000013010100080100000201000004 -010000020100000201000001010000020100000501000004010000090100000201000005 -010000010100000001000000010000010100000201000008010000050100000201000001 -01000005010000020100000101000002010000010100004201010009010000010100004a -01000600010006000000060a0100060000000603020201010303010102020605010000c5 -0601010006000000060c0100060000000603020201010301010102020603010000080100 -0002010000040100000201000002010000010100000201000002010300040100000c0100 -000201000002010000010100000501010005010200710101008101010008010000070100 -0003010000020100000a010000050100000b010000010100000401000014010100080100 -000201000004010000020100000201000001010000020100000201030004010000090100 -000201000002010300010100000001000000010000010104000901020002010400010100 -00060100000001000002010400010100004201010009010000010100004a010106000000 -060c01000600000006020202010103030101020206050000010000c40602010006000000 -060a01000600000006040202010103010101020206030100000801000002010000040100 -00020100000201000001010000020100000101000002010000040100000c010000020100 -000201000001010000050100000001000007010000700101008101010009010000050100 -0004010000020100000a010000050100000b010000010100000301000015010100080100 -000201000004010000020100000201000001010000020100000101000002010000040100 -000901000002010000010100000201000001010000000100000001000001010000100100 -000101000005010000060100000001000002010000050100004201010009010000010100 -004a01000600010006000000060a01000600000006030202010103030101020206050100 -00c50601010006000000060c010006000000060302020101030101010202060301000008 -010000010101000401000002010000020100000101010001010000010100000201000004 -0100000c0100000201000002010000010100000201000001010000010100000201000002 -01000070010100810101000a010000030100000501000002010000030101000401000005 -010000050101000301000001010000020100001601010008010000010101000401000002 -010000020100000101010001010000010100000201000004010000090100000201000001 -010000020100000101000000010000000100000101000002010000080100000201000001 -010000020100000101000007010000030100000201000001010000420101000901000001 -0100004a010106000000060c010006000000060202020101030301010202060500000100 -00c40602010006000000060a010006000000060402020101030101010202060301000009 -010100000100000401000003010200020100000001010003010300040100000c01000003 -0102000301020002010000020100000201020071010100810101000b0100000201040002 -010200040101000201040001010400030101000401010002010000170101000901010000 -010000040100000301020002010000000101000301030004010000090100000201000002 -010300010100000001000000010000020102000a01020003010200020100000701000004 -01020002010000420101000a0101004b01000600010006000000060a0100060000000603 -020201010303010102020605010000c50601010006000000060c01000600000006030202 -010103010101020206030100000c0100002301050093010100810101000c010000310100 -00180101000c010000230105001c0105006801010058010106000000060c010006000000 -06020202010103030101020206050000010000c40602010006000000060a010006000000 -06040202010103010101020206030100000801000002010000bd01010081010100590101 -000801000002010000b50101005801000600010006000000060a01000600000006030202 -01010303010102020605010000c50601010006000000060c010006000000060302020101 -030101010202060301000009010200be010100810101005901010009010200b601010058 -010106000000060c01000600000006020202010103030101020206050000010000c40602 -010006000000060a0100060000000604020201010301010102020603010000cb01010081 -01010059010100c30101005801000600010006000000060a010006000000060302020101 -0303010102020605010000c50601010006000000060c0100060000000603020201010301 -010102020603010000cb0101008101010059010100c301010058010106000000060c0100 -0600000006020202010103030101020206050000010000c40602010006000000060a0100 -060000000604020201010301010102020603010000cb0101008101010059010100c30101 -005801000600010006000000060a01000600000006030202010103030101020206050100 -00c50601010006000000060c0100060000000603020201010301010102020603010000cb -0101008101010059010100c301010058010106000000060c010006000000060202020101 -03030101020206050000010000c40602010006000000060a010006000000060402020101 -030101010202060301ff01ff01ce0600010006000000060a010006000000060302020101 -0303010102020605010000c50601010006000000060c0100060000000603020201010301 -01010202060301ff01ff01cf06000000060c010006000000060202020101030301010202 -06050000010000c40602010006000000060a010006000000060402020101030101010202 -0603010000cb0101008101010059010100c30101005801000600010006000000060a0100 -060000000603020201010303010102020605010000c50601010006000000060c01000600 -00000603020201010301010102020603010000cb0101008101010059010100c301010058 -010106000000060c01000600000006020202010103030101020206050000010000c40602 -010006000000060a0100060000000604020201010301010102020603010000cb01010081 -0101000c0100003101000018010100c30101005801000600010006000000060a01000600 -00000603020201010303010102020605010000c50601010006000000060c010006000000 -060302020101030101010202060301000010010200090100000d0102009b010100810101 -000b01000003010200030102000b010000050100000c0101000201000017010100100102 -00090100000d010200930101000a0101004b010106000000060c01000600000006020202 -010103030101020206050000010000c40602010006000000060a01000600000006040202 -0101030101010202060301000012010000090100000f0100009b010100810101000a0100 -000301000002010000010100000201000009010100040101000b01000001010000020100 -001601010012010000090100000f0100009301010009010000010100004a010006000100 -06000000060a0100060000000603020201010303010102020605010000c5060101000600 -0000060c0100060000000603020201010301010102020603010000090101000001000004 -010000030102000201000000010100030102000501000009010000000101000301020002 -01010000010000030102000301020071010100810101000901000008010000010100000c -0100000001000003010000000100000b0100000101000003010000150101000901010000 -010000040100000301020002010000000101000301020005010000090100000001010003 -0102000201010000010000030102000a0102000301020002010000000101000201000002 -0100000201020002010000000101003f01010009010000010100004a010106000000060c -01000600000006020202010103030101020206050000010000c40602010006000000060a -010006000000060402020101030101010202060301000008010000010101000401000002 -010000020100000101010001010000010100000201000004010000090101000101000001 -010000020100000101000000010000000100000101000002010000010100000201000070 -010100810101000801000009010000010100000e010000050100000b0100000101000004 -010000140101000801000001010100040100000201000002010000010101000101000001 -010000020100000401000009010100010100000101000002010000010100000001000000 -010000010100000201000008010000020100000101000002010000010101000101000001 -01000002010000010100000201000001010100010100003e01010009010000010100004a -01000600010006000000060a0100060000000603020201010303010102020605010000c5 -0601010006000000060c0100060000000603020201010301010102020603010000080100 -000201000004010000020100000201000001010000020100000501000004010000090100 -000201000005010000010100000001000000010000010100000201000001010000740101 -00810101000701000009010000020103000b010000050100000b01000001010000050100 -001301010008010000020100000401000002010000020100000101000002010000050100 -000401000009010000020100000501000001010000000100000001000001010000020100 -000801000005010000020100000101000005010000020100000101000002010000010100 -004201010009010000010100004a010106000000060c0100060000000602020201010303 -0101020206050000010000c40602010006000000060a0100060000000604020201010301 -010102020603010000080100000201000004010000020100000201000001010000020100 -000201030004010000090100000201000002010300010100000001000000010000010104 -00020102007101010081010100080100000701000003010000020100000a010000050100 -000b01000001010000040100001401010008010000020100000401000002010000020100 -000101000002010000020103000401000009010000020100000201030001010000000100 -000001000001010400090102000201040001010000060100000001000002010400010100 -004201010009010000010100004a01000600010006000000060a01000600000006030202 -01010303010102020605010000c50601010006000000060c010006000000060302020101 -030101010202060301000008010000020100000401000002010000020100000101000002 -010000010100000201000004010000090100000201000001010000020100000101000000 -010000000100000101000009010000700101008101010009010000050100000401000002 -0100000a010000050100000b010000010100000301000015010100080100000201000004 -010000020100000201000001010000020100000101000002010000040100000901000002 -010000010100000201000001010000000100000001000001010000100100000101000005 -010000060100000001000002010000050100004201010009010000010100004a01010600 -0000060c01000600000006020202010103030101020206050000010000c4060201000600 -0000060a0100060000000604020201010301010102020603010000080100000101010004 -010000020100000201000001010100010100000101000002010000040100000901000002 -010000010100000201000001010000000100000001000001010000020100000101000002 -01000070010100810101000a010000030100000501000002010000030101000401000005 -010000050101000301000001010000020100001601010008010000010101000401000002 -010000020100000101010001010000010100000201000004010000090100000201000001 -010000020100000101000000010000000100000101000002010000080100000201000001 -010000020100000101000007010000030100000201000001010000420101000901000001 -0100004a01000600010006000000060a0100060000000603020201010303010102020605 -010000c50601010006000000060c01000600000006030202010103010101020206030100 -000901010000010000040100000301020002010000000101000301030004010000090100 -000201000002010300010100000001000000010000020102000301020071010100810101 -000b01000002010400020102000401010002010400010104000301010004010100020100 -001701010009010100000100000401000003010200020100000001010003010300040100 -00090100000201000002010300010100000001000000010000020102000a010200030102 -0002010000070100000401020002010000420101000a0101004b010106000000060c0100 -0600000006020202010103030101020206050000010000c40602010006000000060a0100 -0600000006040202010103010101020206030100000c0100002301050093010100810101 -000c01000031010000180101000c010000230105001c0105006801010058010006000100 -06000000060a0100060000000603020201010303010102020605010000c5060101000600 -0000060c01000600000006030202010103010101020206030100000801000002010000bd -01010081010100590101000801000002010000b501010058010106000000060c01000600 -000006020202010103030101020206050000010000c40602010006000000060a01000600 -0000060402020101030101010202060301000009010200be010100810101005901010009 -010200b60101005801000600010006000000060a01000600000006030202010103030101 -02020605010000c50601010006000000060c010006000000060302020101030101010202 -0603010000cb0101008101010059010100c301010058010106000000060c010006000000 -06020202010103030101020206050000010000c40602010006000000060a010006000000 -0604020201010301010102020603010000cb0101008101010059010100c3010100580100 -0600010006000000060a0100060000000603020201010303010102020605010000c50601 -010006000000060c0100060000000603020201010301010102020603010000cb01010081 -01010059010100c301010058010106000000060c01000600000006020202010103030101 -020206050000010000c40602010006000000060a01000600000006040202010103010101 -02020603010000cb0101008101010059010100c30101005801000600010006000000060a -0100060000000603020201010303010102020605010000c50601010006000000060c0100 -06000000060302020101030101010202060301ff01ff01cf06000000060c010006000000 -06020202010103030101020206050000010000c40602010006000000060a010006000000 -060402020101030101010202060301ff01ff01ce0600010006000000060a010006000000 -0603020201010303010102020605010000c50601010006000000060c0100060000000603 -020201010301010102020603010000cb0101008101010059010100c30101005801010600 -0000060c01000600000006020202010103030101020206050000010000c4060201000600 -0000060a0100060000000604020201010301010102020603010000cb0101008101010059 -010100c30101005801000600010006000000060a01000600000006030202010103030101 -02020605010000c50601010006000000060c010006000000060302020101030101010202 -0603010000cb010100810101000c0100003101000018010100c301010058010106000000 -060c01000600000006020202010103030101020206050000010000c40602010006000000 -060a010006000000060402020101030101010202060301000010010200090100000d0102 -004301000056010100810101000b01000003010200030102000b010000050100000c0101 -00020100001701010010010200090100000d010200930101000a0101004b010006000100 -06000000060a0100060000000603020201010303010102020605010000c5060101000600 -0000060c010006000000060302020101030101010202060301000012010000090100000f -0100004301000056010100810101000a0100000301000002010000010100000201000009 -010100040101000b01000001010000020100001601010012010000090100000f01000093 -01010009010000010100004a010106000000060c01000600000006020202010103030101 -020206050000010000c40602010006000000060a01000600000006040202010103010101 -020206030100000901010000010000040100000301020002010000000101000301020005 -010000090100000001010003010200020101000001000003010200030102000a01020002 -010000020100000101040054010100810101000901000008010000010100000c01000000 -01000003010000000100000b010000010100000301000015010100090101000001000004 -010000030102000201000000010100030102000501000009010000000101000301020002 -01010000010000030102000a010200030102000201000000010100020100000201000002 -01020002010000000101003f01010009010000010100004a01000600010006000000060a -0100060000000603020201010303010102020605010000c50601010006000000060c0100 -060000000603020201010301010102020603010000080100000101010004010000020100 -000201000001010100010100000101000002010000040100000901010001010000010100 -000201000001010000000100000001000001010000020100000101000002010000080100 -000201000001010000020100000301000056010100810101000801000009010000010100 -000e010000050100000b0100000101000004010000140101000801000001010100040100 -000201000002010000010101000101000001010000020100000401000009010100010100 -000101000002010000010100000001000000010000010100000201000008010000020100 -000101000002010000010101000101000001010000020100000101000002010000010101 -00010100003e01010009010000010100004a010106000000060c01000600000006020202 -010103030101020206050000010000c40602010006000000060a01000600000006040202 -010103010101020206030100000801000002010000040100000201000002010000010100 -000201000005010000040100000901000002010000050100000101000000010000000100 -000101000002010000010100000c01000002010000020100000001000004010000560101 -00810101000701000009010000020103000b010000050100000b01000001010000050100 -001301010008010000020100000401000002010000020100000101000002010000050100 -000401000009010000020100000501000001010000000100000001000001010000020100 -000801000005010000020100000101000005010000020100000101000002010000010100 -004201010009010000010100004a01000600010006000000060a01000600000006030202 -01010303010102020605010000c50601010006000000060c010006000000060302020101 -030101010202060301000008010000020100000401000002010000020100000101000002 -010000020103000401000009010000020100000201030001010000000100000001000001 -010400020102000901040003010000050100005601010081010100080100000701000003 -010000020100000a010000050100000b0100000101000004010000140101000801000002 -010000040100000201000002010000010100000201000002010300040100000901000002 -010000020103000101000000010000000100000101040009010200020104000101000006 -0100000001000002010400010100004201010009010000010100004a010106000000060c -01000600000006020202010103030101020206050000010000c40602010006000000060a -010006000000060402020101030101010202060301000008010000020100000401000002 -010000020100000101000002010000010100000201000004010000090100000201000001 -010000020100000101000000010000000100000101000009010000080100000601000000 -010000040100005601010081010100090100000501000004010000020100000a01000005 -0100000b0100000101000003010000150101000801000002010000040100000201000002 -010000010100000201000001010000020100000401000009010000020100000101000002 -010000010100000001000000010000010100001001000001010000050100000601000000 -01000002010000050100004201010009010000010100004a01000600010006000000060a -0100060000000603020201010303010102020605010000c50601010006000000060c0100 -060000000603020201010301010102020603010000080100000101010004010000020100 -000201000001010100010100000101000002010000040100000901000002010000010100 -000201000001010000000100000001000001010000020100000101000002010000080100 -000201000001010000020100000301000056010100810101000a01000003010000050100 -000201000003010100040100000501000005010100030100000101000002010000160101 -000801000001010100040100000201000002010000010101000101000001010000020100 -000401000009010000020100000101000002010000010100000001000000010000010100 -000201000008010000020100000101000002010000010100000701000003010000020100 -00010100004201010009010000010100004a010106000000060c01000600000006020202 -010103030101020206050000010000c40602010006000000060a01000600000006040202 -010103010101020206030100000901010000010000040100000301020002010000000101 -000301030004010000090100000201000002010300010100000001000000010000020102 -00030102000a01020002010000020100000401010054010100810101000b010000020104 -000201020004010100020104000101040003010100040101000201000017010100090101 -000001000004010000030102000201000000010100030103000401000009010000020100 -0002010300010100000001000000010000020102000a0102000301020002010000070100 -000401020002010000420101000a0101004b01000600010006000000060a010006000000 -0603020201010303010102020605010000c50601010006000000060c0100060000000603 -0202010103010101020206030100000c010000230105002301050069010100810101000c -01000031010000180101000c010000230105001c0105006801010058010106000000060c -01000600000006020202010103030101020206050000010000c40602010006000000060a -01000600000006040202010103010101020206030100000801000002010000bd01010081 -010100590101000801000002010000b50101005801000600010006000000060a01000600 -00000603020201010303010102020605010000c50601010006000000060c010006000000 -060302020101030101010202060301000009010200be0101008101010059010100090102 -00b601010058010106000000060c01000600000006020202010103030101020206050000 -010000c40602010006000000060a01000600000006040202010103010101020206030100 -00cb0101008101010059010100c30101005801000600010006000000060a010006000000 -0603020201010303010102020605010000c50601010006000000060c0100060000000603 -020201010301010102020603010000cb0101008101010059010100c30101005801010600 -0000060c01000600000006020202010103030101020206050000010000c4060201000600 -0000060a0100060000000604020201010301010102020603010000cb0101008101010059 -010100c30101005801000600010006000000060a01000600000006030202010103030101 -02020605010000c50601010006000000060c010006000000060302020101030101010202 -0603010000cb0101008101010059010100c301010058010106000000060c010006000000 -06020202010103030101020206050000010000c40602010006000000060a010006000000 -060402020101030101010202060301ff01ff01ce0600010006000000060a010006000000 -0603020201010303010102020605010000c50601010006000000060c0100060000000603 -02020101030101010202060301ff01ff01cf06000000060c010006000000060202020101 -03030101020206050000010000c40602010006000000060a010006000000060402020101 -0301010102020603010000cb0101008101010059010100c3010100580100060001000600 -0000060a0100060000000603020201010303010102020605010000c50601010006000000 -060c0100060000000603020201010301010102020603010000cb01010081010100590101 -00c301010058010106000000060c01000600000006020202010103030101020206050000 -010000c40602010006000000060a01000600000006040202010103010101020206030100 -00cb010100810101000c0100003101000018010100c30101005801000600010006000000 -060a0100060000000603020201010303010102020605010000c50601010006000000060c -01000600000006030202010103010101020206030100000b010000120100001f01000089 -010100810101000b01000003010200030102000b010000040102000b0101000201000017 -0101000b010000120100000e010000010100008f0101000a0101004b010106000000060c -01000600000006020202010103030101020206050000010000c40602010006000000060a -01000600000006040202010103010101020206030100001f0100001f0100008901010081 -0101000a0100000301000002010000010100000201000009010100030100000201000009 -0100000101000002010000160101001f0100000e010000010100008f0101000901000001 -0100004a01000600010006000000060a0100060000000603020201010303010102020605 -010000c50601010006000000060c01000600000006030202010103010101020206030100 -000901020002010000000101000301020002010400090102000301020003010200020100 -0000010100030102007f010100810101000901000008010000010100000c010000000100 -000701000009010000010100000301000015010100090102000201000000010100030102 -0002010400090101000001000001010000000101008c01010009010000010100004a0101 -06000000060c01000600000006020202010103030101020206050000010000c406020100 -06000000060a01000600000006040202010103010101020206030100000b010000020101 -00010100000101000002010000030100000a010000020100000101000002010000010100 -0002010000010101000101000001010000020100007e0101008101010008010000090100 -00010100000e01000007010000090100000101000004010000140101000b010000020101 -00010100000101000002010000030100000a0100000101010001010100010100008b0101 -0009010000010100004a01000600010006000000060a0100060000000603020201010303 -010102020605010000c50601010006000000060c01000600000006030202010103010101 -020206030100000b01000002010000020100000101000002010000030100000a01000009 -01000001010000050100000201000001010000020100007e010100810101000701000009 -010000020103000b010000060100000a0100000101000005010000130101000b01000002 -010000020100000101000002010000030100000a0100000201000001010000020100008b -01010009010000010100004a010106000000060c01000600000006020202010103030101 -020206050000010000c40602010006000000060a01000600000006040202010103010101 -020206030100000b010000020100000201000001010400030100000a0100000601030001 -0100000501000002010000010104007e0101008101010008010000070100000301000002 -0100000a010000050100000b0100000101000004010000140101000b0100000201000002 -01000001010400030100000a0100000201000001010000020100008b0101000901000001 -0100004a01000600010006000000060a0100060000000603020201010303010102020605 -010000c50601010006000000060c01000600000006030202010103010101020206030100 -000b010000020100000201000001010000070100000a0100000501000002010000010100 -000501000002010000010100008201010081010100090100000501000004010000020100 -000a010000040100000c0100000101000003010000150101000b01000002010000020100 -0001010000070100000a0100000201000001010000020100008b01010009010000010100 -004a010106000000060c01000600000006020202010103030101020206050000010000c4 -0602010006000000060a01000600000006040202010103010101020206030100000b0100 -0002010000020100000101000002010000030100000a0100000201000001010000020100 -000101000002010000010100000201000001010000020100007e010100810101000a0100 -000301000005010000020100000301010004010000030100000701010003010000010100 -0002010000160101000b01000002010000020100000101000002010000030100000a0100 -000101010001010100010100008b01010009010000010100004a01000600010006000000 -060a0100060000000603020201010303010102020605010000c50601010006000000060c -01000600000006030202010103010101020206030100000b010000020100000201000002 -010200050101000901020003010300020102000201000002010000020102007f01010081 -0101000b0100000201040002010200040101000201040001010400030101000401010002 -010000170101000b01000002010000020100000201020005010100090101000001000001 -010000000101008c0101000a0101004b010106000000060c010006000000060202020101 -03030101020206050000010000c40602010006000000060a010006000000060402020101 -030101010202060301000023010500a1010100810101000c010000310100001801010023 -010500990101005801000600010006000000060a01000600000006030202010103030101 -02020605010000c50601010006000000060c010006000000060302020101030101010202 -0603010000cb0101008101010059010100c301010058010106000000060c010006000000 -06020202010103030101020206050000010000c40602010006000000060a010006000000 -0604020201010301010102020603010000cb0101008101010059010100c3010100580100 -0600010006000000060a0100060000000603020201010303010102020605010000c50601 -010006000000060c0100060000000603020201010301010102020603010000cb01010081 -01010059010100c301010058010106000000060c01000600000006020202010103030101 -020206050000010000c40602010006000000060a01000600000006040202010103010101 -02020603010000cb0101008101010059010100c30101005801000600010006000000060a -0100060000000603020201010303010102020605010000c50601010006000000060c0100 -060000000603020201010301010102020603010000cb0101008101010059010100c30101 -0058010106000000060c01000600000006020202010103030101020206050000010000c4 -0602010006000000060a0100060000000604020201010301010102020603010000cb0101 -008101010059010100c30101005801000600010006000000060a01000600000006030202 -01010303010102020605010000c50601010006000000060c010006000000060302020101 -030101010202060301ff01ff01cf06000000060c01000600000006020202010103030101 -020206050000010000c40602010006000000060a01000600000006040202010103010101 -0202060301ff01ff01ce0600010006000000060a01000600000006030202010103030101 -02020605010000c50601010006000000060c010006000000060302020101030101010202 -0603010000cb0101008101010059010100c301010058010106000000060c010006000000 -06020202010103030101020206050000010000c40602010006000000060a010006000000 -0604020201010301010102020603010000cb0101008101010059010100c3010100580100 -0600010006000000060a0100060000000603020201010303010102020605010000c50601 -010006000000060c0100060000000603020201010301010102020603010000cb01010081 -0101000c0100003101000018010100c301010058010106000000060c0100060000000602 -0202010103030101020206050000010000c40602010006000000060a0100060000000604 -0202010103010101020206030100000b010000120100000e010000010100009701010081 -0101000b01000003010200030102000b010000040102000b01010002010000170101000b -010000120100000e010000010100008f0101000a01000004010200440100060001000600 -0000060a0100060000000603020201010303010102020605010000c50601010006000000 -060c01000600000006030202010103010101020206030100001f0100000e010000010100 -0097010100810101000a0100000301000002010000010100000201000009010100030100 -0002010000090100000101000002010000160101001f0100000e010000010100008f0101 -0009010100030100000201000043010106000000060c0100060000000602020201010303 -0101020206050000010000c40602010006000000060a0100060000000604020201010301 -010102020603010000090102000201000000010100030102000201040009010100000100 -00010100000001010094010100810101000901000008010000010100000c010000000100 -000701000009010000010100000301000015010100090102000201000000010100030102 -0002010400090101000001000001010000000101008c0101000801000000010000030100 -00020100004301000600010006000000060a010006000000060302020101030301010202 -0605010000c50601010006000000060c0100060000000603020201010301010102020603 -0100000b01000002010100010100000101000002010000030100000a0100000101010001 -0101000101000093010100810101000801000009010000010100000e0100000701000009 -0100000101000004010000140101000b0100000201010001010000010100000201000003 -0100000a0100000101010001010100010100008b0101000a010000030100000201000043 -010106000000060c01000600000006020202010103030101020206050000010000c40602 -010006000000060a01000600000006040202010103010101020206030100000b01000002 -010000020100000101000002010000030100000a01000002010000010100000201000093 -010100810101000701000009010000020103000b010000060100000a0100000101000005 -010000130101000b01000002010000020100000101000002010000030100000a01000002 -01000001010000020100008b0101000a010000040103004301000600010006000000060a -0100060000000603020201010303010102020605010000c50601010006000000060c0100 -0600000006030202010103010101020206030100000b0100000201000002010000010104 -00030100000a010000020100000101000002010000930101008101010008010000070100 -0003010000020100000a010000050100000b0100000101000004010000140101000b0100 -00020100000201000001010400030100000a0100000201000001010000020100008b0101 -000a0100000701000043010106000000060c010006000000060202020101030301010202 -06050000010000c40602010006000000060a010006000000060402020101030101010202 -06030100000b010000020100000201000001010000070100000a01000002010000010100 -00020100009301010081010100090100000501000004010000020100000a010000040100 -000c0100000101000003010000150101000b010000020100000201000001010000070100 -000a0100000201000001010000020100008b0101000a0100000701000043010006000100 -06000000060a0100060000000603020201010303010102020605010000c5060101000600 -0000060c01000600000006030202010103010101020206030100000b0100000201000002 -0100000101000002010000030100000a0100000101010001010100010100009301010081 -0101000a0100000301000005010000020100000301010004010000030100000701010003 -0100000101000002010000160101000b0100000201000002010000010100000201000003 -0100000a0100000101010001010100010100008b0101000a010000030100000201000043 -010106000000060c01000600000006020202010103030101020206050000010000c40602 -010006000000060a01000600000006040202010103010101020206030100000b01000002 -010000020100000201020005010100090101000001000001010000000101009401010081 -0101000b0100000201040002010200040101000201040001010400030101000401010002 -010000170101000b01000002010000020100000201020005010100090101000001000001 -010000000101008c01010008010400020102004401000600010006000000060a01000600 -00000603020201010303010102020605010000c50601010006000000060c010006000000 -060302020101030101010202060301000023010500a1010100810101000c010000310100 -0018010100230105009901010058010106000000060c0100060000000602020201010303 -0101020206050000010000c40602010006000000060a0100060000000604020201010301 -010102020603010000cb0101008101010059010100c30101005801000600010006000000 -060a0100060000000603020201010303010102020605010000c50601010006000000060c -0100060000000603020201010301010102020603010000cb0101008101010059010100c3 -01010058010106000000060c010006000000060202020101030301010202060500000100 -00c40602010006000000060a0100060000000604020201010301010102020603010000cb -0101008101010059010100c30101005801000600010006000000060a0100060000000603 -020201010303010102020605010000c50601010006000000060c01000600000006030202 -01010301010102020603010000cb0101008101010059010100c301010058010106000000 -060c01000600000006020202010103030101020206050000010000c40602010006000000 -060a0100060000000604020201010301010102020603010000cb01010081010100590101 -00c30101005801000600010006000000060a010006000000060302020101030301010202 -0605010000c50601010006000000060c0100060000000603020201010301010102020603 -010000cb0101008101010059010100c301010058010106000000060c0100060000000602 -0202010103030101020206050000010000c40602010006000000060a0100060000000604 -02020101030101010202060301ff01ff01ce0600010006000000060a0100060000000603 -020201010303010102020605010000c50601010006000000060c01000600000006030202 -0101030101010202060301ff01ff01cf06000000060c0100060000000602020201010303 -0101020206050000010000c40602010006000000060a0100060000000604020201010301 -010102020603010000cb0101008101010059010100c30101005801000600010006000000 -060a0100060000000603020201010303010102020605010000c50601010006000000060c -0100060000000603020201010301010102020603010000cb0101008101010059010100c3 -01010058010106000000060c010006000000060202020101030301010202060500000100 -00c40602010006000000060a0100060000000604020201010301010102020603010000cb -010100810101000c0100003101000018010100c30101005801000600010006000000060a -0100060000000603020201010303010102020605010000c50601010006000000060c0100 -0600000006030202010103010101020206030100000b010000120100000a010000150100 -0087010100810101000b01000003010200030102000b010000040102000b010100020100 -00170101000b010000120100000e010000010100008f0101000c0100004a010106000000 -060c01000600000006020202010103030101020206050000010000c40602010006000000 -060a01000600000006040202010103010101020206030100001f0100000a010000150100 -0087010100810101000a0100000301000002010000010100000201000009010100030100 -0002010000090100000101000002010000160101001f0100000e010000010100008f0101 -000b0101004a01000600010006000000060a010006000000060302020101030301010202 -0605010000c50601010006000000060c0100060000000603020201010301010102020603 -010000090102000201000000010100030102000201040008010000000101000301020003 -01020002010400020102007f010100810101000901000008010000010100000c01000000 -010000070100000901000001010000030100001501010009010200020100000001010003 -01020002010400090101000001000001010000000101008c0101000a010000000100004a -010106000000060c01000600000006020202010103030101020206050000010000c40602 -010006000000060a01000600000006040202010103010101020206030100000b01000002 -010100010100000101000002010000030100000a01010001010000010100000201000001 -010000020100000301000003010000020100007e01010081010100080100000901000001 -0100000e01000007010000090100000101000004010000140101000b0100000201010001 -0100000101000002010000030100000a0100000101010001010100010100008b01010009 -010000010100004a01000600010006000000060a01000600000006030202010103030101 -02020605010000c50601010006000000060c010006000000060302020101030101010202 -06030100000b01000002010000020100000101000002010000030100000a010000020100 -000101000002010000010100000701000003010000820101008101010007010000090100 -00020103000b010000060100000a0100000101000005010000130101000b010000020100 -00020100000101000002010000030100000a0100000201000001010000020100008b0101 -0008010000020100004a010106000000060c010006000000060202020101030301010202 -06050000010000c40602010006000000060a010006000000060402020101030101010202 -06030100000b010000020100000201000001010400030100000a01000002010000010100 -00020100000201020004010000040102007f010100810101000801000007010000030100 -00020100000a010000050100000b0100000101000004010000140101000b010000020100 -000201000001010400030100000a0100000201000001010000020100008b010100080100 -00020100004a01000600010006000000060a010006000000060302020101030301010202 -0605010000c50601010006000000060c0100060000000603020201010301010102020603 -0100000b010000020100000201000001010000070100000a010000020100000101000002 -0100000501000003010000070100007e0101008101010009010000050100000401000002 -0100000a010000040100000c0100000101000003010000150101000b0100000201000002 -01000001010000070100000a0100000201000001010000020100008b0101000801050049 -010106000000060c01000600000006020202010103030101020206050000010000c40602 -010006000000060a01000600000006040202010103010101020206030100000b01000002 -010000020100000101000002010000030100000a01000002010000010100000201000001 -010000020100000301000003010000020100007e010100810101000a0100000301000005 -010000020100000301010004010000030100000701010003010000010100000201000016 -0101000b01000002010000020100000101000002010000030100000a0100000101010001 -010100010100008b0101000c0100004a01000600010006000000060a0100060000000603 -020201010303010102020605010000c50601010006000000060c01000600000006030202 -010103010101020206030100000b01000002010000020100000201020005010100080100 -0002010000020102000301020005010100020102007f010100810101000b010000020104 -0002010200040101000201040001010400030101000401010002010000170101000b0100 -0002010000020100000201020005010100090101000001000001010000000101008c0101 -000c0100004a010106000000060c01000600000006020202010103030101020206050000 -010000c40602010006000000060a01000600000006040202010103010101020206030100 -0023010500a1010100810101000c01000031010000180101002301050099010100580100 -0600010006000000060a0100060000000603020201010303010102020605010000c50601 -010006000000060001000600010006000100060001000600010006000100060001000600 -00000603020201010301010102020603010000cb0101008101010059010100c301010058 -010106000000060c01000600000006020202010103030101020206050000010000c40602 -010006000100060001000600010006000100060001000600010006000100060000000604 -020201010301010102020603010000cb0101008101010059010100c30101005801000600 -010006000000060a0100060000000603020201010303010102020605010000c506010100 -0600040e060000000603020201010301010102020603010000cb01010081010100590101 -00c301010058010106000000060c01000600000006020202010103030101020206050000 -010000c40602010006000000060000000600000006000000060000000600000006000000 -060000000604020201010301010102020603010000cb0101008101010059010100c30101 -005801000600010006000000060a01000600000006030202010103030101020206050100 -00c506010100060004000600000006000000060000000600000006000000060000000600 -0100060000000603020201010301010102020603010000cb0101008101010059010100c3 -01010058010106000000060c010006000000060202020101030301010202060500000100 -00c40602010004000000060a0100040000000604020201010301010102020603010000cb -0101008101010059010100c30101005801000600010006000000060a0100060000000603 -020201010303010102020605010000c50601010006000401000006080100060004000600 -0000060302020101030101010202060301ff01ff01cf06000000060c0100060000000602 -0202010103030101020206050000010000c4060201000401060000000606010006000401 -0000060402020101030101010202060301ff01ff01ce0600010006000000060a01000600 -00000603020201010303010102020605010000c506010100060004020600000006060100 -0401060000000603020201010301010102020603010000cb0101008101010059010100c3 -01010058010106000000060c010006000000060202020101030301010202060500000100 -00c4060201000402000006060100040200000604020201010301010102020603010000cb -0101008101010059010100c30101005801000600010006000000060a0100060000000603 -020201010303010102020605010000c50601010006000403000006040100060004020600 -00000603020201010301010102020603010000cb010100810101000c0100003101000018 -010100c301010058010106000000060c0100060000000602020201010303010102020605 -0000010000c4060201000403060000000602010006000403000006040202010103010101 -0202060301000028010000040100000b0100008e010100810101000b0100000301020003 -0102000b010000030104000a0101000201000017010100180100000a0100002201020077 -0101000a0100004c01000600010006000000060a01000600000006030202010103030101 -02020605010000c506010100060004040600000006020100040306000000060302020101 -030101010202060301000028010000110100008e010100810101000a0100000301000002 -010000010100000201000009010100030100000201000009010000010100000201000016 -010100180100000a0100002401000077010100090101004c010106000000060c01000600 -000006020202010103030101020206050000010000c40602010004040000060201000404 -00000604020201010301010102020603010000090102000201000002010000020102000a -010100000100000201020003010200020104008c01010081010100090100000801000001 -0100000c0100000001000007010000090100000101000003010000150101000801000000 -010100030102000201040008010000010100000301020002010000000101000201000000 -01010003010200050100007701010008010000000100004c01000600010006000000060a -0100060000000603020201010303010102020605010000c5060101000600040500000600 -010006000404060000000603020201010301010102020603010000080100000201000001 -010000020100000101000002010000080100000101010004010000020100000201000003 -0100008e010100810101000801000009010000010100000e010000060100000a01000001 -010000040100001401010008010100010100000101000002010000030100000a01000000 -010000030100000201000001010100010100000101010001010000010100000201000004 -010000770101000a0100004c010106000000060c01000600000006020202010103030101 -020206050000010000c40602010004050600010006000405000006040202010103010101 -02020603010000080100000601000001010000010100000c010000020100000401000002 -010000070100008e010100810101000701000009010000020103000b010000060100000a -01000001010000050100001301010008010000020100000101000002010000030100000a -010100040100000201000001010000050100000201000001010000020100000401000077 -0101000a0100004c01000600010006000000060a01000600000006030202010103030101 -02020605010000c506010100060004060600010004050600000006030202010103010101 -020206030100000901020003010000010100000201020009010000020100000401000003 -010200040100008e01010081010100080100000701000003010000020100000a01000006 -0100000a010000010100000401000014010100080100000201000001010400030100000a -010100040104000101000005010000020100000101040004010000770101000a0100004c -010106000000060c010006000000060202020101030301010202060500c6060201000406 -01000406000006040202010103010101020206030100000c010000030100000001000005 -01000008010000020100000401000006010000030100008e010100810101000901000005 -01000004010000020100000a010000050100000b01000001010000030100001501010008 -0100000201000001010000070100000a0100000001000003010000050100000501000002 -0100000101000008010000770101000a0100004c01000600010006000000060a01000600 -000006030202010103030101020206ce0100060000000600000006000000060000000600 -000006000000060000000600000006000000060302020101030101010202060301000008 -010000020100000301010002010000020100000801000001010100040100000201000002 -010000030100008e010100810101000a0100000301000005010000020100000301010004 -010000050100000501010003010000010100000201000016010100080100000201000001 -01000002010000030100000a010000010100000201000002010000010100000501000002 -010000010100000201000004010000770101000a0100004c010106000000060c01000600 -000006020202010103030101020206cf0000060000000600000006000000060000000600 -000006000000060000000600000006040202010103010101020206030100000901020005 -010000030102000a010100000100000401000003010200050101008c010100810101000b -010000020104000201020004010100020104000301000005010100040101000201000017 -010100080100000201000002010200050101000801000002010000020102000201000005 -01000002010000020102000501000077010100080104004a01000600010006000000060a -010006000000060302020101030301010202060401000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000613 -0202010103010101020206030100001201000008010500a8010100810101000c01000031 -010000180101001c010500a001010058010106000000060c010006000000060202020101 -030301010202060301000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600000006120202010103010101 -020206030100000f01000000010000b80101008101010059010100c30101005801000600 -010006000000060a01000600000006030202010103030101020206040100040d06000400 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600040006000000040c00000613020201010301 -01010202060301000010010000b90101008101010059010100c301010058010106000000 -060c010006000000060202020101030301010202060301000600040b0000060001000400 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -00000600000006000000060000000600010004000000060000000600040a060000000612 -020201010301010102020603010000cb0101008101010059010100c30101005801000600 -010006000000060a01000600000006030202010103030101020206040100040906000000 -06000100060004000600000006a601000600040006000000060000000600000004080000 -0613020201010301010102020603010000cb0101008101010059010100c3010100580101 -06000000060c010006000000060202020101030301010202060301000600040700000600 -0000060201000400000006a8010004000000060200000600000006000406060000000612 -020201010301010102020603010000cb0101008101010059010100c30101005801000600 -010006000000060a01000600000006030202010103030101020206040100040506000000 -0600000006020100060004000600000006a6010006000400060000000604000006000000 -040400000613020201010301010102020603010000cb0101008101010059010100c30101 -0058010106000000060c0100060000000602020201010303010102020603010006000403 -000006000000060601000400000006a80100040000000606000006000000060004020600 -0000061202020101030101010202060301ff01ff01ce0600010006000000060a01000600 -000006030202010103030101020206040100040106000000060000000606010006000400 -0600000006a6010006000400060000000608000006000000040000000613020201010301 -01010202060301ff01ff01cf06000000060c010006000000060202020101030301010202 -060301000600010006000100060a01000400000006a8010004000000060a010006000100 -060000000612020201010301010102020603010000cb0101008101010059010100c30101 -005801000600010006000000060a01000600000006030202010103030101020206040100 -0401060001000600010006060100060004000600000006a6010006000400060000000608 -010006000100040000000613020201010301010102020603010000cb0101008101010059 -010100c301010058010106000000060c0100060000000602020201010303010102020603 -010006000403010006000100060601000400000006a80100040000000606010006000100 -06000402060000000612020201010301010102020603010000cb01010081010100590101 -00c30101005801000600010006000000060a010006000000060302020101030301010202 -060401000405060001000600010006020100060004000600000006a60100060004000600 -00000604010006000100040400000613020201010301010102020603010000cb01010081 -01010059010100c301010058010106000000060c01000600000006020202010103030101 -02020603010006000407010006000100060201000400000006a801000400000006020100 -0600010006000406060000000612020201010301010102020603010000cb010100810101 -0059010100c30101005801000600010006000000060a0100060000000603020201010303 -010102020604010004090600010006000100060004000600000006a60100060004000600 -00000600010006000100040800000613020201010301010102020603010000cb01010081 -01010059010100c301010058010106000000060c01000600000006020202010103030101 -0202060301000600040b0100060001000400000006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -04000000060001000600040a060000000612020201010301010102020603010000cb0101 -008101010059010100c30101005801000600010006000000060a01000600000006030202 -010103030101020206040100040d06000400060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -040006000100040c00000613020201010301010102020603010000cb0101008101010059 -010100c301010058010106000000060c0100060000000602020201010303000406030100 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -06000000060000000600000006000000061200040301010102020603010000cb01010081 -01010059010100c30101005801000600010006000000060a010006000000060302020101 -030300000202050006040000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000061300000202050003010101 -02020603010000cb0101008101010059010100c301010058010106000000060c01000600 -0000060202020101030300000202050006e50000020205000301010102020603010000cb -0101008101010059010100c30101005801000600010006000000060a0100060000000603 -02020101030300000202050006e50000020205000301010102020603010000cb01010081 -01010059010100c301010058010106000000060c01000600000006020202010103030000 -0202050006e50000020205000301010102020603010000cb0101008101010059010100c3 -0101005801000600010006000000060a0100060000000603020201010303000002020500 -06e50000020205000301010102020603010000cb0101008101010059010100c301010058 -010106000000060c0100060000000602020201010303000002020500000502d900060202 -05000301010102020603010000cb0101008101010059010100c301010058010006000100 -06000000060a010006000000060302020101030300000208050002d90000020805000301 -010102020603010000cb0101008101010059010100c301010058010106000000060c0100 -06000000060202020101030300000208050002d900000208050003010101020206030100 -00cb0101008101010059010100c30101005801000600010006000000060a010006000000 -060302020101030300000208050001d90000020805000301010102020603010000cb0101 -008101010059010100c30101005801010600000006000100060001000600010006000100 -0600010006000100060001000600000006020202010103030000050901d9000005090301 -010102020603010000cb0101008101010059010100c30101005801000600010006000100 -0600010006000100060001000600010006000100060001000600000006030202010103f5 -01010202060301ff01ff01cf0600040e0600000006020202010103f501010202060301ff -01ff01ce06000100040e000006030202010103f5010102020603010000cb010100810101 -0059010100c30101005801010600040e0600000006020202010103f50101020206030100 -00cb0101008101010059010100c301010058010006000100040e000006030202010103f5 -010102020603010000cb0101008101010059010100c30101005801010600040e06000000 -06020202010103f5010102020603010000cb0101008101010059010100c3010100580100 -06000100040e000006030202010103f5010102020603010000cb01010081010100590101 -00c30101005801010600040e0600000006020202010103f5010102020603010000cb0101 -008101010059010100c301010058010006000100040e000006030202010103f501010202 -0603010000cb0101008101010059010100c30101005801010600040e0600000006020202 -010103f5010102020603010000cb0101008101010059010100c301010058010006000100 -040e000006030202010103f5010102020603010000cb0101008101010059010100c30101 -005801010600040e0600000006020202010103f5010102020603010000cb010100810101 -0059010100c301010058010006000100040e000006030202010103f50101020206030100 -00cb0101008101010059010100c30101005801010600040e0600000006020202010103f5 -010102020603010000cb0101008101010059010100c301010058010006000100040e0000 -06030202010103f5010102020603010000cb0101008101010059010100c3010100580101 -0600040e0600000006020202010103f5010102020603010000cb01010081010100590101 -00c301010058010006000100040e000006030202010103f5010102020603010000cb0101 -008101010059010100c30101005801010600040e0600000006020202010103f501010202 -0603010000cb0101008101010059010100c301010058010006000100040e000006030202 -010103f5010102020603010000cb0101008101010059010100c30101005801010600040e -0600000006020202010103f5010102020603010000cb0101008101010059010100c30101 -0058010006000100040e000006030202010103f5010102020603010000cb010100810101 -0059010100c30101005801010600040e0600000006020202010103f501010202060301ff -01ff01ce06000100040e000006030202010103f501010202060301ff01ff01cf06000000 -060000000600000006000000060000000600000006000000060000000600000006020202 -010103f5010102020603010000cb0101008101010059010100c301010058010006000100 -040000000600000006000000060000000600000006000000060000000600000006030202 -010103f5010102020603010000cb0101008101010059010100c301010058010106000400 -0600000006080100060004000600000006020202010103f5010102020603010000cb0101 -008101010059010100c30101005801000600010004010600000006080100040000000603 -0202010103f5010102020603010000cb0101008101010059010100c30101005801010600 -040100000608010004010600000006020202010103f5010102020603010000cb01010081 -01010059010100c301010058010006000100040200000606010006000401000006030202 -010103f5010102020603010000cb0101008101010059010100c301010058010106000402 -0600000006040100060004020600000006020202010103f5010102020603010000cb0101 -008101010059010100c30101005801000600010004030600000006040100040200000603 -0202010103f5010102020603010000cb0101008101010059010100c30101005801010600 -040300000604010004030600000006020202010103f5010102020603010000cb01010081 -01010059010100c301010058010006000100040400000602010006000403000006030202 -010103f5010102020603010000cb0101008101010059010100c301010058010106000404 -0600000006000100060004040600000006020202010103f5010102020603010000cb0101 -008101010059010100c30101005801000600010004050600010006000100040400000603 -0202010103f5010102020603010000cb0101008101010059010100c30101005801010600 -040500000600010004050600000006020202010103f5010102020603010000cb01010081 -01010059010100c3010100580100060001000406010006000405000006030202010103f5 -010102020603010000cb0101008101010059010100c30101005801010600040606000406 -0600000006020202010103f5010102020603010000cb0101008101010059010100c30101 -005801000600010006000000060000000600000006000000060000000600000006000000 -0600000006030202010103f5010102020603010000cb0101008101010059010100c30101 -005801010600000006000000060000000600000006000000060000000600000006000000 -0600000006020202010103f5010102020603010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -06000100060001000600010006000100060001000600010006110202010103f501010202 -060201000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006000100060001000600010006000100060001000600010006000100 -060001000600010006120202010103f50101020206030100040d06000400060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -0000040000000600040c0600000006110202010103f501010202060201000600040b0000 -060001000400000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060000000600000006000000060000000600000006000000 -060000000600000006000000060004000600000006000000040a000006120202010103f5 -010102020603010004090600000006000100060004000600000006ff06ff06ac01000400 -00000600000006000000060004080600000006110202010103f501010202060201000600 -0407000006000000060201000400000006ff06ff06ac0100060004000600000006020000 -060000000406000006120202010103f50101020206030100040506000000060000000602 -0100060004000600000006ff06ff06ac0100040000000604000006000000060004040600 -000006110202010103f50101020206020100060004030000060000000606010004000000 -06ff06ff06ac0100060004000600000006060000060000000402000006120202010103f5 -01010202060301000401060000000600000006060100060004000600000006ff06ff06ac -0100040000000608000006000000060004000600000006110202010103f5010102020602 -01000600010006000100060a01000400000006ff06ff06ac010006000400060000000608 -0100060001000600000006120202010103f5010102020603010004010600010006000100 -06060100060004000600000006ff06ff06ac010004000000060801000600010006000400 -0600000006110202010103f5010102020602010006000403010006000100060601000400 -000006ff06ff06ac01000600040006000000060601000600010004020000061202020101 -03f501010202060301000405060001000600010006020100060004000600000006ff06ff -06ac0100040000000604010006000100060004040600000006110202010103f501010202 -0602010006000407010006000100060201000400000006ff06ff06ac0100060004000600 -000006020100060001000406000006120202010103f50101020206030100040906000100 -06000100060004000600000006ff06ff06ac010004000000060001000600010006000408 -0600000006110202010103f501010202060201000600040b010006000100040000000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -0100060004000600000006000100040a000006120202010103f5000406030100040d0600 -040006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -010006000100060001000600010006000100060001000600010006000100060001000600 -01000600010006000100040000000600040c060000000611000403f50000020205000602 -010006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000061200000202050003f50000020205000603000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000060000000600 -000006000000060000000600000006000000060000000600000006000000061100000202 -050003f500000202050006ff06ff06e800000202050003f500000202050006ff06ff06e8 -00000202050003f500000202050006ff06ff06e800000202050003f50000020205000005 -02ff02ff02dc00060202050003f500000208050002ff02ff02dc00000208050003f50000 -0208050002ff02ff02dc00000208050003f500000208050001ff01ff01dc000002080500 -03f50000050901ff01ff01dc0000050903ff03ff03ff03ff03ff03ff03ff03d3 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 21 400 186 -%%EOF diff --git a/lib/tv/doc/src/tv_start_pid_sorted.gif b/lib/tv/doc/src/tv_start_pid_sorted.gif Binary files differdeleted file mode 100644 index 390f98541f..0000000000 --- a/lib/tv/doc/src/tv_start_pid_sorted.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_start_pid_sorted.ps b/lib/tv/doc/src/tv_start_pid_sorted.ps deleted file mode 100644 index 13ef2ed027..0000000000 --- a/lib/tv/doc/src/tv_start_pid_sorted.ps +++ /dev/null @@ -1,1853 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_pid_sorted.eps) -%%CreationDate: (Mon Mar 19 17:15:26 2001) -%%BoundingBox: 0 0 377 205 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 377 205 -userdict begin -%%BeginData: -DisplayImage -0 0 -377.000000 205.000000 -12 -755 410 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -b22222 -aab6aa -e7e7e7 -000000 -000000 -000000 -000000 -000000 -000000 -000000 -000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff -02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202 -04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff -02d000000202040000000202040002080000020d040002f6010302110103023801010206 -0101024001010230010102ff020400000202040000000202040002080000020d040002f6 -010102020107020001010203010102010101020e0105020001070201010302070100020b -01010206010102400101020c0104021e010102ff02040000020204000000020204000208 -0000020d040002f6010102050101020301010203010102010101020e0101020701010203 -01010201010102050101020b010102060101024e010102020101021d010102ff02040000 -0202040000000202040002080000020204060203040002f6010102050101020301010203 -010102010101020e01010207010102030101020801040201010302030101020001010203 -010102020103020301040206010302030101020001010207010102000101020101010203 -010302030101020201010200010102020101020101030202010102000101020101010203 -010302020101020001010201010102020103020201010202010102f30000020204000000 -04030208000002020400030400000203040002f601010205010102040101020201000202 -0101020e0101020701010203010202080101020201010201010102020102020001010202 -010102010101020101010201010102090101020101010202010202000101020601020200 -010202000101020101010201010102020101020201020200010102010101020001010200 -010102020102020001020200010102010101020101010201010102000101020101010201 -010102010101020101010202010102f3000004030101020b000002030400030200000204 -040002f6010102050101020401010201010102020101020e010402040101020401030206 -010102060101020201010201010102020101020101010201010102010102020801010201 -010102020101020101010206010102010101020101010205010102020101020201010201 -010102010101020001010200010102020101020101010201010102050101020101020203 -01010201010102010101020101010202010002f70103020b000002030400030200000204 -040002f6010102050101020501010200010002030101020e010102070101020601020205 -010102030104020201010201010102020101020101050202010302060101020101010202 -010102010101020601010201010102010101020201040202010102020101020101010201 -010102000101020001010202010102010101020101010202010402010101020401010201 -0105020201010200010102f70103020b000002040400030000000205040002f601010205 -01010205010302030101020e010102070101020701010205010102020101020101010202 -010102010101020201010201010102080102020501010201010102020101020101010206 -010102010101020101010201010102010101020201010202010102010101020101010201 -010102000101020101010201010102010101020101010201010102010101020401010201 -0101020601010200010002f80103020b000002040400030000000205040002f601010205 -01010206010102040101020e010102070101020301010201010102050101020201010201 -010102020101020101010202010102010101020201000205010102050101020101010202 -010102010101020601010201010102010101020101010201010102020101020201010201 -010102020101020701010201010102010101020101010201010102010101020401010201 -0101020201000203010202f80103020b0000020500000206040002f60101020501010206 -010102040101020e01050203010102040103020701020201010202000101020101040203 -010102020103020201040207010302030101020101010206010102010101020101010202 -010202000101020101010202010102010101020301050202010102010101020101010202 -0102020001010200010102040101020201030204010102f90103020b0000020d040002f6 -01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000 -020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff -02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff -02ee01030202050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050002020103020200000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050001000202010302020500000005ff05ff05e401000500020201030202000005ff05ff -05e601000202010302020500000005ff05ff05e401000500020201030202000005ff05ff -05e601000202010302020500000005ff05ff05e4010005000202010302020000050c0604 -0504060005030602051f0600050206000504060005270602050b06000506060005ff05ff -0535060005020600050906020514010002020103020205000000050b0600050f0600051f -060005020600052c060005020600050a060005ff05ff053d060005020600050b06000513 -010005000202010302020000050c06000506060205050600050306020518060005020600 -050206020503060205020600050206000517060005020600050106000500060105020604 -050206020503060205020600050006010503060205ff05ff052006000502060005020602 -050506000502060005000601050d010002020103020205000000050b0600050806000505 -060005020600050206000518060005000600050506000502060005020600050106000502 -060005170600050206000501060105010600050306000506060005020600050206000501 -060105010600050106000502060005ff05ff051f06000502060005010600050206000504 -06000502060105010600050b010005000202010302020000050c06030505060005050600 -050206000502060005180600050006000505060005020600050206000501060005000600 -050006000517060005020600050106000502060005030600050606000502060005020600 -05010600050206000501060005ff05ff0523060405010600050206000504060005020600 -05020600050c010002020103020205000000050b06000508060005050600050206040518 -060005000600050506000502060405010600050006000500060005170600050206000501 -0600050206000503060005060600050206000502060005010600050206000502060205ff -05ff052006000502060005010604050406000502060005020600050b0100050002020103 -02020000050c0600050806000505060005020600051d0600050606000502060005050600 -050006000500060005170600050206000501060005020600050306000506060005020600 -0502060005010600050206000505060005ff05ff051f0600050206000501060005080600 -0502060005020600050c010002020103020205000000050b060005080600050506000502 -060005020600051906000506060005020600050206000501060005000600050006000517 -060005020600050106010501060005030600050606000502060005020600050106000502 -0600050106000502060005ff05ff051f0600050206000501060005020600050406000502 -060105010600050b010005000202010302020000050c0600050806000505060005030602 -051a06000506060005030602050306000500060005190602050206000500060105050601 -050406000503060205020600050206000502060205ff05ff052006000502060005020602 -050506000502060005000601050d0100020201030202050000000576060005ff05ff055b -0600050f010005000202010302020000050b0606052a0606052a06060500060005ff05ff -05450606050e06000510010002020103020205000000050a0606052a0606052a06060500 -060005ff05ff05450606050e0600050f01000500020201030202000005ff05ff05e60100 -0202010302020500000005ff05ff05e401000500020201030202000005ff05ff05e60100 -020201030202050000000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050002020103020200000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010002020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff -05ff05e802020103020205ff05ff05e8020201030202051c01020504010305c101020504 -0103051a0102057f01010505010205f001020504010305190101052f020201030202050e -01060508010005060101050f010205010102059b01060508010005060101051001050504 -0101054d010205240104050d0101051e0102052401020501010205930106050801000506 -0101051101030535020201030202050e0100050101010500010005070101050601000511 -010105010100059d0100050101010500010005070101050601000513010105060100054d -0101050001010524010105000101050c0100051e01010500010105240101050101000595 -010005010101050001000507010105060100051101010501010105340202010302020510 -010105030103050201030503010105030103050801020500010105010103050001010500 -01000500010005020103058b010105030103050201030503010105030103050a01010503 -0104054c0101050101050500010305000102050201030501010105000102050701010501 -01010500010305030104051d010105010105050001030500010205020103050101010500 -010205070102050001010501010305000101050001000500010005020103058301010503 -010305020103050301010503010305090101050101000500010305020105050101030521 -020201030202051001010506010105000101050101010502010105020101050101010507 -0100050001000500010005050101050001050500010105010101058a0101050601010500 -010105010101050201010502010105010101050901010502010105010101054c01000502 -010105000101050201000500010205000101050001010501010105010102050001000507 -010105010101050201010502010105010101051d01000502010105000101050201000500 -010205000101050001010501010105010102050001000507010005000100050001000505 -010105000105050001010501010105820101050601010500010105010101050201010502 -010105010101050801020504010105020101050001010501010105010101052002020103 -020205100100050401040500010105010101050201010501010605070100050001020502 -0104050001010500010005000107058a0100050401040500010105010101050201010501 -0106050901010501010105020101054b0101050201000501010105000100050001000500 -01010501010805010101050a0103050401010501010105020101051c0101050201000501 -01010500010005000100050001010501010805010101050a010005000102050201040500 -010105000100050001070582010005040104050001010501010105020101050101060509 -01020503010105040101050101060520020201030202050f010105020101050101010500 -0101050201010501010105020101050b0101050001010501010105010101050101000500 -01000500010005000101058e010105020101050101010500010105020101050101010502 -0101050d01010502010105010101054c0101050101010501010205000100050101000502 -01000500010105050101050a0101050601010502010105010101051d0101050101010501 -01020500010005010100050201000500010105050101050a010105000101050101010501 -010105010100050001000500010005000101058601010502010105010101050001010502 -01010501010105020101050b010105010101050201010503010105030101052502020103 -0202050f0101050201010501010105000101050101010502010105020101050101010507 -01000501010105010101050101010500010105000100050001000500010105010101058a -010105020101050101010500010105010101050201010502010105010101050901010502 -010105010101054c01010500010105020103050101010501010105000101050101010501 -0101050a0101050601010502010105010101051d01010500010105020103050101010501 -0101050001010501010105010101050a0100050101010501010105010101050001010500 -010005000100050001010501010105820101050201010501010105000101050101010502 -010105020101050101010507010105010101050201010502010205000101050001010501 -01010521020201030202050e01030502010a050101050501010305070102050001010502 -0107050001000500010105000103058a01030502010a0501010505010103050801050501 -0105054c0102050301010500010005000103050001020500010305010104050701030503 -010505010105051d01020503010105000100050001030500010205000103050101040507 -01020500010105020107050001000500010105000103058201030502010a050101050501 -010305090103050101050500010505010103052202020103020205ff05ff05e802020103 -020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103 -020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e802020103 -0202050201ff01ff01e205020202010302020503010000cb0101008101010059010100c3 -010100580101050001000500010005000100050001000500010005000100050001000500 -01000500000005020202010302020503010000cb0101008101010059010100c301010058 -010005000100030601000306000005030202010302020503010000cb010100810101000c -0100002301000026010100c3010100580101050003050000050003060500000005020202 -0103020205030100001f0100000a0100009e010100810101000b01000004010100090104 -000a01010002010000250101001e0102000501000012010000060100002e010000120102 -0003010200310101000a0100000501010044010005000100030505000100050003050000 -050302020103020205030100001f0100000a0100009e010100810101000a010000040100 -0001010000080100000d0100000101000002010000240101002001000019010000360100 -001401000005010000310101000901010004010000010100004301010500030405000000 -050001000305050000000502020201030202050301000009010200030102000901040002 -01020002010000000101009b01010081010100090100000501000001010000080100000d -010000010100000301000023010100090102000201000000010100020100000001010005 -01000003010200030102000301020002010400020102000301020002010000000101000a -010200030102000201000000010100020104000101000000010100030102000501000005 -010000030102000201000000010100230101000801000000010000040100000101000043 -010005000100030400000502010003040000050302020103020205030100000801000002 -01000001010000020100000a010000030100000201000001010100010100009a01010081 -010100080100000601000001010000080103000a01000001010000040100002201010008 -010000020100000101010001010000010101000101000004010000050100000201000002 -010000010100000201000003010000060100000201000002010000010101000101000008 -010000020100000101000002010000010101000101000003010000030101000101000001 -01000002010000040100000501000002010000020100000101010001010000220101000a -010000040100000101000043010105000303000005020100050003040500000005020202 -0103020205030100000c010000010100000e0100000701000001010000020100009a0101 -00810101000701000007010000010100000c010000090100000101000005010000210101 -000c01000001010000020100000101000002010000040100000501000002010000090100 -000301000006010000020100000201000001010000020100000801000005010000020100 -000101000002010000030100000301000005010000020100000401000005010000020100 -000201000001010000260101000a01000004010000010100004301000500010003030500 -0000050201000500030300000503020201030202050301000009010300010100000e0100 -000401030001010000020100009a010100810101000801000006010000010100000c0100 -000901000001010000040100002201010009010300010100000201000001010000020100 -000401000005010000020100000601030003010000060100000201000002010000010100 -000201000008010000050100000201000001010000020100000301000003010000050100 -000201000004010000050100000201040001010000260101000a01000004010000010100 -004301010500030205000000050401000303050000000502020201030202050301000008 -01000002010000010100000e010000030100000201000001010000020100009a01010081 -010100090100000501000001010000080100000201000009010000010100000301000023 -010100080100000201000001010000020100000101000002010000040100000501000002 -010000050100000201000003010000060100000201000002010000010100000201000008 -010000050100000201000001010000020100000301000003010000050100000201000004 -010000050100000201000005010000260101000a01000004010000010100004301000500 -010003020000050601000302000005030202010302020503010000080100000201000001 -010000020100000a010000030100000201000001010100010100009a010100810101000a -010000040100000101000003010100020100000201000003010100030100000101000002 -010000240101000801000002010000010101000101000001010100010100000401000005 -010000020100000201000001010000020100000301000006010000020100000201000001 -010000020100000801000002010000010100000201000001010000020100000301000003 -01000005010000020100000401000005010000020100000201000001010000260101000a -010000040100000101000043010105000301000005060100050003020500000005020202 -01030202050301000009010300020102000c0101000201030001010000000101009b0101 -00810101000b010000040101000401010003010200040101000401010002010000250101 -000901030001010000000101000201000000010100050100000501000003010200030103 -000401010004010000030102000201000002010000090102000301020002010000020100 -000401010001010000060102000501000005010000030102000201000026010100080104 -000301010044010005000100030105000000050601000500030100000503020201030202 -050301000015010500af010100810101000c01000023010000260101000f010000050100 -003c01050068010100580101050003000500000005080100030105000000050202020103 -02020503010000cb01010081010100590101000f01000005010000ab0101005801000500 -010003000000050a01000300000005030202010302020503010000cb0101008101010059 -0101000f01000005010000ab010100580101050000000500010005000100050001000500 -01000500010005000100050003000500000005020202010302020503010000cb01010081 -01010059010100c301010058010005000100050001000500010005000100050001000500 -010005000100050001000500000005030202010302020503010000cb0101008101010059 -010100c30101005801010500030e0500000005020202010302020503010000cb01010081 -01010059010100c301010058010005000100050000000500000005000000050000000500 -000005000000050000000500000005030202010302020503010000cb0101008101010059 -010100c30101005801010500000005000000050000000500000005000000050000000500 -000005000100050000000502020201030202050301ff01ff01ce0500010005000000050a -0100050000000503020201030202050301ff01ff01cf05000000050c0100050000000502 -0202010302020503010000cb0101008101010059010100c3010100580100050001000500 -0000050a01000500000005030202010302020503010000cb0101008101010059010100c3 -01010058010105000000050c01000500000005020202010302020503010000cb01010081 -0101000c0100002a0100001f010100c30101005801000500010005000000050a01000500 -00000503020201030202050301000010010200090100000d0102000a010200100100007b -010100810101000b010000040101000b010000050100000c010100020100001e01010010 -010200090100000d010200930101000a0101004b010105000000050c0100050000000502 -020201030202050301000012010000090100000f0100000c010000100100007b01010081 -0101000a010000040100000101000009010100040101000b01000001010000020100001d -01010012010000090100000f0100009301010009010000010100004a0100050001000500 -0000050a0100050000000503020201030202050301000009010100000100000401000003 -010200020100000001010003010200050100000c01000003010200030102000201000001 -010000030102007101010081010100090100000501000001010000080100000001000003 -010000000100000b01000001010000030100001c01010009010100000100000401000003 -010200020100000001010003010200050100000901000000010100030102000201010000 -010000030102000a01020003010200020100000001010002010000020100000201020002 -010000000101003f01010009010000010100004a010105000000050c0100050000000502 -020201030202050301000008010000010101000401000002010000020100000101010001 -0100000101000002010000040100000c0100000201000002010000010100000201000001 -01000000010000030100000201000070010100810101000801000006010000010100000a -010000050100000b01000001010000040100001b01010008010000010101000401000002 -010000020100000101010001010000010100000201000004010000090101000101000001 -010000020100000101000000010000000100000101000002010000080100000201000001 -010000020100000101010001010000010100000201000001010000020100000101010001 -0100003e01010009010000010100004a01000500010005000000050a0100050000000503 -020201030202050301000008010000020100000401000002010000020100000101000002 -01000005010000040100000c010000020100000201000001010000050101000401000074 -010100810101000701000007010000010100000a010000050100000b0100000101000005 -0100001a0101000801000002010000040100000201000002010000010100000201000005 -010000040100000901000002010000050100000101000000010000000100000101000002 -010000080100000501000002010000010100000501000002010000010100000201000001 -0100004201010009010000010100004a010105000000050c010005000000050202020103 -020205030100000801000002010000040100000201000002010000010100000201000002 -010300040100000c01000002010000020100000101000005010100050102007101010081 -0101000801000006010000010100000a010000050100000b01000001010000040100001b -010100080100000201000004010000020100000201000001010000020100000201030004 -010000090100000201000002010300010100000001000000010000010104000901020002 -01040001010000060100000001000002010400010100004201010009010000010100004a -01000500010005000000050a010005000000050302020103020205030100000801000002 -01000004010000020100000201000001010000020100000101000002010000040100000c -010000020100000201000001010000050100000001000007010000700101008101010009 -01000005010000010100000a010000050100000b01000001010000030100001c01010008 -010000020100000401000002010000020100000101000002010000010100000201000004 -010000090100000201000001010000020100000101000000010000000100000101000010 -010000010100000501000006010000000100000201000005010000420101000901000001 -0100004a010105000000050c010005000000050202020103020205030100000801000001 -01010004010000020100000201000001010100010100000101000002010000040100000c -010000020100000201000001010000020100000101000001010000020100000201000070 -010100810101000a01000004010000010100000301010004010000050100000501010003 -01000001010000020100001d010100080100000101010004010000020100000201000001 -010100010100000101000002010000040100000901000002010000010100000201000001 -010000000100000001000001010000020100000801000002010000010100000201000001 -010000070100000301000002010000010100004201010009010000010100004a01000500 -010005000000050a01000500000005030202010302020503010000090101000001000004 -01000003010200020100000001010003010300040100000c010000030102000301020002 -010000020100000201020071010100810101000b01000004010100040101000201040001 -0104000301010004010100020100001e0101000901010000010000040100000301020002 -010000000101000301030004010000090100000201000002010300010100000001000000 -010000020102000a0102000301020002010000070100000401020002010000420101000a -0101004b010105000000050c010005000000050202020103020205030100000c01000023 -01050093010100810101000c0100002a0100001f0101000c010000230105001c01050068 -0101005801000500010005000000050a0100050000000503020201030202050301000008 -01000002010000bd01010081010100590101000801000002010000b50101005801010500 -0000050c0100050000000502020201030202050301000009010200be0101008101010059 -01010009010200b60101005801000500010005000000050a010005000000050302020103 -02020503010000cb0101008101010059010100c301010058010105000000050c01000500 -000005020202010302020503010000cb0101008101010059010100c30101005801000500 -010005000000050a01000500000005030202010302020503010000cb0101008101010059 -010100c301010058010105000000050c01000500000005020202010302020503010000cb -0101008101010059010100c30101005801000500010005000000050a0100050000000503 -020201030202050301ff01ff01cf05000000050c01000500000005020202010302020503 -01ff01ff01ce0500010005000000050a01000500000005030202010302020503010000cb -0101008101010059010100c301010058010105000000050c010005000000050202020103 -02020503010000cb0101008101010059010100c30101005801000500010005000000050a -01000500000005030202010302020503010000cb010100810101000c0100002a0100001f -010100c301010058010105000000050c0100050000000502020201030202050301000010 -010200090100000d0102009b010100810101000b010000040101000b010000050100000c -010100020100001e01010010010200090100000d010200930101000a0101004b01000500 -010005000000050a0100050000000503020201030202050301000012010000090100000f -0100009b010100810101000a010000040100000101000009010100040101000b01000001 -010000020100001d01010012010000090100000f0100009301010009010000010100004a -010105000000050c01000500000005020202010302020503010000090101000001000004 -010000030102000201000000010100030102000501000009010000000101000301020002 -010100000100000301020003010200710101008101010009010000050100000101000008 -0100000001000003010000000100000b01000001010000030100001c0101000901010000 -010000040100000301020002010000000101000301020005010000090100000001010003 -0102000201010000010000030102000a0102000301020002010000000101000201000002 -0100000201020002010000000101003f01010009010000010100004a0100050001000500 -0000050a0100050000000503020201030202050301000008010000010101000401000002 -010000020100000101010001010000010100000201000004010000090101000101000001 -010000020100000101000000010000000100000101000002010000010100000201000070 -010100810101000801000006010000010100000a010000050100000b0100000101000004 -0100001b0101000801000001010100040100000201000002010000010101000101000001 -010000020100000401000009010100010100000101000002010000010100000001000000 -010000010100000201000008010000020100000101000002010000010101000101000001 -01000002010000010100000201000001010100010100003e01010009010000010100004a -010105000000050c01000500000005020202010302020503010000080100000201000004 -010000020100000201000001010000020100000501000004010000090100000201000005 -010000010100000001000000010000010100000201000001010000740101008101010007 -01000007010000010100000a010000050100000b01000001010000050100001a01010008 -010000020100000401000002010000020100000101000002010000050100000401000009 -010000020100000501000001010000000100000001000001010000020100000801000005 -010000020100000101000005010000020100000101000002010000010100004201010009 -010000010100004a01000500010005000000050a01000500000005030202010302020503 -010000080100000201000004010000020100000201000001010000020100000201030004 -010000090100000201000002010300010100000001000000010000010104000201020071 -010100810101000801000006010000010100000a010000050100000b0100000101000004 -0100001b0101000801000002010000040100000201000002010000010100000201000002 -010300040100000901000002010000020103000101000000010000000100000101040009 -010200020104000101000006010000000100000201040001010000420101000901000001 -0100004a010105000000050c010005000000050202020103020205030100000801000002 -010000040100000201000002010000010100000201000001010000020100000401000009 -010000020100000101000002010000010100000001000000010000010100000901000070 -010100810101000901000005010000010100000a010000050100000b0100000101000003 -0100001c0101000801000002010000040100000201000002010000010100000201000001 -010000020100000401000009010000020100000101000002010000010100000001000000 -010000010100001001000001010000050100000601000000010000020100000501000042 -01010009010000010100004a01000500010005000000050a010005000000050302020103 -020205030100000801000001010100040100000201000002010000010101000101000001 -010000020100000401000009010000020100000101000002010000010100000001000000 -0100000101000002010000010100000201000070010100810101000a0100000401000001 -010000030101000401000005010000050101000301000001010000020100001d01010008 -010000010101000401000002010000020100000101010001010000010100000201000004 -010000090100000201000001010000020100000101000000010000000100000101000002 -010000080100000201000001010000020100000101000007010000030100000201000001 -0100004201010009010000010100004a010105000000050c010005000000050202020103 -020205030100000901010000010000040100000301020002010000000101000301030004 -010000090100000201000002010300010100000001000000010000020102000301020071 -010100810101000b01000004010100040101000201040001010400030101000401010002 -0100001e0101000901010000010000040100000301020002010000000101000301030004 -010000090100000201000002010300010100000001000000010000020102000a01020003 -01020002010000070100000401020002010000420101000a0101004b0100050001000500 -0000050a010005000000050302020103020205030100000c010000230105009301010081 -0101000c0100002a0100001f0101000c010000230105001c010500680101005801010500 -0000050c010005000000050202020103020205030100000801000002010000bd01010081 -010100590101000801000002010000b50101005801000500010005000000050a01000500 -00000503020201030202050301000009010200be010100810101005901010009010200b6 -01010058010105000000050c01000500000005020202010302020503010000cb01010081 -01010059010100c30101005801000500010005000000050a010005000000050302020103 -02020503010000cb0101008101010059010100c301010058010105000000050c01000500 -000005020202010302020503010000cb0101008101010059010100c30101005801000500 -010005000000050a01000500000005030202010302020503010000cb0101008101010059 -010100c301010058010105000000050c0100050000000502020201030202050301ff01ff -01ce0500010005000000050a0100050000000503020201030202050301ff01ff01cf0500 -0000050c01000500000005020202010302020503010000cb0101008101010059010100c3 -0101005801000500010005000000050a01000500000005030202010302020503010000cb -0101008101010059010100c301010058010105000000050c010005000000050202020103 -02020503010000cb010100810101000c0100002a0100001f010100c30101005801000500 -010005000000050a0100050000000503020201030202050301000010010200090100000d -0102004301000056010100810101000b010000040101000b010000050100000c01010002 -0100001e01010010010200090100000d010200930101000a0101004b010105000000050c -0100050000000502020201030202050301000012010000090100000f0100004301000056 -010100810101000a010000040100000101000009010100040101000b0100000101000002 -0100001d01010012010000090100000f0100009301010009010000010100004a01000500 -010005000000050a01000500000005030202010302020503010000090101000001000004 -010000030102000201000000010100030102000501000009010000000101000301020002 -0101000001000003010200030102000a0102000201000002010000010104005401010081 -010100090100000501000001010000080100000001000003010000000100000b01000001 -010000030100001c01010009010100000100000401000003010200020100000001010003 -010200050100000901000000010100030102000201010000010000030102000a01020003 -010200020100000001010002010000020100000201020002010000000101003f01010009 -010000010100004a010105000000050c0100050000000502020201030202050301000008 -010000010101000401000002010000020100000101010001010000010100000201000004 -010000090101000101000001010000020100000101000000010000000100000101000002 -010000010100000201000008010000020100000101000002010000030100005601010081 -0101000801000006010000010100000a010000050100000b01000001010000040100001b -010100080100000101010004010000020100000201000001010100010100000101000002 -010000040100000901010001010000010100000201000001010000000100000001000001 -010000020100000801000002010000010100000201000001010100010100000101000002 -010000010100000201000001010100010100003e01010009010000010100004a01000500 -010005000000050a01000500000005030202010302020503010000080100000201000004 -010000020100000201000001010000020100000501000004010000090100000201000005 -0100000101000000010000000100000101000002010000010100000c0100000201000002 -010000000100000401000056010100810101000701000007010000010100000a01000005 -0100000b01000001010000050100001a0101000801000002010000040100000201000002 -010000010100000201000005010000040100000901000002010000050100000101000000 -010000000100000101000002010000080100000501000002010000010100000501000002 -0100000101000002010000010100004201010009010000010100004a010105000000050c -010005000000050202020103020205030100000801000002010000040100000201000002 -010000010100000201000002010300040100000901000002010000020103000101000000 -010000000100000101040002010200090104000301000005010000560101008101010008 -01000006010000010100000a010000050100000b01000001010000040100001b01010008 -010000020100000401000002010000020100000101000002010000020103000401000009 -010000020100000201030001010000000100000001000001010400090102000201040001 -010000060100000001000002010400010100004201010009010000010100004a01000500 -010005000000050a01000500000005030202010302020503010000080100000201000004 -010000020100000201000001010000020100000101000002010000040100000901000002 -010000010100000201000001010000000100000001000001010000090100000801000006 -010000000100000401000056010100810101000901000005010000010100000a01000005 -0100000b01000001010000030100001c0101000801000002010000040100000201000002 -010000010100000201000001010000020100000401000009010000020100000101000002 -010000010100000001000000010000010100001001000001010000050100000601000000 -01000002010000050100004201010009010000010100004a010105000000050c01000500 -000005020202010302020503010000080100000101010004010000020100000201000001 -010100010100000101000002010000040100000901000002010000010100000201000001 -010000000100000001000001010000020100000101000002010000080100000201000001 -010000020100000301000056010100810101000a01000004010000010100000301010004 -01000005010000050101000301000001010000020100001d010100080100000101010004 -010000020100000201000001010100010100000101000002010000040100000901000002 -010000010100000201000001010000000100000001000001010000020100000801000002 -010000010100000201000001010000070100000301000002010000010100004201010009 -010000010100004a01000500010005000000050a01000500000005030202010302020503 -010000090101000001000004010000030102000201000000010100030103000401000009 -010000020100000201030001010000000100000001000002010200030102000a01020002 -010000020100000401010054010100810101000b01000004010100040101000201040001 -0104000301010004010100020100001e0101000901010000010000040100000301020002 -010000000101000301030004010000090100000201000002010300010100000001000000 -010000020102000a0102000301020002010000070100000401020002010000420101000a -0101004b010105000000050c010005000000050202020103020205030100000c01000023 -0105002301050069010100810101000c0100002a0100001f0101000c010000230105001c -010500680101005801000500010005000000050a01000500000005030202010302020503 -0100000801000002010000bd01010081010100590101000801000002010000b501010058 -010105000000050c0100050000000502020201030202050301000009010200be01010081 -0101005901010009010200b60101005801000500010005000000050a0100050000000503 -0202010302020503010000cb0101008101010059010100c301010058010105000000050c -01000500000005020202010302020503010000cb0101008101010059010100c301010058 -01000500010005000000050a01000500000005030202010302020503010000cb01010081 -01010059010100c301010058010105000000050c01000500000005020202010302020503 -010000cb0101008101010059010100c30101005801000500010005000000050a01000500 -00000503020201030202050301ff01ff01cf05000000050c010005000000050202020103 -0202050301ff01ff01ce0500010005000000050a01000500000005030202010302020503 -010000cb0101008101010059010100c301010058010105000000050c0100050000000502 -0202010302020503010000cb0101008101010059010100c3010100580100050001000500 -0000050a01000500000005030202010302020503010000cb010100810101000c0100002a -0100001f010100c301010058010105000000050c01000500000005020202010302020503 -0100000b010000120100001f01000089010100810101000b010000040101000b01000004 -0102000b010100020100001e0101000b010000120100000e010000010100008f0101000a -0101004b01000500010005000000050a010005000000050302020103020205030100001f -0100001f01000089010100810101000a0100000401000001010000090101000301000002 -0100000901000001010000020100001d0101001f0100000e010000010100008f01010009 -010000010100004a010105000000050c0100050000000502020201030202050301000009 -010200020100000001010003010200020104000901020003010200030102000201000000 -010100030102007f01010081010100090100000501000001010000080100000001000007 -0100000901000001010000030100001c0101000901020002010000000101000301020002 -010400090101000001000001010000000101008c01010009010000010100004a01000500 -010005000000050a010005000000050302020103020205030100000b0100000201010001 -0100000101000002010000030100000a0100000201000001010000020100000101000002 -010000010101000101000001010000020100007e01010081010100080100000601000001 -0100000a010000070100000901000001010000040100001b0101000b0100000201010001 -0100000101000002010000030100000a0100000101010001010100010100008b01010009 -010000010100004a010105000000050c010005000000050202020103020205030100000b -01000002010000020100000101000002010000030100000a010000090100000101000005 -0100000201000001010000020100007e010100810101000701000007010000010100000a -010000060100000a01000001010000050100001a0101000b010000020100000201000001 -01000002010000030100000a0100000201000001010000020100008b0101000901000001 -0100004a01000500010005000000050a010005000000050302020103020205030100000b -010000020100000201000001010400030100000a01000006010300010100000501000002 -010000010104007e010100810101000801000006010000010100000a010000050100000b -01000001010000040100001b0101000b010000020100000201000001010400030100000a -0100000201000001010000020100008b01010009010000010100004a010105000000050c -010005000000050202020103020205030100000b01000002010000020100000101000007 -0100000a0100000501000002010000010100000501000002010000010100008201010081 -0101000901000005010000010100000a010000040100000c01000001010000030100001c -0101000b010000020100000201000001010000070100000a010000020100000101000002 -0100008b01010009010000010100004a01000500010005000000050a0100050000000503 -02020103020205030100000b01000002010000020100000101000002010000030100000a -010000020100000101000002010000010100000201000001010000020100000101000002 -0100007e010100810101000a010000040100000101000003010100040100000301000007 -0101000301000001010000020100001d0101000b01000002010000020100000101000002 -010000030100000a0100000101010001010100010100008b01010009010000010100004a -010105000000050c010005000000050202020103020205030100000b0100000201000002 -01000002010200050101000901020003010300020102000201000002010000020102007f -010100810101000b01000004010100040101000201040001010400030101000401010002 -0100001e0101000b01000002010000020100000201020005010100090101000001000001 -010000000101008c0101000a0101004b01000500010005000000050a0100050000000503 -020201030202050301000023010500a1010100810101000c0100002a0100001f01010023 -0105009901010058010105000000050c01000500000005020202010302020503010000cb -0101008101010059010100c30101005801000500010005000000050a0100050000000503 -0202010302020503010000cb0101008101010059010100c301010058010105000000050c -01000500000005020202010302020503010000cb0101008101010059010100c301010058 -01000500010005000000050a01000500000005030202010302020503010000cb01010081 -01010059010100c301010058010105000000050c01000500000005020202010302020503 -010000cb0101008101010059010100c30101005801000500010005000000050a01000500 -000005030202010302020503010000cb0101008101010059010100c30101005801010500 -0000050c0100050000000502020201030202050301ff01ff01ce0500010005000000050a -0100050000000503020201030202050301ff01ff01cf05000000050c0100050000000502 -0202010302020503010000cb0101008101010059010100c3010100580100050001000500 -0000050a01000500000005030202010302020503010000cb0101008101010059010100c3 -01010058010105000000050c01000500000005020202010302020503010000cb01010081 -0101000c0100002a0100001f010100c30101005801000500010005000000050a01000500 -0000050302020103020205030100000b010000120100000e010000010100009701010081 -0101000b010000040101000b010000040102000b010100020100001e0101000b01000012 -0100000e010000010100008f0101000a0100000401020044010105000000050c01000500 -0000050202020103020205030100001f0100000e0100000101000097010100810101000a -01000004010000010100000901010003010000020100000901000001010000020100001d -0101001f0100000e010000010100008f0101000901010003010000020100004301000500 -010005000000050a01000500000005030202010302020503010000090102000201000000 -010100030102000201040009010100000100000101000000010100940101008101010009 -01000005010000010100000801000000010000070100000901000001010000030100001c -010100090102000201000000010100030102000201040009010100000100000101000000 -0101008c0101000801000000010000030100000201000043010105000000050c01000500 -0000050202020103020205030100000b0100000201010001010000010100000201000003 -0100000a0100000101010001010100010100009301010081010100080100000601000001 -0100000a010000070100000901000001010000040100001b0101000b0100000201010001 -0100000101000002010000030100000a0100000101010001010100010100008b0101000a -01000003010000020100004301000500010005000000050a010005000000050302020103 -020205030100000b01000002010000020100000101000002010000030100000a01000002 -010000010100000201000093010100810101000701000007010000010100000a01000006 -0100000a01000001010000050100001a0101000b01000002010000020100000101000002 -010000030100000a0100000201000001010000020100008b0101000a0100000401030043 -010105000000050c010005000000050202020103020205030100000b0100000201000002 -01000001010400030100000a010000020100000101000002010000930101008101010008 -01000006010000010100000a010000050100000b01000001010000040100001b0101000b -010000020100000201000001010400030100000a0100000201000001010000020100008b -0101000a010000070100004301000500010005000000050a010005000000050302020103 -020205030100000b010000020100000201000001010000070100000a0100000201000001 -0100000201000093010100810101000901000005010000010100000a010000040100000c -01000001010000030100001c0101000b010000020100000201000001010000070100000a -0100000201000001010000020100008b0101000a0100000701000043010105000000050c -010005000000050202020103020205030100000b01000002010000020100000101000002 -010000030100000a01000001010100010101000101000093010100810101000a01000004 -01000001010000030101000401000003010000070101000301000001010000020100001d -0101000b01000002010000020100000101000002010000030100000a0100000101010001 -010100010100008b0101000a01000003010000020100004301000500010005000000050a -010005000000050302020103020205030100000b01000002010000020100000201020005 -0101000901010000010000010100000001010094010100810101000b0100000401010004 -01010002010400010104000301010004010100020100001e0101000b0100000201000002 -0100000201020005010100090101000001000001010000000101008c0101000801040002 -01020044010105000000050c0100050000000502020201030202050301000023010500a1 -010100810101000c0100002a0100001f0101002301050099010100580100050001000500 -0000050a01000500000005030202010302020503010000cb0101008101010059010100c3 -01010058010105000000050c01000500000005020202010302020503010000cb01010081 -01010059010100c30101005801000500010005000000050a010005000000050302020103 -02020503010000cb0101008101010059010100c301010058010105000000050c01000500 -000005020202010302020503010000cb0101008101010059010100c30101005801000500 -010005000000050a01000500000005030202010302020503010000cb0101008101010059 -010100c301010058010105000000050c01000500000005020202010302020503010000cb -0101008101010059010100c30101005801000500010005000000050a0100050000000503 -020201030202050301ff01ff01cf05000000050c01000500000005020202010302020503 -01ff01ff01ce0500010005000000050a01000500000005030202010302020503010000cb -0101008101010059010100c301010058010105000000050c010005000000050202020103 -02020503010000cb0101008101010059010100c30101005801000500010005000000050a -01000500000005030202010302020503010000cb010100810101000c0100002a0100001f -010100c301010058010105000000050c010005000000050202020103020205030100000b -010000120100000a0100001501000087010100810101000b010000040101000b01000004 -0102000b010100020100001e0101000b010000120100000e010000010100008f0101000c -0100004a01000500010005000000050a010005000000050302020103020205030100001f -0100000a0100001501000087010100810101000a01000004010000010100000901010003 -010000020100000901000001010000020100001d0101001f0100000e010000010100008f -0101000b0101004a010105000000050c0100050000000502020201030202050301000009 -010200020100000001010003010200020104000801000000010100030102000301020002 -010400020102007f01010081010100090100000501000001010000080100000001000007 -0100000901000001010000030100001c0101000901020002010000000101000301020002 -010400090101000001000001010000000101008c0101000a010000000100004a01000500 -010005000000050001000500010005000100050001000500010005000100050000000503 -02020103020205030100000b01000002010100010100000101000002010000030100000a -01010001010000010100000201000001010000020100000301000003010000020100007e -010100810101000801000006010000010100000a01000007010000090100000101000004 -0100001b0101000b01000002010100010100000101000002010000030100000a01000001 -01010001010100010100008b01010009010000010100004a010105000000050001000500 -010005000100050001000500010005000100050001000500000005020202010302020503 -0100000b01000002010000020100000101000002010000030100000a0100000201000001 -010000020100000101000007010000030100008201010081010100070100000701000001 -0100000a010000060100000a01000001010000050100001a0101000b0100000201000002 -0100000101000002010000030100000a0100000201000001010000020100008b01010008 -010000020100004a010005000100030e0000050302020103020205030100000b01000002 -0100000201000001010400030100000a0100000201000001010000020100000201020004 -010000040102007f010100810101000801000006010000010100000a010000050100000b -01000001010000040100001b0101000b010000020100000201000001010400030100000a -0100000201000001010000020100008b01010008010000020100004a01010500030e0500 -0000050202020103020205030100000b010000020100000201000001010000070100000a -0100000201000001010000020100000501000003010000070100007e0101008101010009 -01000005010000010100000a010000040100000c01000001010000030100001c0101000b -010000020100000201000001010000070100000a0100000201000001010000020100008b -0101000801050049010005000100030e0000050302020103020205030100000b01000002 -010000020100000101000002010000030100000a01000002010000010100000201000001 -010000020100000301000003010000020100007e010100810101000a0100000401000001 -010000030101000401000003010000070101000301000001010000020100001d0101000b -01000002010000020100000101000002010000030100000a010000010101000101010001 -0100008b0101000c0100004a01010500030e05000000050202020103020205030100000b -010000020100000201000002010200050101000801000002010000020102000301020005 -010100020102007f010100810101000b0100000401010004010100020104000101040003 -01010004010100020100001e0101000b0100000201000002010000020102000501010009 -0101000001000001010000000101008c0101000c0100004a010005000100030e00000503 -020201030202050301000023010500a1010100810101000c0100002a0100001f01010023 -010500990101005801010500030e0500000005020202010302020503010000cb01010081 -01010059010100c301010058010005000100030e000005030202010302020503010000cb -0101008101010059010100c30101005801010500030e0500000005020202010302020503 -010000cb0101008101010059010100c301010058010005000100030e0000050302020103 -02020503010000cb0101008101010059010100c30101005801010500030e050000000502 -0202010302020503010000cb0101008101010059010100c301010058010005000100030e -000005030202010302020503010000cb0101008101010059010100c30101005801010500 -030e050000000502020201030202050301ff01ff01ce05000100030e0000050302020103 -0202050307cd01ff01ff01010500030e0500000005020202010302020503070008cb0700 -0100088101010859010108c301010858010005000100030e000005030202010302020503 -070008cb07000100080b010108470101082901010859010108c30101085801010500030e -0500000005020202010302020503070008cb07000100080a010008150100082a01000808 -010008280101080c0100082a0100081f010108c301010858010005000100030e00000503 -02020103020205030700081d07000808070008a207000100080a010008040102080c0100 -08040101080b010008030104080a0101080201000807010008280101080b010008040101 -080b010008030104080a010108020100081e010108180100080a01000822010208770101 -080a0100084c01010500030e05000000050202020103020205030700081d070008ac0700 -0100080a01000803010008020100080a0100080401000801010008090101080301000802 -01000809010008010100080201000806010008280101080a010008040100080101000809 -01010803010008020100080901000801010008020100081d010108180100080a01000824 -01000877010108090101084c010005000100030e00000503020201030202050307000809 -070208030702080307020802070008010700080307020803070208030702089407000100 -080a01000803010008020100080901000805010008010100080801000800010008070100 -080901000801010008030100080501000828010108090100080501000801010008080100 -0800010008070100080901000801010008030100081c0101080801000800010108030102 -080201040808010008010100080301020802010008000101080201000800010108030102 -08050100087701010808010008000100084c01010500030e050000000502020201030202 -050307000808070008020700080107000802070008010700080207000801070008000700 -0806070008020700080207000801070008020700089307000100080a0100080301000802 -0100080801000806010008010100080a010008060100080a010008010100080401000804 -010008280101080801000806010008010100080a010008060100080a0100080101000804 -0100081b01010808010108010100080101000802010008030100080a0100080001000803 -010008020100080101010801010008010101080101000801010008020100080401000877 -0101080a0100084c010005000100030e0000050302020103020205030700080807000805 -070008020700080107000802070008010701080707000802070008020700080107000897 -070001000808010108050102080801000807010008010100080a010008060100080a0100 -08010100080501000804010108260101080701000807010008010100080a010008060100 -080a01000801010008050100081a01010808010008020100080101000802010008030100 -080a01010804010008020100080101000805010008020100080101000802010008040100 -08770101080a0100084c01010500030e0500000005020202010302020503070008080700 -080507000802070008010700080207000801070108070700080207040802070208940700 -0100080a01000803010008020100080801000806010008010100080a010008060100080a -010008010100080401000804010008280101080801000806010008010100080a01000806 -0100080a01000801010008040100081b010108080100080201000801010408030100080a -010108040104080101000805010008020100080101040804010008770101080a0100084c -010005000100030e00000503020201030202050307000808070008050700080207000801 -0700080207000801070008000700080607000802070008090700089307000100080a0100 -0803010008020100080901000805010008010100080a010008050100080b010008010100 -080301000805010008280101080901000805010008010100080a010008050100080b0100 -0801010008030100081c010108080100080201000801010008070100080a010008000100 -08030100080501000805010008020100080101000808010008770101080a0100084c0101 -0500030e0500000005020202010302020503070008080700080207000801070008020700 -080107000802070008010700080107000805070008020700080207000801070008020700 -089307000100080a01000803010008020100080301010804010008040100080101000803 -01010804010008050100080501010803010008010100080201000806010008280101080a -010008040100080101000803010108040100080501000805010108030100080101000802 -0100081d01010808010008020100080101000802010008030100080a0100080101000802 -01000802010008010100080501000802010008010100080201000804010008770101080a -0100084c010005000100030e000005030202010302020503070008090702080307020803 -07020802070008020700080407000803070208030702089407000100080a010008040102 -080401010805010008040101080401010802010408030100080501010804010108020100 -0807010008280101080b0100080401010804010108020104080301000805010108040101 -08020100081e010108080100080201000802010208050101080801000802010008020102 -08020100080501000802010008020102080501000877010108080104084a01010500030e -0500000005020202010302020503070008cb07000100080a0100080d010008060100082a -01000808010008280101080c0100082a0100081f0101081c010508a00101085801000500 -0100030e000005030202010302020503070008cb07000100080b010108090101083b0101 -082901010859010108c30101085801010500030e05000000050202020103020205030700 -08cb07000100088101010859010108c301010858010005000100030e0000050302020103 -02020503070008cb07000100088101010859010108c30101085801010500030e05000000 -05020202010302020503070008cb07000100088101010859010108c30101085801000500 -0100030e000005030202010302020503070008cb07000100088101010859010108c30101 -085801010500030e0500000005020202010302020503070008cb07000100088101010859 -010108c301010858010005000100030e00000503020201030202050307cd01ff01ff0101 -0500030e050000000502020201030202050301ff01ff01ce05000100030e000005030202 -010302020503010000cb0101008101010059010100c30101005801010500030e05000000 -05020202010302020503010000cb0101008101010059010100c301010058010005000100 -030e000005030202010302020503010000cb010100810101000c0100002a0100001f0101 -00c30101005801010500030e050000000502020201030202050301000028010000040100 -000b0100008e010100810101000b010000040101000b010000030104000a010100020100 -001e010100180100000a01000022010200770101000a0101004b010005000100030e0000 -0503020201030202050301000028010000110100008e010100810101000a010000040100 -00010100000901010003010000020100000901000001010000020100001d010100180100 -000a010000240100007701010009010000010100004a01010500030e0500000005020202 -010302020503010000090102000201000002010000020102000a01010000010000020102 -0003010200020104008c0101008101010009010000050100000101000008010000000100 -00070100000901000001010000030100001c010100080100000001010003010200020104 -000801000001010000030102000201000000010100020100000001010003010200050100 -007701010009010000010100004a010005000100030e0000050302020103020205030100 -000801000002010000010100000201000001010000020100000801000001010100040100 -000201000002010000030100008e010100810101000801000006010000010100000a0100 -00060100000a01000001010000040100001b010100080101000101000001010000020100 -00030100000a010000000100000301000002010000010101000101000001010100010100 -000101000002010000040100007701010009010000010100004a01010500030e05000000 -05020202010302020503010000080100000601000001010000010100000c010000020100 -000401000002010000070100008e010100810101000701000007010000010100000a0100 -00060100000a01000001010000050100001a010100080100000201000001010000020100 -00030100000a010100040100000201000001010000050100000201000001010000020100 -00040100007701010009010000010100004a010005000100030e00000503020201030202 -050301000009010200030100000101000002010200090100000201000004010000030102 -00040100008e010100810101000801000006010000010100000a010000060100000a0100 -0001010000040100001b010100080100000201000001010400030100000a010100040104 -0001010000050100000201000001010400040100007701010009010000010100004a0101 -0500030e05000000050202020103020205030100000c0100000301000000010000050100 -0008010000020100000401000006010000030100008e0101008101010009010000050100 -00010100000a010000050100000b01000001010000030100001c01010008010000020100 -0001010000070100000a0100000001000003010000050100000501000002010000010100 -00080100007701010009010000010100004a010005000100030e00000503020201030202 -050301000008010000020100000301010002010000020100000801000001010100040100 -000201000002010000030100008e010100810101000a0100000401000001010000030101 -000401000005010000050101000301000001010000020100001d01010008010000020100 -000101000002010000030100000a01000001010000020100000201000001010000050100 -00020100000101000002010000040100007701010009010000010100004a01010500030e -05000000050202020103020205030100000901020005010000030102000a010100000100 -000401000003010200050101008c010100810101000b0100000401010004010100020104 -00030100000501010004010100020100001e010100080100000201000002010200050101 -000801000002010000020102000201000005010000020100000201020005010000770101 -000a0101004b010005000100030e00000503020201030202050301000012010000080105 -00a8010100810101000c0100002a0100001f0101001c010500a00101005801010500030e -05000000050202020103020205030100000f01000000010000b801010081010100590101 -00c301010058010005000100030e00000503020201030202050301000010010000b90101 -008101010059010100c30101005801010500030e05000000050202020103020205030100 -00cb0101008101010059010100c301010058010005000100030e00000503020201030202 -0503010000cb0101008101010059010100c30101005801010500030e0500000005020202 -010302020503010000cb0101008101010059010100c301010058010005000100030e0000 -05030202010302020503010000cb0101008101010059010100c30101005801010500030e -050000000502020201030202050301ff01ff01ce05000100030e00000503020201030202 -050307cd01ff01ff01010500030e0500000005020202010302020503070008cb07000100 -088101010859010108c301010858010005000100030e0000050302020103020205030700 -08cb07000100080b0101084e0101082201010859010108c30101085801010500030e0500 -000005020202010302020503070008cb07000100080a0100081c0100082a010008080100 -08210101080c0100082a0100081f010108c301010858010005000100030e000005030202 -0103020205030700081a070008af07000100080a01000805010008050101080c01000804 -0101080a010208020104080a0101080201000807010008210101080b010008040101080a -010208020104080a010108020100081e0101081a010008a7010108090102080201040802 -0102083d01010500030e05000000050202020103020205030700081a070008af07000100 -080a0100080401010804010008010100080a010008040100080101000808010008020100 -08010100080201000809010008010100080201000806010008210101080a010008040100 -0801010008080100080201000801010008020100080901000801010008020100081d0101 -081a010008a701010808010008020100080101000805010008020100083c010005000100 -030e00000503020201030202050307000809070208030702080307010800070008020702 -08a907000100080a01000803010008000100080401000801010008090100080501000801 -0100080c0100080501000809010008010100080301000805010008210101080901000805 -010008010100080c010008050100080901000801010008030100081c0101080901020803 -0102080301010800010008020102080a0102080301020802010008000101080201000802 -010008020102080201000800010108700101080c01000801010008090100083c01010500 -030e05000000050202020103020205030700080807000802070008010700080207000801 -070008010701080107000802070008a807000100080a0100080501000804010008010100 -080801000806010008010100080c010008040100080a0100080101000804010008040100 -08210101080801000806010008010100080c010008040100080a01000801010008040100 -081b01010808010008020100080101000802010008010100080101010801010008020100 -080801000802010008010100080201000801010108010100080101000802010008010100 -080201000801010108010100086f0101080c01000801010308060100083c010005000100 -030e00000503020201030202050307000808070008050700080207000801070008020700 -080107000802070008a80700010008080101080601000804010008010100080701000807 -010008010100080b010008050100080a0100080101000805010008040101081f01010807 -01000807010008010100080b010008050100080a01000801010008050100081a01010808 -010008050100080201000801010008020100080101000802010008080100080501000802 -010008010100080501000802010008010100080201000801010008730101080b01000806 -010008040100083d01010500030e05000000050202020103020205030700080807000805 -07000802070008010700080207000801070408a807000100080a01000805010008040100 -08010100080801000806010008010100080a010008060100080a01000801010008040100 -0804010008210101080801000806010008010100080a010008060100080a010008010100 -08040100081b010108080100080501000802010008010100080201000801010408090102 -08020104080101000806010008000100080201040801010008730101080a010008070100 -08030100083e010005000100030e00000503020201030202050307000808070008050700 -0802070008010700080207000801070008ac07000100080a010008050100080401000801 -01000809010008050100080101000809010008060100080b010008010100080301000805 -0100082101010809010008050100080101000809010008060100080b0100080101000803 -0100081c0101080801000805010008020100080101000802010008010100081001000801 -010008050100080601000800010008020100080501000873010108090100080401000802 -010008020100083f01010500030e05000000050202020103020205030700080807000802 -070008010700080207000801070008010701080107000802070008a807000100080a0100 -080501000804010008010100080301010804010008040100080101000803010108020100 -08070100080501010803010008010100080201000806010008210101080a010008040100 -0801010008030101080201000807010008050101080301000801010008020100081d0101 -080801000802010008010100080201000801010008010101080101000802010008080100 -080201000801010008020100080101000807010008030100080201000801010008730101 -080801000805010008020100080101000840010005000100030e00000503020201030202 -05030700080907020803070208030701080007000802070208a907000100080a01000803 -010408030101080401010805010008040101080401010802010408030100080501010804 -0101080201000807010008210101080b0100080401010804010108020104080301000805 -01010804010108020100081e01010809010208030102080301010800010008020102080a -010208030102080201000807010008040102080201000873010108080104080201020802 -0104083c01010500030e0500000005020202010302020503070008cb07000100080a0100 -0814010008060100082a01000808010008210101080c0100082a0100081f010108230105 -089901010858010005000100030e000005030202010302020503070008cb07000100080b -010108100101083b0101082201010859010108c30101085801010500030e050000000502 -0202010302020503070008cb07000100088101010859010108c301010858010005000100 -030e000005030202010302020503070008cb07000100088101010859010108c301010858 -01010500030e0500000005020202010302020503070008cb070001000881010108590101 -08c301010858010005000100030e000005030202010302020503070008cb070001000881 -01010859010108c30101085801010500030e0500000005020202010302020503070008cb -07000100088101010859010108c301010858010005000100030e00000503020201030202 -050307cd01ff01ff01010500030e050000000502020201030202050307cd01ff01ff0100 -05000100030e000005030202010302020503070008cb07000100088101010859010108c3 -0101085801010500030e0500000005020202010302020503070008cb07000100080b0101 -084e0101082201010859010108c301010858010005000100030e00000503020201030202 -0503070008cb07000100080a0100081c0100082a01000808010008210101080c0100082a -0100081f010108c30101085801010500030e05000000050202020103020205030700081a -070008af07000100080a01000805010008050100080d010008040101080a010208020104 -080a0101080201000807010008210101080b010008040101080a010208020104080a0101 -08020100081e0101081a010008a7010108090102080301020844010005000100030e0000 -050302020103020205030700081a070008af07000100080a01000804010108040101080c -010008040100080101000808010008020100080101000802010008090100080101000802 -01000806010008210101080a010008040100080101000808010008020100080101000802 -0100080901000801010008020100081d0101081a010008a7010108080100080201000801 -010008020100084301010500030e05000000050202020103020205030700080907020803 -070208030701080007000802070208090700080007010803070208020701080007000803 -070208030702087f07000100080a010008030100080001000803010008000100080b0100 -0805010008010100080c0100080501000809010008010100080301000805010008210101 -080901000805010008010100080c010008050100080901000801010008030100081c0101 -0809010208030102080301010800010008020102080a0102080301020802010008000101 -080201000802010008020102080201000800010108700101080c01000805010008430100 -05000100030e000005030202010302020503070008080700080207000801070008020700 -080107000801070108010700080207000808070108010700080107000802070008010700 -080007000800070008010700080207000801070008020700087e07000100080a01000805 -010008050100080a01000806010008010100080c010008040100080a0100080101000804 -01000804010008210101080801000806010008010100080c010008040100080a01000801 -010008040100081b01010808010008020100080101000802010008010100080101010801 -010008020100080801000802010008010100080201000801010108010100080101000802 -010008010100080201000801010108010100086f0101080c010008050100084301010500 -030e05000000050202020103020205030700080807000805070008020700080107000802 -070008010700080207000808070008020700080507000801070008000700080007000801 -070008020700080107000882070001000808010108060100080501000809010008070100 -08010100080b010008050100080a0100080101000805010008040101081f010108070100 -0807010008010100080b010008050100080a01000801010008050100081a010108080100 -080501000802010008010100080201000801010008020100080801000805010008020100 -08010100080501000802010008010100080201000801010008730101080a010108040101 -0844010005000100030e0000050302020103020205030700080807000805070008020700 -080107000802070008010704080807000802070008020703080107000800070008000700 -0801070408020702087f07000100080a01000805010008050100080a0100080601000801 -0100080a010008060100080a010008010100080401000804010008210101080801000806 -010008010100080a010008060100080a01000801010008040100081b0101080801000805 -010008020100080101000802010008010104080901020802010408010100080601000800 -0100080201040801010008730101080c010008050100084301010500030e050000000502 -02020103020205030700080807000805070008020700080107000802070008010700080c -07000802070008010700080207000801070008000700080007000801070008090700087e -07000100080a01000805010008050100080b010008050100080101000809010008060100 -080b01000801010008030100080501000821010108090100080501000801010008090100 -08060100080b01000801010008030100081c010108080100080501000802010008010100 -080201000801010008100100080101000805010008060100080001000802010008050100 -08730101080c0100080501000843010005000100030e0000050302020103020205030700 -080807000802070008010700080207000801070008010701080107000802070008080700 -080207000801070008020700080107000800070008000700080107000802070008010700 -08020700087e07000100080a010008050100080501000805010108040100080401000801 -010008030101080201000807010008050101080301000801010008020100080601000821 -0101080a0100080401000801010008030101080201000807010008050101080301000801 -010008020100081d01010808010008020100080101000802010008010100080101010801 -010008020100080801000802010008010100080201000801010008070100080301000802 -0100080101000873010108080100080201000801010008020100084301010500030e0500 -000005020202010302020503070008090702080307020803070108000700080207020809 -070008020700080207030801070008000700080007000802070208030702087f07000100 -080a01000803010408010104080301010805010008040101080401010802010408030100 -0805010108040101080201000807010008210101080b0100080401010804010108020104 -08030100080501010804010108020100081e010108090102080301020803010108000100 -08020102080a010208030102080201000807010008040102080201000873010108090102 -080301020844010005000100030e00000503020201030202050307000823070508a10700 -0100080a01000814010008060100082a01000808010008210101080c0100082a0100081f -01010823010508990101085801010500030e0500000005020202010302020503070008cb -07000100080b010108100101083b0101082201010859010108c301010858010005000100 -030e000005030202010302020503070008cb07000100088101010859010108c301010858 -01010500030e0500000005020202010302020503070008cb070001000881010108590101 -08c301010858010005000100030e000005030202010302020503070008cb070001000881 -01010859010108c30101085801010500030e0500000005020202010302020503070008cb -07000100088101010859010108c301010858010005000100030e00000503020201030202 -0503070008cb07000100088101010859010108c30101085801010500030e050000000502 -020201030202050307cd01ff01ff010005000100030e00000503020201030202050301ff -01ff01cf0500030e0500000005020202010302020503010000cb01010081010100590101 -00c301010058010005000100030e000005030202010302020503010000cb010100810101 -0059010100c30101005801010500030e0500000005020202010302020503010000cb0101 -00810101000c0100002a0100001f010100c301010058010005000100030e000005030202 -0103020205030100003d0100000a0100000a010000060102006a010100810101000b0100 -00040101000a010200030102000b010100020100001e010100c30101000a0101004b0101 -0500030e05000000050202020103020205030100003d0100000a0100000a010000080100 -006a010100810101000a0100000401000001010000080100000201000001010000020100 -000901000001010000020100001d010100c301010009010000010100004a010005000100 -030e00000503020201030202050301000008010100000100000201000002010000080100 -000001010003010200020101000001000003010200030101000001000008010400020102 -000201000000010100050100000301020063010100810101000901000005010000010100 -000c010000050100000901000001010000030100001c010100c301010009010000010100 -004a01010500030e05000000050202020103020205030100000801000000010000000100 -000101000002010000080101000101000001010000020100000101000000010000000100 -00010100000201000001010000010101000a010000030100000201000001010100010100 -0004010000020100000201000062010100810101000801000006010000010100000c0100 -00050100000901000001010000040100001b010100c301010009010000010100004a0100 -05000100030e000005030202010302020503010000080100000001000000010000020100 -000101000008010000020100000501000001010000000100000001000001010000020100 -0001010000020100000a0100000701000001010000020100000401000002010000020100 -0062010100810101000701000007010000010100000a010100040101000a010000010100 -00050100001a010100c301010009010000010100004a01010500030e0500000005020202 -010302020503010000080100000001000000010000020100000101000008010000020100 -00020103000101000000010000000100000101040001010000020100000a010000040103 -000101000002010000040100000201040062010100810101000801000006010000010100 -000c010000050100000901000001010000040100001b010100c301010009010000010100 -004a010005000100030e0000050302020103020205030100000801000000010000000100 -000301000000010000080100000201000001010000020100000101000000010000000100 -000101000005010000020100000a01000003010000020100000101000002010000040100 -000201000066010100810101000901000005010000010100000c01000005010000090100 -0001010000030100001c010100c301010009010000010100004a01010500030e05000000 -050202020103020205030100000801000000010000000100000301010009010000020100 -000101000002010000010100000001000000010000010100000201000001010000010101 -000a01000003010000020100000101010001010000040100000201000002010000620101 -00810101000a010000040100000101000003010100020100000201000001010000020100 -00030101000301000001010000020100001d010100c301010009010000010100004a0100 -05000100030e000005030202010302020503010000080100000001000000010000040100 -000901000002010000020103000101000000010000000100000201020003010100000100 -000b010100020103000101000000010100050100000301020063010100810101000b0100 -00040101000401010003010200030102000401010004010100020100001e010100c30101 -000a0101004b01010500030e050000000502020201030202050301000012010000010105 -002301050085010100810101000c0100002a0100001f010100c301010058010005000100 -030e0000050302020103020205030100000f01000000010000b801010081010100590101 -00c30101005801010500030e050000000502020201030202050301000010010000b90101 -008101010059010100c301010058010005000100030e0000050302020103020205030100 -00cb0101008101010059010100c30101005801010500030e050000000502020201030202 -0503010000cb0101008101010059010100c301010058010005000100030e000005030202 -010302020503010000cb0101008101010059010100c30101005801010500030e05000000 -05020202010302020503010000cb0101008101010059010100c301010058010005000100 -030e00000503020201030202050301ff01ff01cf0500030e050000000502020201030202 -050307cd01ff01ff010005000100030e000005030202010302020503070000cb07000100 -008101010059010100c30101005801010500030e05000000050202020103020205030700 -00cb07000100000b0101004e0101002201010059010100c301010058010005000100030e -000005030202010302020503070000cb07000100000a0100001c0100002a010000080100 -00210101000c0100002a0100001f010100c30101005801010500030e0500000005020202 -0103020205030700001f0700000a070000060702009407000100000a0100000401020003 -0102000c010000040101000a010200030102000b0101000201000007010000210101000b -010000040101000a010200030102000b010100020100001e010100c30101000a0101004b -010005000100030e0000050302020103020205030700001f0700000a0700000807000094 -07000100000a010000030100000201000001010000020100000a01000004010000010100 -000801000002010000010100000201000009010000010100000201000006010000210101 -000a01000004010000010100000801000002010000010100000201000009010000010100 -00020100001d010100c301010009010000010100004a01010500030e0500000005020202 -010302020503070000080701000007000002070000020700000807040002070200020700 -000007010005070000030702008d07000100000a01000007010000050100000901000005 -010000010100000c01000005010000090100000101000003010000050100002101010009 -01000005010000010100000c010000050100000901000001010000030100001c010100c3 -01010009010000010100004a010005000100030e00000503020201030202050307000008 -070000000700000007000001070000020700000a07000003070000020700000107010001 -0700000407000002070000020700008c07000100000a0100000701000005010000080100 -0006010000010100000c0100000501000009010000010100000401000004010000210101 -000801000006010000010100000c010000050100000901000001010000040100001b0101 -00c301010009010000010100004a01010500030e05000000050202020103020205030700 -0008070000000700000007000002070000010700000a0700000707000001070000020700 -000407000002070000020700008c07000100000801010007010000050100000801000007 -010000010100000a010100040101000a0100000101000005010000040101001f01010007 -01000007010000010100000a010100040101000a01000001010000050100001a010100c3 -01010009010000010100004a010005000100030e00000503020201030202050307000008 -070000000700000007000002070000010700000a07000004070300010700000207000004 -070000020704008c07000100000a01000005010000050100000a01000006010000010100 -000c01000005010000090100000101000004010000040100002101010008010000060100 -00010100000c010000050100000901000001010000040100001b010100c3010100090100 -00010100004a01010500030e050000000502020201030202050307000008070000000700 -000007000003070000000700000a07000003070000020700000107000002070000040700 -00020700009007000100000a01000004010000050100000c01000005010000010100000c -010000050100000901000001010000030100000501000021010100090100000501000001 -0100000c010000050100000901000001010000030100001c010100c30101000901000001 -0100004a010005000100030e000005030202010302020503070000080700000007000000 -070000030701000b07000003070000020700000107010001070000040700000207000002 -0700008c07000100000a0100000301000005010000070101000401000004010000010100 -000301010002010000020100000101000002010000030101000301000001010000020100 -0006010000210101000a0100000401000001010000030101000201000002010000010100 -0002010000030101000301000001010000020100001d010100c301010009010000010100 -004a01010500030e05000000050202020103020205030700000807000000070000000700 -00040700000c07010002070300010700000007010005070000030702008d07000100000a -010000030104000101040003010100050100000401010004010100030102000301020004 -010100040101000201000007010000210101000b01000004010100040101000301020003 -0102000401010004010100020100001e010100c30101000a0101004b010005000100030e -0000050302020103020205030700001207000001070500af07000100000a010000140100 -00060100002a01000008010000210101000c0100002a0100001f010100c3010100580101 -0500030e05000000050202020103020205030700000f07000000070000b807000100000b -010100100101003b0101002201010059010100c301010058010005000100030e00000503 -020201030202050307000010070000b907000100008101010059010100c3010100580101 -0500030e0500000005020202010302020503070000cb07000100008101010059010100c3 -01010058010005000100030e000005030202010302020503070000cb0700010000810101 -0059010100c30101005801010500030e0500000005020202010302020503070000cb0700 -0100008101010059010100c301010058010005000100030e000005030202010302020503 -070000cb07000100008101010059010100c30101005801010500030e0500000005020202 -01030202050307cd01ff01ff010005000100030e00000503020201030202050307cd01ff -01ff01010500000005000000050000000500000005000000050000000500000005000000 -0500000005020202010302020503070000cb07000100008101010059010100c301010058 -010005000100030000000500000005000000050000000500000005000000050000000500 -000005030202010302020503070000cb07000100000b0101004e01010022010100590101 -00c301010058010105000300050000000508010005000300050000000502020201030202 -0503070000cb07000100000a0100001c0100002a01000008010000210101000c0100002a -0100001f010100c301010058010005000100030105000000050801000300000005030202 -010302020503070000cb07000100000a01000005010000040102000c010000040101000d -010000020102000b0101000201000007010000210101000b010000040101000d01000002 -0102000b010100020100001e0101002001010018010000150100006f0101000a01000005 -010100040101003d01010500030100000508010003010500000005020202010302020503 -070000cb07000100000a0100000401010003010000020100000a01000004010000010100 -000b010100010100000201000009010000010100000201000006010000210101000a0100 -0004010000010100000b01010001010000020100000901000001010000020100001d0101 -001f0100001a010000150100006f01010009010100040100000101000002010000010100 -003c01000500010003020000050601000500030100000503020201030202050307000009 -070100000700000207020009070000000701000307020002070100000700000307020003 -0702008d07000100000a0100000301000000010000070100000901000005010000010100 -000a01000000010000050100000901000001010000030100000501000021010100090100 -0005010000010100000a01000000010000050100000901000001010000030100001c0101 -000901010000010000020102000b01000003010000000101000301020002010000000101 -000201040002010200020100000001010003010100000100006f01010008010000000100 -00040100000101000002010000010100003c010105000302050000000504010005000302 -050000000502020201030202050307000008070000010701000107000002070000080701 -000107000001070000020700000107000000070000000700000107000002070000010700 -00020700008c07000100000a010000050100000701000008010000060100000101000009 -010000010100000501000009010000010100000401000004010000210101000801000006 -010000010100000901000001010000050100000901000001010000040100001b01010008 -010000010101000101000002010000080104000101010001010000010100000201000001 -01010001010000030100000301000002010000010101000101000001010000010101006f -0101000a010000040100000101000002010000010100003c010005000100030305000000 -0504010003020000050302020103020205030700000807000002070000010700000c0700 -000207000005070000010700000007000000070000010700000207000001070000900700 -010000080101000601000006010000080100000701000001010000080100000201000003 -0101000a0100000101000005010000040101001f01010007010000070100000101000008 -01000002010000030101000a01000001010000050100001a010100080100000201000001 -0100000e0100000301000005010000020100000101000002010000030100000301000002 -010000010100000201000001010000020100006f0101000a010000040100000101000002 -010000010100003c01010500030300000504010003030500000005020202010302020503 -070000080700000207000002070200090700000207000002070300010700000007000000 -07000001070400020702008d07000100000a01000005010000050100000a010000060100 -000101000008010000020100000501000009010000010100000401000004010000210101 -000801000006010000010100000801000002010000050100000901000001010000040100 -001b0101000801000002010000020102000b010000030100000501000002010000010100 -00020100000301000003010400010100000201000001010000020100006f0101000a0100 -00040100000101000002010000010100003c010005000100030400000502010005000303 -000005030202010302020503070000080700000207000005070000080700000207000001 -0700000207000001070000000700000007000001070000090700008c07000100000a0100 -0005010000040100000c0100000501000001010000080105000401000009010000010100 -000301000005010000210101000901000005010000010100000801050004010000090100 -0001010000030100001c0101000801000002010000050100000a01000003010000050100 -000201000001010000020100000301000003010000050100000201000001010000020100 -006f0101000a010000040100000101000002010000010100003c01010500030405000000 -050001000500030405000000050202020103020205030700000807000001070100010700 -000207000008070000020700000107000002070000010700000007000000070000010700 -000207000001070000020700008c07000100000a01000005010000030100000701010004 -010000040100000101000003010100060100000101000002010000030101000301000001 -0100000201000006010000210101000a0100000401000001010000030101000601000001 -01000002010000030101000301000001010000020100001d010100080100000101010001 -010000020100000a01000003010000050100000201000001010000020100000301000003 -01000002010000010100000201000001010000010101006f0101000a0100000401000001 -01000002010000010100003c010005000100030505000100050001000304000005030202 -010302020503070000090701000007000002070200090700000207000002070300010700 -00000700000007000002070200030702008d07000100000a010000030104000101040003 -010100050100000401010004010100060100000201020004010100040101000201000007 -010000210101000b01000004010100040101000601000002010200040101000401010002 -0100001e0101000901010000010000020102000b01000003010000060102000201000002 -0100000401010002010200020100000201000002010100000100006f0101000801040003 -010100040101003d01010500030500000500010003050500000005020202010302020503 -0700000c07000007070500af07000100000a01000014010000060100002a010000080100 -00210101000c0100002a0100001f0101000c01000007010500a701010058010005000100 -03060100050003050000050302020103020205030700000807000002070000bd07000100 -000b010100100101003b01010022010100590101000801000002010000b5010100580101 -0500030605000306050000000502020201030202050307000009070200be070001000081 -0101005901010009010200b6010100580100050001000500000005000000050000000500 -00000500000005000000050000000500000005030202010302020503070000cb07000100 -008101010059010100c30101005801010500000005000000050000000500000005000000 -050000000500000005000000050000000502020201030202050301000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005110202 -010302020502010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100051202020103020205030100030d05000300050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -0000030000000500030c050000000511020201030202050201000500030b000005000100 -030000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500000005000000050003000500000005000000030a0000051202020103020205030100 -03090500000005000100050003000500000005ff05ff05ac010003000000050000000500 -000005000308050000000511020201030202050201000500030700000500000005020100 -0300000005ff05ff05ac0100050003000500000005020000050000000306000005120202 -01030202050301000305050000000500000005020100050003000500000005ff05ff05ac -010003000000050400000500000005000304050000000511020201030202050201000500 -0303000005000000050601000300000005ff05ff05ac0100050003000500000005060000 -050000000302000005120202010302020503010003010500000005000000050601000500 -03000500000005ff05ff05ac010003000000050800000500000005000300050000000511 -020201030202050201000500010005000100050a01000300000005ff05ff05ac01000500 -030005000000050801000500010005000000051202020103020205030100030105000100 -0500010005060100050003000500000005ff05ff05ac0100030000000508010005000100 -050003000500000005110202010302020502010005000303010005000100050601000300 -000005ff05ff05ac01000500030005000000050601000500010003020000051202020103 -0202050301000305050001000500010005020100050003000500000005ff05ff05ac0100 -030000000504010005000100050003040500000005110202010302020502010005000307 -010005000100050201000300000005ff05ff05ac01000500030005000000050201000500 -010003060000051202020103020205030100030905000100050001000500030005000000 -05ff05ff05ac010003000000050001000500010005000308050000000511020201030202 -050201000500030b01000500010003000000050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01000500010005000100050001000500010005000100050003000500000005000100030a -0000051202020101000405030100030d0500030005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -05000100050001000500010005000100050001000500010005000100030000000500030c -050000000511000502020400050201000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005120000020204000000020204000503 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000051100000202040000000202040005ff05ff05e800000202040000000202 -040005ff05ff05e800000202040000000202040005ff05ff05e800000202040000000202 -0400000502ff02ff02dc00060202040000000208040002ff02ff02dc0000020804000000 -0208040002ff02ff02dc00000208040000000208040001ff01ff01dc0000020804000000 -040901ff01ff01dc00000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 377 205 -%%EOF diff --git a/lib/tv/doc/src/tv_start_system.gif b/lib/tv/doc/src/tv_start_system.gif Binary files differdeleted file mode 100644 index 3d9502b00c..0000000000 --- a/lib/tv/doc/src/tv_start_system.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_start_system.ps b/lib/tv/doc/src/tv_start_system.ps deleted file mode 100644 index 5c115328c5..0000000000 --- a/lib/tv/doc/src/tv_start_system.ps +++ /dev/null @@ -1,1330 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_system.eps) -%%CreationDate: (Mon Mar 19 17:15:27 2001) -%%BoundingBox: 0 0 377 205 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 377 205 -userdict begin -%%BeginData: -DisplayImage -0 0 -377.000000 205.000000 -12 -755 410 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -b22222 -828282 -aab6aa -000000 -000000 -000000 -000000 -000000 -000000 -000000 -000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff -02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202 -04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff -02d000000202040000000202040002080000020d040002f6010302110103023801010206 -0101024001010230010102ff020400000202040000000202040002080000020d040002f6 -010102020107020001010203010102010101020e0105020001070201010302070100020b -01010206010102400101020c0104021e010102ff02040000020204000000020204000208 -0000020d040002f6010102050101020301010203010102010101020e0101020701010203 -01010201010102050101020b010102060101024e010102020101021d010102ff02040000 -0202040000000202040002080000020204060203040002f6010102050101020301010203 -010102010101020e01010207010102030101020801040201010302030101020001010203 -010102020103020301040206010302030101020001010207010102000101020101010203 -010302030101020201010200010102020101020101030202010102000101020101010203 -010302020101020001010201010102020103020201010202010102f30000020204000000 -04030208000002020400030400000203040002f601010205010102040101020201000202 -0101020e0101020701010203010202080101020201010201010102020102020001010202 -010102010101020101010201010102090101020101010202010202000101020601020200 -010202000101020101010201010102020101020201020200010102010101020001010200 -010102020102020001020200010102010101020101010201010102000101020101010201 -010102010101020101010202010102f3000004030101020b000002030400030200000204 -040002f6010102050101020401010201010102020101020e010402040101020401030206 -010102060101020201010201010102020101020101010201010102010102020801010201 -010102020101020101010206010102010101020101010205010102020101020201010201 -010102010101020001010200010102020101020101010201010102050101020101020203 -01010201010102010101020101010202010002f70103020b000002030400030200000204 -040002f6010102050101020501010200010002030101020e010102070101020601020205 -010102030104020201010201010102020101020101050202010302060101020101010202 -010102010101020601010201010102010101020201040202010102020101020101010201 -010102000101020001010202010102010101020101010202010402010101020401010201 -0105020201010200010102f70103020b000002040400030000000205040002f601010205 -01010205010302030101020e010102070101020701010205010102020101020101010202 -010102010101020201010201010102080102020501010201010102020101020101010206 -010102010101020101010201010102010101020201010202010102010101020101010201 -010102000101020101010201010102010101020101010201010102010101020401010201 -0101020601010200010002f80103020b000002040400030000000205040002f601010205 -01010206010102040101020e010102070101020301010201010102050101020201010201 -010102020101020101010202010102010101020201000205010102050101020101010202 -010102010101020601010201010102010101020101010201010102020101020201010201 -010102020101020701010201010102010101020101010201010102010101020401010201 -0101020201000203010202f80103020b0000020500000206040002f60101020501010206 -010102040101020e01050203010102040103020701020201010202000101020101040203 -010102020103020201040207010302030101020101010206010102010101020101010202 -010202000101020101010202010102010101020301050202010102010101020101010202 -0102020001010200010102040101020201030204010102f90103020b0000020d040002f6 -01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000 -020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff -02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff -02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff -05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 -0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202 -010302020001050b06040504060005030602051f0600050206000504060005270602050b -06000506060005ff05ff053506000502060005090602051307010202010302020001050b -0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502 -0600050b0600051307010202010302020001050b06000506060205050600050306020518 -060005020600050206020503060205020600050206000517060005020600050106000500 -060105020604050206020503060205020600050006010503060205ff05ff052006000502 -060005020602050506000502060005000601050c07010202010302020001050b06000508 -060005050600050206000502060005180600050006000505060005020600050206000501 -060005020600051706000502060005010601050106000503060005060600050206000502 -06000501060105010600050106000502060005ff05ff051f060005020600050106000502 -0600050406000502060105010600050b07010202010302020001050b0603050506000505 -060005020600050206000518060005000600050506000502060005020600050106000500 -060005000600051706000502060005010600050206000503060005060600050206000502 -060005010600050206000501060005ff05ff052306040501060005020600050406000502 -060005020600050b07010202010302020001050b06000508060005050600050206040518 -060005000600050506000502060405010600050006000500060005170600050206000501 -0600050206000503060005060600050206000502060005010600050206000502060205ff -05ff052006000502060005010604050406000502060005020600050b0701020201030202 -0001050b0600050806000505060005020600051d06000506060005020600050506000500 -060005000600051706000502060005010600050206000503060005060600050206000502 -060005010600050206000505060005ff05ff051f06000502060005010600050806000502 -060005020600050b07010202010302020001050b06000508060005050600050206000502 -060005190600050606000502060005020600050106000500060005000600051706000502 -060005010601050106000503060005060600050206000502060005010600050206000501 -06000502060005ff05ff051f060005020600050106000502060005040600050206010501 -0600050b07010202010302020001050b0600050806000505060005030602051a06000506 -060005030602050306000500060005190602050206000500060105050601050406000503 -060205020600050206000502060205ff05ff052006000502060005020602050506000502 -060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202 -010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f -07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e -0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 -0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103 -0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103 -05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202 -01030202050e01060508010005060101050f010205010102059b01060508010005060101 -0510010505040101054d010205240104050d0101051e0102052401020501010205930106 -0508010005060101051101030535020201030202050e0100050101010500010005070101 -050601000511010105010100059d01000501010105000100050701010506010005130101 -05060100054d0101050001010524010105000101050c0100051e01010500010105240101 -050101000595010005010101050001000507010105060100051101010501010105340202 -010302020510010105030103050201030503010105030103050801020500010105010103 -05000101050001000500010005020103058b010105030103050201030503010105030103 -050a010105030104054c0101050101050500010305000102050201030501010105000102 -05070101050101010500010305030104051d010105010105050001030500010205020103 -050101010500010205070102050001010501010305000101050001000500010005020103 -058301010503010305020103050301010503010305090101050101000500010305020105 -050101030521020201030202051001010506010105000101050101010502010105020101 -0501010105070100050001000500010005050101050001050500010105010101058a0101 -050601010500010105010101050201010502010105010101050901010502010105010101 -054c01000502010105000101050201000500010205000101050001010501010105010102 -050001000507010105010101050201010502010105010101051d01000502010105000101 -050201000500010205000101050001010501010105010102050001000507010005000100 -050001000505010105000105050001010501010105820101050601010500010105010101 -050201010502010105010101050801020504010105020101050001010501010105010101 -052002020103020205100100050401040500010105010101050201010501010605070100 -0500010205020104050001010500010005000107058a0100050401040500010105010101 -0502010105010106050901010501010105020101054b0101050201000501010105000100 -05000100050001010501010805010101050a0103050401010501010105020101051c0101 -05020100050101010500010005000100050001010501010805010101050a010005000102 -050201040500010105000100050001070582010005040104050001010501010105020101 -05010106050901020503010105040101050101060520020201030202050f010105020101 -0501010105000101050201010501010105020101050b0101050001010501010105010101 -05010100050001000500010005000101058e010105020101050101010500010105020101 -0501010105020101050d01010502010105010101054c0101050101010501010205000100 -05010100050201000500010105050101050a0101050601010502010105010101051d0101 -05010101050101020500010005010100050201000500010105050101050a010105000101 -050101010501010105010100050001000500010005000101058601010502010105010101 -05000101050201010501010105020101050b010105010101050201010503010105030101 -0525020201030202050f0101050201010501010105000101050101010502010105020101 -050101010507010005010101050101010501010105000101050001000500010005000101 -05010101058a010105020101050101010500010105010101050201010502010105010101 -050901010502010105010101054c01010500010105020103050101010501010105000101 -0501010105010101050a0101050601010502010105010101051d01010500010105020103 -0501010105010101050001010501010105010101050a0100050101010501010105010101 -050001010500010005000100050001010501010105820101050201010501010105000101 -050101010502010105020101050101010507010105010101050201010502010205000101 -05000101050101010521020201030202050e01030502010a050101050501010305070102 -0500010105020107050001000500010105000103058a01030502010a0501010505010103 -0508010505010105054c0102050301010500010005000103050001020500010305010104 -050701030503010505010105051d01020503010105000100050001030500010205000103 -05010104050701020500010105020107050001000500010105000103058201030502010a -050101050501010305090103050101050500010505010103052202020103020205ff05ff -05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff -05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff -05e8020201030202050201ff01ff01e205020202010302020503010000cb010100810101 -0059010100c30101005801000711000005020202010302020503010000cb010100810101 -0059010100c30101005801000701030607000306000105020202010302020503010000cb -010100810101000c0100002301000026010100c301010058010007010305000007000306 -0001050202020103020205030100001f0100000a0100009e010100810101000b01000004 -010100090104000a01010002010000250101001e0102000501000012010000060100002e -010000120102000301020031010100080104004a01000701030500000701030500010502 -02020103020205030100001f0100000a0100009e010100810101000a0100000401000001 -010000080100000d01000001010000020100002401010020010000190100003601000014 -010000050100003101010008010000020100004a01000701030400010701030500010502 -02020103020205030100000901020003010200090104000201020002010000000101009b -01010081010100090100000501000001010000080100000d010000010100000301000023 -010100090102000201000000010100020100000001010005010000030102000301020003 -01020002010400020102000301020002010000000101000a010200030102000201000000 -010100020104000101000000010100030102000501000005010000030102000201000000 -010100230101000c0100004a010007010304000105000701030400010502020201030202 -0503010000080100000201000001010000020100000a0100000301000002010000010101 -00010100009a01010081010100080100000601000001010000080103000a010000010100 -000401000022010100080100000201000001010100010100000101010001010000040100 -000501000002010000020100000101000002010000030100000601000002010000020100 -000101010001010000080100000201000001010000020100000101010001010000030100 -000301010001010000010100000201000004010000050100000201000002010000010101 -0001010000220101000b0100004b01000701030300010501070103040001050202020103 -020205030100000c010000010100000e0100000701000001010000020100009a01010081 -0101000701000007010000010100000c010000090100000101000005010000210101000c -010000010100000201000001010000020100000401000005010000020100000901000003 -010000060100000201000002010000010100000201000008010000050100000201000001 -010000020100000301000003010000050100000201000004010000050100000201000002 -01000001010000260101000b0100004b0100070103030001050207010303000105020202 -01030202050301000009010300010100000e0100000401030001010000020100009a0101 -00810101000801000006010000010100000c010000090100000101000004010000220101 -000901030001010000020100000101000002010000040100000501000002010000060103 -000301000006010000020100000201000001010000020100000801000005010000020100 -000101000002010000030100000301000005010000020100000401000005010000020104 -0001010000260101000b0100004b01000701030200010503070103030001050202020103 -020205030100000801000002010000010100000e01000003010000020100000101000002 -0100009a0101008101010009010000050100000101000008010000020100000901000001 -010000030100002301010008010000020100000101000002010000010100000201000004 -010000050100000201000005010000020100000301000006010000020100000201000001 -010000020100000801000005010000020100000101000002010000030100000301000005 -0100000201000004010000050100000201000005010000260101000a0100004c01000701 -030200010504070103020001050202020103020205030100000801000002010000010100 -00020100000a010000030100000201000001010100010100009a010100810101000a0100 -000401000001010000030101000201000002010000030101000301000001010000020100 -002401010008010000020100000101010001010000010101000101000004010000050100 -000201000002010000010100000201000003010000060100000201000002010000010100 -000201000008010000020100000101000002010000010100000201000003010000030100 -0005010000020100000401000005010000020100000201000001010000260101000a0100 -004c01000701030100010505070103020001050202020103020205030100000901030002 -0102000c0101000201030001010000000101009b010100810101000b0100000401010004 -010100030102000401010004010100020100002501010009010300010100000001010002 -010000000101000501000005010000030102000301030004010100040100000301020002 -010000020100000901020003010200020100000201000004010100010100000601020005 -010000050100000301020002010000260101000a0100004c010007010301000105060701 -030100010502020201030202050301000015010500af010100810101000c010000230100 -00260101000f010000050100003c01050068010100580100070103000001050707010301 -000105020202010302020503010000cb01010081010100590101000f01000005010000ab -010100580100070103000001050807010300000105020202010302020503010000cb0101 -0081010100590101000f01000005010000ab01010058010007010001070b030000010502 -0202010302020503010000cb0101008101010059010100c301010058010007010000070d -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -030e000105020202010302020503010000cb0101008101010059010100c3010100580100 -0701001005020202010302020503010000cb0101008101010059010100c3010100580100 -0701000d070000010502020201030202050301ff01ff01ce07010001050a070100010502 -020201030202050301ff01ff01ce07010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb010100810101000c0100002a0100001f010100c30101 -0058010007010001050a070100010502020201030202050301000010010200090100000d -0102000a010200100100007b010100810101000b010000040101000b010000050100000c -010100020100001e01010010010200090100000d010200930101000a0101004b01000701 -0001050a070100010502020201030202050301000012010000090100000f0100000c0100 -00100100007b010100810101000a010000040100000101000009010100040101000b0100 -0001010000020100001d01010012010000090100000f0100009301010009010000010100 -004a010007010001050a0701000105020202010302020503010000090101000001000004 -01000003010200020100000001010003010200050100000c010000030102000301020002 -010000010100000301020071010100810101000901000005010000010100000801000000 -01000003010000000100000b01000001010000030100001c010100090101000001000004 -010000030102000201000000010100030102000501000009010000000101000301020002 -01010000010000030102000a010200030102000201000000010100020100000201000002 -01020002010000000101003f01010009010000010100004a010007010001050a07010001 -050202020103020205030100000801000001010100040100000201000002010000010101 -00010100000101000002010000040100000c010000020100000201000001010000020100 -000101000000010000030100000201000070010100810101000801000006010000010100 -000a010000050100000b01000001010000040100001b0101000801000001010100040100 -000201000002010000010101000101000001010000020100000401000009010100010100 -000101000002010000010100000001000000010000010100000201000008010000020100 -000101000002010000010101000101000001010000020100000101000002010000010101 -00010100003e01010009010000010100004a010007010001050a07010001050202020103 -020205030100000801000002010000040100000201000002010000010100000201000005 -010000040100000c01000002010000020100000101000005010100040100007401010081 -0101000701000007010000010100000a010000050100000b01000001010000050100001a -010100080100000201000004010000020100000201000001010000020100000501000004 -010000090100000201000005010000010100000001000000010000010100000201000008 -010000050100000201000001010000050100000201000001010000020100000101000042 -01010009010000010100004a010007010001050a07010001050202020103020205030100 -000801000002010000040100000201000002010000010100000201000002010300040100 -000c01000002010000020100000101000005010100050102007101010081010100080100 -0006010000010100000a010000050100000b01000001010000040100001b010100080100 -000201000004010000020100000201000001010000020100000201030004010000090100 -000201000002010300010100000001000000010000010104000901020002010400010100 -00060100000001000002010400010100004201010009010000010100004a010007010001 -050a07010001050202020103020205030100000801000002010000040100000201000002 -01000001010000020100000101000002010000040100000c010000020100000201000001 -01000005010000000100000701000070010100810101000901000005010000010100000a -010000050100000b01000001010000030100001c01010008010000020100000401000002 -010000020100000101000002010000010100000201000004010000090100000201000001 -010000020100000101000000010000000100000101000010010000010100000501000006 -0100000001000002010000050100004201010009010000010100004a010007010001050a -070100010502020201030202050301000008010000010101000401000002010000020100 -0001010100010100000101000002010000040100000c0100000201000002010000010100 -00020100000101000001010000020100000201000070010100810101000a010000040100 -0001010000030101000401000005010000050101000301000001010000020100001d0101 -000801000001010100040100000201000002010000010101000101000001010000020100 -000401000009010000020100000101000002010000010100000001000000010000010100 -000201000008010000020100000101000002010000010100000701000003010000020100 -00010100004201010009010000010100004a010007010001050a07010001050202020103 -020205030100000901010000010000040100000301020002010000000101000301030004 -0100000c010000030102000301020002010000020100000201020071010100810101000b -010000040101000401010002010400010104000301010004010100020100001e01010009 -010100000100000401000003010200020100000001010003010300040100000901000002 -01000002010300010100000001000000010000020102000a010200030102000201000007 -0100000401020002010000420101000a0101004b010007010001050a0701000105020202 -0103020205030100000c0100002301050093010100810101000c0100002a0100001f0101 -000c010000230105001c0105006801010058010007010001050a07010001050202020103 -020205030100000801000002010000bd01010081010100590101000801000002010000b5 -01010058010007010001050a070100010502020201030202050301000009010200be0101 -00810101005901010009010200b601010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a070100010502020201030202050301ff01ff01ce0701 -0001050a070100010502020201030202050301ff01ff01ce07010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb010100810101000c0100002a -0100001f010100c301010058010007010001050a07010001050202020103020205030100 -0010010200090100000d0102009b010100810101000b010000040101000b010000050100 -000c010100020100001e01010010010200090100000d010200930101000a0101004b0100 -07010001050a070100010502020201030202050301000012010000090100000f0100009b -010100810101000a010000040100000101000009010100040101000b0100000101000002 -0100001d01010012010000090100000f0100009301010009010000010100004a01000701 -0001050a0701000105020202010302020503010000090101000001000004010000030102 -000201000000010100030102000501000009010000000101000301020002010100000100 -000301020003010200710101008101010009010000050100000101000008010000000100 -0003010000000100000b01000001010000030100001c0101000901010000010000040100 -000301020002010000000101000301020005010000090100000001010003010200020101 -0000010000030102000a0102000301020002010000000101000201000002010000020102 -0002010000000101003f01010009010000010100004a010007010001050a070100010502 -020201030202050301000008010000010101000401000002010000020100000101010001 -010000010100000201000004010000090101000101000001010000020100000101000000 -010000000100000101000002010000010100000201000070010100810101000801000006 -010000010100000a010000050100000b01000001010000040100001b0101000801000001 -010100040100000201000002010000010101000101000001010000020100000401000009 -010100010100000101000002010000010100000001000000010000010100000201000008 -010000020100000101000002010000010101000101000001010000020100000101000002 -01000001010100010100003e01010009010000010100004a010007010001050a07010001 -050202020103020205030100000801000002010000040100000201000002010000010100 -000201000005010000040100000901000002010000050100000101000000010000000100 -0001010000020100000101000074010100810101000701000007010000010100000a0100 -00050100000b01000001010000050100001a010100080100000201000004010000020100 -000201000001010000020100000501000004010000090100000201000005010000010100 -000001000000010000010100000201000008010000050100000201000001010000050100 -00020100000101000002010000010100004201010009010000010100004a010007010001 -050a07010001050202020103020205030100000801000002010000040100000201000002 -010000010100000201000002010300040100000901000002010000020103000101000000 -01000000010000010104000201020071010100810101000801000006010000010100000a -010000050100000b01000001010000040100001b01010008010000020100000401000002 -010000020100000101000002010000020103000401000009010000020100000201030001 -010000000100000001000001010400090102000201040001010000060100000001000002 -010400010100004201010009010000010100004a010007010001050a0701000105020202 -010302020503010000080100000201000004010000020100000201000001010000020100 -000101000002010000040100000901000002010000010100000201000001010000000100 -0000010000010100000901000070010100810101000901000005010000010100000a0100 -00050100000b01000001010000030100001c010100080100000201000004010000020100 -000201000001010000020100000101000002010000040100000901000002010000010100 -000201000001010000000100000001000001010000100100000101000005010000060100 -000001000002010000050100004201010009010000010100004a010007010001050a0701 -000105020202010302020503010000080100000101010004010000020100000201000001 -010100010100000101000002010000040100000901000002010000010100000201000001 -01000000010000000100000101000002010000010100000201000070010100810101000a -010000040100000101000003010100040100000501000005010100030100000101000002 -0100001d0101000801000001010100040100000201000002010000010101000101000001 -010000020100000401000009010000020100000101000002010000010100000001000000 -010000010100000201000008010000020100000101000002010000010100000701000003 -01000002010000010100004201010009010000010100004a010007010001050a07010001 -050202020103020205030100000901010000010000040100000301020002010000000101 -000301030004010000090100000201000002010300010100000001000000010000020102 -000301020071010100810101000b01000004010100040101000201040001010400030101 -0004010100020100001e0101000901010000010000040100000301020002010000000101 -000301030004010000090100000201000002010300010100000001000000010000020102 -000a0102000301020002010000070100000401020002010000420101000a0101004b0100 -07010001050a07010001050202020103020205030100000c010000230105009301010081 -0101000c0100002a0100001f0101000c010000230105001c010500680101005801000701 -0001050a07010001050202020103020205030100000801000002010000bd010100810101 -00590101000801000002010000b501010058010007010001050a07010001050202020103 -0202050301000009010200be010100810101005901010009010200b60101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb0101008101010059010100c301010058010007010001050a0701000105020202 -01030202050301ff01ff01ce07010001050a070100010502020201030202050301ff01ff -01ce07010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb010100810101000c0100002a0100001f010100c301010058010007010001050a0701 -00010502020201030202050301000010010200090100000d010200430100005601010081 -0101000b010000040101000b010000050100000c010100020100001e0101001001020009 -0100000d010200930101000a0101004b010007010001050a070100010502020201030202 -050301000012010000090100000f0100004301000056010100810101000a010000040100 -000101000009010100040101000b01000001010000020100001d01010012010000090100 -000f0100009301010009010000010100004a010007010001050a07010001050202020103 -020205030100000901010000010000040100000301020002010000000101000301020005 -010000090100000001010003010200020101000001000003010200030102000a01020002 -010000020100000101040054010100810101000901000005010000010100000801000000 -01000003010000000100000b01000001010000030100001c010100090101000001000004 -010000030102000201000000010100030102000501000009010000000101000301020002 -01010000010000030102000a010200030102000201000000010100020100000201000002 -01020002010000000101003f01010009010000010100004a010007010001050a07010001 -050202020103020205030100000801000001010100040100000201000002010000010101 -000101000001010000020100000401000009010100010100000101000002010000010100 -000001000000010000010100000201000001010000020100000801000002010000010100 -00020100000301000056010100810101000801000006010000010100000a010000050100 -000b01000001010000040100001b01010008010000010101000401000002010000020100 -000101010001010000010100000201000004010000090101000101000001010000020100 -000101000000010000000100000101000002010000080100000201000001010000020100 -0001010100010100000101000002010000010100000201000001010100010100003e0101 -0009010000010100004a010007010001050a070100010502020201030202050301000008 -010000020100000401000002010000020100000101000002010000050100000401000009 -01000002010000050100000101000000010000000100000101000002010000010100000c -010000020100000201000000010000040100005601010081010100070100000701000001 -0100000a010000050100000b01000001010000050100001a010100080100000201000004 -010000020100000201000001010000020100000501000004010000090100000201000005 -010000010100000001000000010000010100000201000008010000050100000201000001 -01000005010000020100000101000002010000010100004201010009010000010100004a -010007010001050a07010001050202020103020205030100000801000002010000040100 -000201000002010000010100000201000002010300040100000901000002010000020103 -000101000000010000000100000101040002010200090104000301000005010000560101 -00810101000801000006010000010100000a010000050100000b01000001010000040100 -001b01010008010000020100000401000002010000020100000101000002010000020103 -000401000009010000020100000201030001010000000100000001000001010400090102 -000201040001010000060100000001000002010400010100004201010009010000010100 -004a010007010001050a0701000105020202010302020503010000080100000201000004 -010000020100000201000001010000020100000101000002010000040100000901000002 -010000010100000201000001010000000100000001000001010000090100000801000006 -010000000100000401000056010100810101000901000005010000010100000a01000005 -0100000b01000001010000030100001c0101000801000002010000040100000201000002 -010000010100000201000001010000020100000401000009010000020100000101000002 -010000010100000001000000010000010100001001000001010000050100000601000000 -01000002010000050100004201010009010000010100004a010007010001050a07010001 -050202020103020205030100000801000001010100040100000201000002010000010101 -000101000001010000020100000401000009010000020100000101000002010000010100 -000001000000010000010100000201000001010000020100000801000002010000010100 -00020100000301000056010100810101000a010000040100000101000003010100040100 -0005010000050101000301000001010000020100001d0101000801000001010100040100 -000201000002010000010101000101000001010000020100000401000009010000020100 -000101000002010000010100000001000000010000010100000201000008010000020100 -000101000002010000010100000701000003010000020100000101000042010100090100 -00010100004a010007010001050a07010001050202020103020205030100000901010000 -010000040100000301020002010000000101000301030004010000090100000201000002 -01030001010000000100000001000002010200030102000a010200020100000201000004 -01010054010100810101000b010000040101000401010002010400010104000301010004 -010100020100001e01010009010100000100000401000003010200020100000001010003 -01030004010000090100000201000002010300010100000001000000010000020102000a -0102000301020002010000070100000401020002010000420101000a0101004b01000701 -0001050a07010001050202020103020205030100000c0100002301050023010500690101 -00810101000c0100002a0100001f0101000c010000230105001c01050068010100580100 -07010001050a07010001050202020103020205030100000801000002010000bd01010081 -010100590101000801000002010000b501010058010007010001050a0701000105020202 -01030202050301000009010200be010100810101005901010009010200b6010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -020201030202050301ff01ff01ce07010001050a070100010502020201030202050308cd -01ff01ff010007010001050a0701000105020202010302020503080000cb080001000081 -01010059010100c301010058010007010001050a07010001050202020103020205030800 -00cb08000100000b0101004e0101002201010059010100c301010058010007010001050a -0701000105020202010302020503080000cb08000100000a0100001c0100002a01000008 -010000210101000c0100002a0100001f010100c301010058010007010001050a07010001 -05020202010302020503080000cb08000100000a01000005010000040102000c01000004 -0101000d010000020102000b0101000201000007010000210101000b010000040101000d -010000020102000b010100020100001e0101002001010018010000150100006f01010008 -0104000301010044010007010001050a0701000105020202010302020503080000cb0800 -0100000a0100000401010003010000020100000a01000004010000010100000b01010001 -0100000201000009010000010100000201000006010000210101000a0100000401000001 -0100000b01010001010000020100000901000001010000020100001d0101001f0100001a -010000150100006f0101000801000002010000020100000101000043010007010001050a -070100010502020201030202050308000009080100000800000208020009080000000801 -0003080200020801000008000003080200030802008d08000100000a0100000301000000 -010000070100000901000005010000010100000a01000000010000050100000901000001 -0100000301000005010000210101000901000005010000010100000a0100000001000005 -0100000901000001010000030100001c0101000901010000010000020102000b01000003 -010000000101000301020002010000000101000201040002010200020100000001010003 -010100000100006f0101000c010000020100000101000043010007010001050a07010001 -050202020103020205030800000808000001080100010800000208000008080100010800 -000108000002080000010800000008000000080000010800000208000001080000020800 -008c08000100000a01000005010000070100000801000006010000010100000901000001 -010000050100000901000001010000040100000401000021010100080100000601000001 -0100000901000001010000050100000901000001010000040100001b0101000801000001 -010100010100000201000008010400010101000101000001010000020100000101010001 -010000030100000301000002010000010101000101000001010000010101006f0101000b -010000030100000101000043010007010001050a07010001050202020103020205030800 -000808000002080000010800000c08000002080000050800000108000000080000000800 -000108000002080000010800009008000100000801010006010000060100000801000007 -010000010100000801000002010000030101000a0100000101000005010000040101001f -0101000701000007010000010100000801000002010000030101000a0100000101000005 -0100001a0101000801000002010000010100000e01000003010000050100000201000001 -01000002010000030100000301000002010000010100000201000001010000020100006f -0101000b010000030100000101000043010007010001050a070100010502020201030202 -050308000008080000020800000208020009080000020800000208030001080000000800 -000008000001080400020802008d08000100000a01000005010000050100000a01000006 -010000010100000801000002010000050100000901000001010000040100000401000021 -010100080100000601000001010000080100000201000005010000090100000101000004 -0100001b0101000801000002010000020102000b01000003010000050100000201000001 -010000020100000301000003010400010100000201000001010000020100006f0101000b -010000030100000101000043010007010001050a07010001050202020103020205030800 -000808000002080000050800000808000002080000010800000208000001080000000800 -000008000001080000090800008c08000100000a01000005010000040100000c01000005 -010000010100000801050004010000090100000101000003010000050100002101010009 -010000050100000101000008010500040100000901000001010000030100001c01010008 -01000002010000050100000a010000030100000501000002010000010100000201000003 -01000003010000050100000201000001010000020100006f0101000a0100000401000001 -01000043010007010001050a070100010502020201030202050308000008080000010801 -000108000002080000080800000208000001080000020800000108000000080000000800 -00010800000208000001080000020800008c08000100000a010000050100000301000007 -010100040100000401000001010000030101000601000001010000020100000301010003 -010000010100000201000006010000210101000a01000004010000010100000301010006 -0100000101000002010000030101000301000001010000020100001d0101000801000001 -01010001010000020100000a010000030100000501000002010000010100000201000003 -0100000301000002010000010100000201000001010000010101006f0101000a01000004 -0100000101000043010007010001050a0701000105020202010302020503080000090801 -000008000002080200090800000208000002080300010800000008000000080000020802 -00030802008d08000100000a010000030104000101040003010100050100000401010004 -010100060100000201020004010100040101000201000007010000210101000b01000004 -0101000401010006010000020102000401010004010100020100001e0101000901010000 -010000020102000b01000003010000060102000201000002010000040101000201020002 -0100000201000002010100000100006f0101000a0100000501010044010007010001050a -07010001050202020103020205030800000c08000007080500af08000100000a01000014 -010000060100002a01000008010000210101000c0100002a0100001f0101000c01000007 -010500a701010058010007010001050a0701000105020202010302020503080000080800 -0002080000bd08000100000b010100100101003b01010022010100590101000801000002 -010000b501010058010007010001050a0701000105020202010302020503080000090802 -00be0800010000810101005901010009010200b601010058010007010001050a07010001 -05020202010302020503080000cb08000100008101010059010100c30101005801000701 -0001050a0701000105020202010302020503080000cb08000100008101010059010100c3 -01010058010007010001050a0701000105020202010302020503080000cb080001000081 -01010059010100c301010058010007010001050a07010001050202020103020205030800 -00cb08000100008101010059010100c301010058010007010001050a0701000105020202 -01030202050308cd01ff01ff010007010001050a070100010502020201030202050308cd -01ff01ff010007010001050a0701000105020202010302020503080000cb080001000081 -01010059010100c301010058010007010001050a07010001050202020103020205030800 -00cb08000100000b0101004e0101002201010059010100c301010058010007010001050a -0701000105020202010302020503080000cb08000100000a0100001c0100002a01000008 -010000210101000c0100002a0100001f010100c301010058010007010001050a07010001 -05020202010302020503080000110800000308000010080000010800009e08000100000a -01000005010000040102000c010000040101000d010000050100000a0101000201000007 -010000210101000b010000040101000d010000050100000a010100020100001e010100c3 -0101000a0100000401020044010007010001050a07010001050202020103020205030800 -00110800000308000010080000010800009e08000100000a010000040101000301000002 -0100000a01000004010000010100000b0101000401010009010000010100000201000006 -010000210101000a01000004010000010100000b01010004010100090100000101000002 -0100001d010100c301010009010100030100000201000043010007010001050a07010001 -0502020201030202050308000009080100000800000108040001080000010800000a0801 -000008000001080000000801009b08000100000a01000003010000000100000701000009 -01000005010000010100000a010000000100000301000000010000090100000101000003 -01000005010000210101000901000005010000010100000a010000000100000301000000 -0100000901000001010000030100001c010100c301010008010000000100000301000002 -01000043010007010001050a070100010502020201030202050308000008080000010801 -000308000003080000000800000a0800000108010001080100010800009a08000100000a -010000050100000701000008010000060100000101000009010000010100000201000001 -010000090100000101000004010000040100002101010008010000060100000101000009 -0100000101000002010000010100000901000001010000040100001b010100c30101000a -010000030100000201000043010007010001050a07010001050202020103020205030800 -00080800000208000003080000030801000b0800000208000001080000020800009a0800 -010000080101000601000005010100080100000701000001010000080100000201000001 -01000002010000090100000101000005010000040101001f010100070100000701000001 -010000080100000201000001010000020100000901000001010000050100001a010100c3 -0101000a0100000401030043010007010001050a07010001050202020103020205030800 -00080800000208000003080000030801000b0800000208000001080000020800009a0800 -0100000a0100000501000007010000080100000601000001010000080100000201000001 -010000020100000901000001010000040100000401000021010100080100000601000001 -010000080100000201000001010000020100000901000001010000040100001b010100c3 -0101000a0100000701000043010007010001050a07010001050202020103020205030800 -0008080000020800000308000003080000000800000a0800000208000001080000020800 -009a08000100000a01000005010000070100000901000005010000010100000801050000 -010500080100000101000003010000050100002101010009010000050100000101000008 -010500000105000801000001010000030100001c010100c30101000a0100000701000043 -010007010001050a07010001050202020103020205030800000808000001080100030800 -000308000001080000090800000108010001080100010800009a08000100000a01000005 -010000030100000201000003010100040100000401000001010000030101000601000005 -0100000301010003010000010100000201000006010000210101000a0100000401000001 -010000030101000601000005010000030101000301000001010000020100001d010100c3 -0101000a010000030100000201000043010007010001050a070100010502020201030202 -050308000009080100000800000408010001080000020800000908010000080000010800 -00000801009b08000100000a010000030104000201020004010100050100000401010004 -010100060100000501000003010100040101000201000007010000210101000b01000004 -0101000401010006010000050100000301010004010100020100001e010100c301010008 -0104000201020044010007010001050a07010001050202020103020205030800000c0800 -000e080500a808000100000a01000014010000060100002a01000008010000210101000c -0100002a0100001f010100c301010058010007010001050a070100010502020201030202 -05030800000808000002080000bd08000100000b010100100101003b0101002201010059 -010100c301010058010007010001050a0701000105020202010302020503080000090802 -00be08000100008101010059010100c301010058010007010001050a0701000105020202 -010302020503080000cb08000100008101010059010100c301010058010007010001050a -0701000105020202010302020503080000cb08000100008101010059010100c301010058 -010007010001050a0701000105020202010302020503080000cb08000100008101010059 -010100c301010058010007010001050a0701000105020202010302020503080000cb0800 -0100008101010059010100c301010058010007010001050a070100010502020201030202 -050308cd01ff01ff010007010001050a070100010502020201030202050308cd01ff01ff -010007010001050a0701000105020202010302020503080000cb08000100008101010059 -010100c301010058010007010001050a0701000105020202010302020503080000cb0800 -0100000b0101004e0101002201010059010100c301010058010007010001050a07010001 -05020202010302020503080000cb08000100000a0100001c0100002a0100000801000021 -0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202 -010302020503080000110800000308000010080000010800009e08000100000a01000005 -010000070100000b010000040101000d010000050100000a010100020100000701000021 -0101000b010000040101000d010000050100000a010100020100001e010100c30101000c -0100000201020044010007010001050a0701000105020202010302020503080000110800 -000308000010080000010800009e08000100000a01000004010100060101000a01000004 -010000010100000b0101000401010009010000010100000201000006010000210101000a -01000004010000010100000b010100040101000901000001010000020100001d010100c3 -0101000b010100010100000201000043010007010001050a070100010502020201030202 -050308000009080100000800000108040001080000010800000a08010000080000010800 -00000801009b08000100000a010000030100000001000005010000000100000901000005 -010000010100000a01000000010000030100000001000009010000010100000301000005 -010000210101000901000005010000010100000a01000000010000030100000001000009 -01000001010000030100001c010100c30101000a01000000010000050100004301000701 -0001050a0701000105020202010302020503080000080800000108010003080000030800 -00000800000a0800000108010001080100010800009a08000100000a0100000501000004 -010000010100000801000006010000010100000901000001010000020100000101000009 -010000010100000401000004010000210101000801000006010000010100000901000001 -01000002010000010100000901000001010000040100001b010100c30101000901000001 -0100000501000043010007010001050a0701000105020202010302020503080000080800 -000208000003080000030801000b0800000208000001080000020800009a080001000008 -010100060100000301000002010000070100000701000001010000080100000201000001 -01000002010000090100000101000005010000040101001f010100070100000701000001 -010000080100000201000001010000020100000901000001010000050100001a010100c3 -01010008010000020100000301010044010007010001050a070100010502020201030202 -0503080000080800000208000003080000030801000b0800000208000001080000020800 -009a08000100000a01000005010000030100000201000008010000060100000101000008 -010000020100000101000002010000090100000101000004010000040100002101010008 -010000060100000101000008010000020100000101000002010000090100000101000004 -0100001b010100c301010008010000020100000501000043010007010001050a07010001 -0502020201030202050308000008080000020800000308000003080000000800000a0800 -000208000001080000020800009a08000100000a01000005010000030105000801000005 -010000010100000801050000010500080100000101000003010000050100002101010009 -010000050100000101000008010500000105000801000001010000030100001c010100c3 -010100080105000401000043010007010001050a07010001050202020103020205030800 -000808000001080100030800000308000001080000090800000108010001080100010800 -009a08000100000a01000005010000070100000301010004010000040100000101000003 -01010006010000050100000301010003010000010100000201000006010000210101000a -010000040100000101000003010100060100000501000003010100030100000101000002 -0100001d010100c30101000c010000010100000201000043010007010001050a07010001 -050202020103020205030800000908010000080000040801000108000002080000090801 -000008000001080000000801009b08000100000a01000003010400050100000301010005 -010000040101000401010006010000050100000301010004010100020100000701000021 -0101000b010000040101000401010006010000050100000301010004010100020100001e -010100c30101000c0100000201020044010007010001050a070100010502020201030202 -05030800000c0800000e080500a808000100000a01000014010000060100002a01000008 -010000210101000c0100002a0100001f010100c301010058010007010001050a07010001 -050202020103020205030800000808000002080000bd08000100000b010100100101003b -0101002201010059010100c301010058010007010001050a070100010502020201030202 -050308000009080200be08000100008101010059010100c301010058010007010001050a -0701000105020202010302020503080000cb08000100008101010059010100c301010058 -010007010001050a0701000105020202010302020503080000cb08000100008101010059 -010100c301010058010007010001050a0701000105020202010302020503080000cb0800 -0100008101010059010100c301010058010007010001050a070100010502020201030202 -0503080000cb08000100008101010059010100c301010058010007010001050a07010001 -0502020201030202050308cd01ff01ff010007010001050a070100010502020201030202 -050308cd01ff01ff010007010001050a0701000105020202010302020503080000cb0800 -0100008101010059010100c301010058010007010001050a070100010502020201030202 -0503080000cb08000100000b0101004e0101002201010059010100c30101005801000701 -0001050a0701000105020202010302020503080000cb08000100000a0100001c0100002a -01000008010000210101000c0100002a0100001f010100c301010058010007010001050a -0701000105020202010302020503080000110800000308000010080000010800009e0800 -0100000a01000005010000030104000b010000040101000d010000050100000a01010002 -01000007010000210101000b010000040101000d010000050100000a010100020100001e -010100c3010100090102000301020044010007010001050a070100010502020201030202 -0503080000110800000308000010080000010800009e08000100000a0100000401010003 -0100000e01000004010000010100000b0101000401010009010000010100000201000006 -010000210101000a01000004010000010100000b01010004010100090100000101000002 -0100001d010100c30101000801000002010000010100000201000043010007010001050a -070100010502020201030202050308000009080100000800000108040001080000010800 -000a0801000008000001080000000801009b08000100000a010000030100000001000003 -0100000d01000005010000010100000a0100000001000003010000000100000901000001 -0100000301000005010000210101000901000005010000010100000a0100000001000003 -010000000100000901000001010000030100001c010100c30101000c0100000501000043 -010007010001050a07010001050202020103020205030800000808000001080100030800 -0003080000000800000a0800000108010001080100010800009a08000100000a01000005 -010000030103000901000006010000010100000901000001010000020100000101000009 -010000010100000401000004010000210101000801000006010000010100000901000001 -01000002010000010100000901000001010000040100001b010100c30101000c01000005 -01000043010007010001050a070100010502020201030202050308000008080000020800 -0003080000030801000b0800000208000001080000020800009a08000100000801010006 -010000070100000701000007010000010100000801000002010000010100000201000009 -0100000101000005010000040101001f0101000701000007010000010100000801000002 -01000001010000020100000901000001010000050100001a010100c30101000a01010004 -01010044010007010001050a070100010502020201030202050308000008080000020800 -0003080000030801000b0800000208000001080000020800009a08000100000a01000005 -010000070100000801000006010000010100000801000002010000010100000201000009 -010000010100000401000004010000210101000801000006010000010100000801000002 -01000001010000020100000901000001010000040100001b010100c30101000c01000005 -01000043010007010001050a070100010502020201030202050308000008080000020800 -000308000003080000000800000a0800000208000001080000020800009a08000100000a -010000050100000301000002010000090100000501000001010000080105000001050008 -010000010100000301000005010000210101000901000005010000010100000801050000 -0105000801000001010000030100001c010100c30101000c010000050100004301000701 -0001050a0701000105020202010302020503080000080800000108010003080000030800 -0001080000090800000108010001080100010800009a08000100000a0100000501000003 -010000020100000301010004010000040100000101000003010100060100000501000003 -01010003010000010100000201000006010000210101000a010000040100000101000003 -0101000601000005010000030101000301000001010000020100001d010100c301010008 -01000002010000010100000201000043010007010001050a070100010502020201030202 -050308000009080100000800000408010001080000020800000908010000080000010800 -00000801009b08000100000a010000030104000201020004010100050100000401010004 -010100060100000501000003010100040101000201000007010000210101000b01000004 -0101000401010006010000050100000301010004010100020100001e010100c301010009 -0102000301020044010007010001050a07010001050202020103020205030800000c0800 -000e080500a808000100000a01000014010000060100002a01000008010000210101000c -0100002a0100001f010100c301010058010007010001050a070100010502020201030202 -05030800000808000002080000bd08000100000b010100100101003b0101002201010059 -010100c301010058010007010001050a0701000105020202010302020503080000090802 -00be08000100008101010059010100c301010058010007010001050a0701000105020202 -010302020503080000cb08000100008101010059010100c301010058010007010001050a -0701000105020202010302020503080000cb08000100008101010059010100c301010058 -010007010001050a0701000105020202010302020503080000cb08000100008101010059 -010100c301010058010007010001050a0701000105020202010302020503080000cb0800 -0100008101010059010100c301010058010007010001050a070100010502020201030202 -050308cd01ff01ff010007010001050a070100010502020201030202050308cd01ff01ff -010007010001050a0701000105020202010302020503080000cb08000100008101010059 -010100c301010058010007010001050a0701000105020202010302020503080000cb0800 -0100000b0101004e0101002201010059010100c301010058010007010001050a07010001 -05020202010302020503080000cb08000100000a0100001c0100002a0100000801000021 -0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202 -010302020503080000110800000308000010080000010800009e08000100000a01000005 -010000040102000c010000040101000d010000050100000a010100020100000701000021 -0101000b010000040101000d010000050100000a010100020100001e010100c30101000a -0101004b010007010001050a070100010502020201030202050308000011080000030800 -0010080000010800009e08000100000a0100000401010003010000020100000a01000004 -010000010100000b0101000401010009010000010100000201000006010000210101000a -01000004010000010100000b010100040101000901000001010000020100001d010100c3 -01010009010000010100004a010007010001050a07010001050202020103020205030800 -0009080100000800000108040001080000010800000a0801000008000001080000000801 -009b08000100000a0100000301000000010000030100000d01000005010000010100000a -010000000100000301000000010000090100000101000003010000050100002101010009 -01000005010000010100000a010000000100000301000000010000090100000101000003 -0100001c010100c301010009010000010100004a010007010001050a0701000105020202 -01030202050308000008080000010801000308000003080000000800000a080000010801 -0001080100010800009a08000100000a01000005010000030100000c0100000601000001 -010000090100000101000002010000010100000901000001010000040100000401000021 -010100080100000601000001010000090100000101000002010000010100000901000001 -010000040100001b010100c301010009010000010100004a010007010001050a07010001 -05020202010302020503080000080800000208000003080000030801000b080000020800 -0001080000020800009a0800010000080101000601000003010300080100000701000001 -01000008010000020100000101000002010000090100000101000005010000040101001f -010100070100000701000001010000080100000201000001010000020100000901000001 -010000050100001a010100c301010009010000010100004a010007010001050a07010001 -05020202010302020503080000080800000208000003080000030801000b080000020800 -0001080000020800009a08000100000a0100000501000003010000020100000801000006 -010000010100000801000002010000010100000201000009010000010100000401000004 -010000210101000801000006010000010100000801000002010000010100000201000009 -01000001010000040100001b010100c301010009010000010100004a010007010001050a -070100010502020201030202050308000008080000020800000308000003080000000800 -000a0800000208000001080000020800009a08000100000a010000050100000301000002 -010000090100000501000001010000080105000001050008010000010100000301000005 -010000210101000901000005010000010100000801050000010500080100000101000003 -0100001c010100c301010009010000010100004a010007010001050a0701000105020202 -010302020503080000080800000108010003080000030800000108000009080000010801 -0001080100010800009a08000100000a0100000501000003010000020100000301010004 -010000040100000101000003010100060100000501000003010100030100000101000002 -01000006010000210101000a010000040100000101000003010100060100000501000003 -0101000301000001010000020100001d010100c301010009010000010100004a01000701 -0001050a0701000105020202010302020503080000090801000008000004080100010800 -0002080000090801000008000001080000000801009b08000100000a0100000301040002 -010200040101000501000004010100040101000601000005010000030101000401010002 -01000007010000210101000b010000040101000401010006010000050100000301010004 -010100020100001e010100c30101000a0101004b010007010001050a0701000105020202 -0103020205030800000c0800000e080500a808000100000a01000014010000060100002a -01000008010000210101000c0100002a0100001f010100c301010058010007010001050a -07010001050202020103020205030800000808000002080000bd08000100000b01010010 -0101003b0101002201010059010100c301010058010007010001050a0701000105020202 -01030202050308000009080200be08000100008101010059010100c30101005801000701 -0001050a0701000105020202010302020503080000cb08000100008101010059010100c3 -01010058010007010001050a0701000105020202010302020503080000cb080001000081 -01010059010100c301010058010007010001050a07010001050202020103020205030800 -00cb08000100008101010059010100c301010058010007010001050a0701000105020202 -010302020503080000cb08000100008101010059010100c301010058010007010001050a -070100010502020201030202050308cd01ff01ff010007010001050a0701000105020202 -01030202050308cd01ff01ff010007010001050a07010001050202020103020205030800 -00cb08000100008101010059010100c301010058010007010001050a0701000105020202 -010302020503080000cb08000100000b0101004e0101002201010059010100c301010058 -010007010001050a0701000105020202010302020503080000cb08000100000a0100001c -0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701 -0001050a0701000105020202010302020503080000110800000308000010080000010800 -009e08000100000a01000005010000030104000b010000040101000d010000050100000a -0101000201000007010000210101000b010000040101000d010000050100000a01010002 -0100001e010100c3010100090102000401010044010007010001050a0701000105020202 -010302020503080000110800000308000010080000010800009e08000100000a01000004 -01010003010000020100000a01000004010000010100000b010100040101000901000001 -0100000201000006010000210101000a01000004010000010100000b0101000401010009 -01000001010000020100001d010100c30101000801000002010000020100000101000043 -010007010001050a07010001050202020103020205030800000908010000080000010804 -0001080000010800000a0801000008000001080000000801009b08000100000a01000003 -01000000010000070100000901000005010000010100000a010000000100000301000000 -01000009010000010100000301000005010000210101000901000005010000010100000a -0100000001000003010000000100000901000001010000030100001c010100c301010008 -01000002010000020100000101000043010007010001050a070100010502020201030202 -050308000008080000010801000308000003080000000800000a08000001080100010801 -00010800009a08000100000a010000050100000601000009010000060100000101000009 -010000010100000201000001010000090100000101000004010000040100002101010008 -010000060100000101000009010000010100000201000001010000090100000101000004 -0100001b010100c30101000801000002010000020100000101000043010007010001050a -0701000105020202010302020503080000080800000208000003080000030801000b0800 -000208000001080000020800009a08000100000801010006010000060100000801000007 -010000010100000801000002010000010100000201000009010000010100000501000004 -0101001f0101000701000007010000010100000801000002010000010100000201000009 -01000001010000050100001a010100c30101000901030002010000010100004301000701 -0001050a0701000105020202010302020503080000080800000208000003080000030801 -000b0800000208000001080000020800009a08000100000a010000050100000601000009 -010000060100000101000008010000020100000101000002010000090100000101000004 -010000040100002101010008010000060100000101000008010000020100000101000002 -0100000901000001010000040100001b010100c30101000c010000020100000101000043 -010007010001050a07010001050202020103020205030800000808000002080000030800 -0003080000000800000a0800000208000001080000020800009a08000100000a01000005 -010000050100000b01000005010000010100000801050000010500080100000101000003 -010000050100002101010009010000050100000101000008010500000105000801000001 -010000030100001c010100c30101000c010000020100000101000043010007010001050a -070100010502020201030202050308000008080000010801000308000003080000010800 -00090800000108010001080100010800009a08000100000a010000050100000501000005 -010100040100000401000001010000030101000601000005010000030101000301000001 -0100000201000006010000210101000a0100000401000001010000030101000601000005 -010000030101000301000001010000020100001d010100c3010100080100000201000002 -0100000101000043010007010001050a0701000105020202010302020503080000090801 -0000080000040801000108000002080000090801000008000001080000000801009b0800 -0100000a0100000301040003010000050101000501000004010100040101000601000005 -01000003010100040101000201000007010000210101000b010000040101000401010006 -010000050100000301010004010100020100001e010100c3010100090102000401010044 -010007010001050a07010001050202020103020205030800000c0800000e080500a80800 -0100000a01000014010000060100002a01000008010000210101000c0100002a0100001f -010100c301010058010007010001050a0701000105020202010302020503080000080800 -0002080000bd08000100000b010100100101003b0101002201010059010100c301010058 -010007010001050a070100010502020201030202050308000009080200be080001000081 -01010059010100c301010058010007010001050a07010001050202020103020205030800 -00cb08000100008101010059010100c301010058010007010001050a0701000105020202 -010302020503080000cb08000100008101010059010100c301010058010007010001050a -0701000105020202010302020503080000cb08000100008101010059010100c301010058 -010007010001050a0701000105020202010302020503080000cb08000100008101010059 -010100c301010058010007010001050a070100010502020201030202050308cd01ff01ff -010007010001050a070100010502020201030202050308cd01ff01ff010007010001050a -0701000105020202010302020503080000cb08000100008101010059010100c301010058 -010007010001050a0701000105020202010302020503080000cb08000100000b0101004e -0101002201010059010100c301010058010007010001050a070100010502020201030202 -0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a -0100001f010100c301010058010007010001050a07010001050202020103020205030800 -00110800000308000010080000010800009e08000100000a01000005010000040102000c -010000040101000d010000050100000a0101000201000007010000210101000b01000004 -0101000d010000050100000a010100020100001e010100c3010100090102000301020044 -010007010001050a07010001050202020103020205030800001108000003080000100800 -00010800009e08000100000a0100000401010003010000020100000a0100000401000001 -0100000b0101000401010009010000010100000201000006010000210101000a01000004 -010000010100000b010100040101000901000001010000020100001d010100c301010008 -01000002010000010100000201000043010007010001050a070100010502020201030202 -050308000009080100000800000108040001080000010800000a08010000080000010800 -00000801009b08000100000a010000030100000001000003010000020100000901000005 -010000010100000a01000000010000030100000001000009010000010100000301000005 -010000210101000901000005010000010100000a01000000010000030100000001000009 -01000001010000030100001c010100c3010100080100000901000043010007010001050a -070100010502020201030202050308000008080000010801000308000003080000000800 -000a0800000108010001080100010800009a08000100000a010000050100000301000002 -010000080100000601000001010000090100000101000002010000010100000901000001 -010000040100000401000021010100080100000601000001010000090100000101000002 -010000010100000901000001010000040100001b010100c3010100080100000901000043 -010007010001050a07010001050202020103020205030800000808000002080000030800 -00030801000b0800000208000001080000020800009a0800010000080101000601000004 -010200080100000701000001010000080100000201000001010000020100000901000001 -01000005010000040101001f010100070100000701000001010000080100000201000001 -010000020100000901000001010000050100001a010100c3010100080103000501000044 -010007010001050a07010001050202020103020205030800000808000002080000030800 -00030801000b0800000208000001080000020800009a08000100000a0100000501000003 -010000020100000801000006010000010100000801000002010000010100000201000009 -010000010100000401000004010000210101000801000006010000010100000801000002 -01000001010000020100000901000001010000040100001b010100c30101000801000002 -0100000301000045010007010001050a0701000105020202010302020503080000080800 -00020800000308000003080000000800000a0800000208000001080000020800009a0800 -0100000a0100000501000003010000020100000901000005010000010100000801050000 -010500080100000101000003010000050100002101010009010000050100000101000008 -010500000105000801000001010000030100001c010100c3010100080100000201000002 -01000046010007010001050a070100010502020201030202050308000008080000010801 -00030800000308000001080000090800000108010001080100010800009a08000100000a -010000050100000301000002010000030101000401000004010000010100000301010006 -010000050100000301010003010000010100000201000006010000210101000a01000004 -01000001010000030101000601000005010000030101000301000001010000020100001d -010100c301010008010000020100000101000047010007010001050a0701000105020202 -010302020503080000090801000008000004080100010800000208000009080100000800 -0001080000000801009b08000100000a0100000301040002010200040101000501000004 -01010004010100060100000501000003010100040101000201000007010000210101000b -010000040101000401010006010000050100000301010004010100020100001e010100c3 -010100090102000201040043010007010001050a07010001050202020103020205030800 -000c0800000e080500a808000100000a01000014010000060100002a0100000801000021 -0101000c0100002a0100001f010100c301010058010007010001050a0701000105020202 -0103020205030800000808000002080000bd08000100000b010100100101003b01010022 -01010059010100c301010058010007010001050a07010001050202020103020205030800 -0009080200be08000100008101010059010100c301010058010007010001050a07010001 -05020202010302020503080000cb08000100008101010059010100c30101005801000701 -0001050a0701000105020202010302020503080000cb08000100008101010059010100c3 -01010058010007010001050a0701000105020202010302020503080000cb080001000081 -01010059010100c301010058010007010001050a07010001050202020103020205030800 -00cb08000100008101010059010100c301010058010007010001050a0701000105020202 -01030202050308cd01ff01ff010007010001050a070100010502020201030202050301ff -01ff01ce07010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001050a0701000105020202010302020503 -010000cb010100810101000c0100002a0100001f010100c301010058010007010001050a -07010001050202020103020205030100000b010000120100001f01000089010100810101 -000b010000040101000b010000040102000b010100020100001e0101000b010000120100 -000e010000010100008f0101000a0101004b010007010001050a07010001050202020103 -020205030100001f0100001f01000089010100810101000a010000040100000101000009 -01010003010000020100000901000001010000020100001d0101001f0100000e01000001 -0100008f01010009010000010100004a010007010001050a070100010502020201030202 -050301000009010200020100000001010003010200020104000901020003010200030102 -000201000000010100030102007f01010081010100090100000501000001010000080100 -0000010000070100000901000001010000030100001c0101000901020002010000000101 -000301020002010400090101000001000001010000000101008c01010009010000010100 -004a010007010001050a07010001050202020103020205030100000b0100000201010001 -0100000101000002010000030100000a0100000201000001010000020100000101000002 -010000010101000101000001010000020100007e01010081010100080100000601000001 -0100000a010000070100000901000001010000040100001b0101000b0100000201010001 -0100000101000002010000030100000a0100000101010001010100010100008b01010009 -010000010100004a010007010001050a07010001050202020103020205030100000b0100 -0002010000020100000101000002010000030100000a0100000901000001010000050100 -000201000001010000020100007e010100810101000701000007010000010100000a0100 -00060100000a01000001010000050100001a0101000b0100000201000002010000010100 -0002010000030100000a0100000201000001010000020100008b01010009010000010100 -004a010007010001050a07010001050202020103020205030100000b0100000201000002 -01000001010400030100000a01000006010300010100000501000002010000010104007e -010100810101000801000006010000010100000a010000050100000b0100000101000004 -0100001b0101000b010000020100000201000001010400030100000a0100000201000001 -010000020100008b01010009010000010100004a010007010001050a0701000105020202 -0103020205030100000b010000020100000201000001010000070100000a010000050100 -000201000001010000050100000201000001010000820101008101010009010000050100 -00010100000a010000040100000c01000001010000030100001c0101000b010000020100 -000201000001010000070100000a0100000201000001010000020100008b010100090100 -00010100004a010007010001050a07010001050202020103020205030100000b01000002 -010000020100000101000002010000030100000a01000002010000010100000201000001 -01000002010000010100000201000001010000020100007e010100810101000a01000004 -01000001010000030101000401000003010000070101000301000001010000020100001d -0101000b01000002010000020100000101000002010000030100000a0100000101010001 -010100010100008b01010009010000010100004a010007010001050a0701000105020202 -0103020205030100000b0100000201000002010000020102000501010009010200030103 -00020102000201000002010000020102007f010100810101000b01000004010100040101 -0002010400010104000301010004010100020100001e0101000b01000002010000020100 -000201020005010100090101000001000001010000000101008c0101000a0101004b0100 -07010001050a070100010502020201030202050301000023010500a1010100810101000c -0100002a0100001f010100230105009901010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a0701000105020202010302020503010000cb0101 -008101010059010100c301010058010007010001070c0001050202020103020205030100 -00cb0101008101010059010100c301010058010007010000070d00010502020201030202 -050301ff01ff01ce0701030e00010502020201030202050301ff01ff01ce0701030e0001 -05020202010302020503010000cb0101008101010059010100c30101005801000701030e -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -030e000105020202010302020503010000cb010100810101000c0100002a0100001f0101 -00c30101005801000701030e0001050202020103020205030100000b010000120100000e -0100000101000097010100810101000b010000040101000b010000040102000b01010002 -0100001e0101000b010000120100000e010000010100008f0101000a0100000401020044 -01000701030e0001050202020103020205030100001f0100000e01000001010000970101 -00810101000a010000040100000101000009010100030100000201000009010000010100 -00020100001d0101001f0100000e010000010100008f0101000901010003010000020100 -004301000701030e00010502020201030202050301000009010200020100000001010003 -010200020104000901010000010000010100000001010094010100810101000901000005 -010000010100000801000000010000070100000901000001010000030100001c01010009 -01020002010000000101000301020002010400090101000001000001010000000101008c -010100080100000001000003010000020100004301000701030e00010502020201030202 -05030100000b01000002010100010100000101000002010000030100000a010000010101 -00010101000101000093010100810101000801000006010000010100000a010000070100 -000901000001010000040100001b0101000b010000020101000101000001010000020100 -00030100000a0100000101010001010100010100008b0101000a01000003010000020100 -004301000701030e0001050202020103020205030100000b010000020100000201000001 -01000002010000030100000a010000020100000101000002010000930101008101010007 -01000007010000010100000a010000060100000a01000001010000050100001a0101000b -01000002010000020100000101000002010000030100000a010000020100000101000002 -0100008b0101000a010000040103004301000701030e0001050202020103020205030100 -000b010000020100000201000001010400030100000a0100000201000001010000020100 -0093010100810101000801000006010000010100000a010000050100000b010000010100 -00040100001b0101000b010000020100000201000001010400030100000a010000020100 -0001010000020100008b0101000a010000070100004301000701030e0001050202020103 -020205030100000b010000020100000201000001010000070100000a0100000201000001 -0100000201000093010100810101000901000005010000010100000a010000040100000c -01000001010000030100001c0101000b010000020100000201000001010000070100000a -0100000201000001010000020100008b0101000a010000070100004301000701030e0001 -050202020103020205030100000b01000002010000020100000101000002010000030100 -000a01000001010100010101000101000093010100810101000a01000004010000010100 -00030101000401000003010000070101000301000001010000020100001d0101000b0100 -0002010000020100000101000002010000030100000a0100000101010001010100010100 -008b0101000a01000003010000020100004301000701030e000105020202010302020503 -0100000b0100000201000002010000020102000501010009010100000100000101000000 -01010094010100810101000b010000040101000401010002010400010104000301010004 -010100020100001e0101000b010000020100000201000002010200050101000901010000 -01000001010000000101008c01010008010400020102004401000701030e000105020202 -01030202050301000023010500a1010100810101000c0100002a0100001f010100230105 -00990101005801000701030e000105020202010302020503010000cb0101008101010059 -010100c30101005801000701030e000105020202010302020503010000cb010100810101 -0059010100c30101005801000701030e000105020202010302020503010000cb01010081 -01010059010100c30101005801000701030e000105020202010302020503010000cb0101 -008101010059010100c30101005801000701030e000105020202010302020503010000cb -0101008101010059010100c30101005801000701030e0001050202020103020205030100 -00cb0101008101010059010100c30101005801000701030e000105020202010302020503 -01ff01ff01ce0701030e00010502020201030202050301ff01ff01ce0701001005020202 -010302020503010000cb0101008101010059010100c301010058010007010300000c0700 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -03000001050807010300000105020202010302020503010000cb010100810101000c0100 -002a0100001f010100c30101005801000701030100010507070103000001050202020103 -020205030100000b010000120100000a0100001501000087010100810101000b01000004 -0101000b010000040102000b010100020100001e0101000b010000120100000e01000001 -0100008f0101000c0100004a010007010301000105060701030100010502020201030202 -05030100001f0100000a0100001501000087010100810101000a01000004010000010100 -000901010003010000020100000901000001010000020100001d0101001f0100000e0100 -00010100008f0101000b0101004a01000701030200010505070103010001050202020103 -020205030100000901020002010000000101000301020002010400080100000001010003 -0102000301020002010400020102007f0101008101010009010000050100000101000008 -01000000010000070100000901000001010000030100001c010100090102000201000000 -0101000301020002010400090101000001000001010000000101008c0101000a01000000 -0100004a01000701030200010504070103020001050202020103020205030100000b0100 -0002010100010100000101000002010000030100000a0101000101000001010000020100 -0001010000020100000301000003010000020100007e0101008101010008010000060100 -00010100000a010000070100000901000001010000040100001b0101000b010000020101 -00010100000101000002010000030100000a0100000101010001010100010100008b0101 -0009010000010100004a0100070103030001050307010302000105020202010302020503 -0100000b01000002010000020100000101000002010000030100000a0100000201000001 -010000020100000101000007010000030100008201010081010100070100000701000001 -0100000a010000060100000a01000001010000050100001a0101000b0100000201000002 -0100000101000002010000030100000a0100000201000001010000020100008b01010008 -010000020100004a01000701030300010502070103030001050202020103020205030100 -000b010000020100000201000001010400030100000a0100000201000001010000020100 -000201020004010000040102007f010100810101000801000006010000010100000a0100 -00050100000b01000001010000040100001b0101000b0100000201000002010000010104 -00030100000a0100000201000001010000020100008b01010008010000020100004a0100 -0701030400010501070103030001050202020103020205030100000b0100000201000002 -01000001010000070100000a010000020100000101000002010000050100000301000007 -0100007e010100810101000901000005010000010100000a010000040100000c01000001 -010000030100001c0101000b010000020100000201000001010000070100000a01000002 -01000001010000020100008b010100080105004901000701030400010500070103040001 -050202020103020205030100000b01000002010000020100000101000002010000030100 -000a01000002010000010100000201000001010000020100000301000003010000020100 -007e010100810101000a0100000401000001010000030101000401000003010000070101 -000301000001010000020100001d0101000b010000020100000201000001010000020100 -00030100000a0100000101010001010100010100008b0101000c0100004a010007010305 -0000070203040001050202020103020205030100000b0100000201000002010000020102 -00050101000801000002010000020102000301020005010100020102007f010100810101 -000b010000040101000401010002010400010104000301010004010100020100001e0101 -000b01000002010000020100000201020005010100090101000001000001010000000101 -008c0101000c0100004a0100070103050000070103050001050202020103020205030100 -0023010500a1010100810101000c0100002a0100001f0101002301050099010100580100 -0701030607010305000105020202010302020503010000cb0101008101010059010100c3 -0101005801000701030607000306000105020202010302020503010000cb010100810101 -0059010100c30101005801000701001005020202010302020503010000cb010100810101 -0059010100c3010100580100070000110502020201030202050207ff07ff07d305110202 -01030202050207ff07ff07d20000051102020103020205020701030d0000030000ff00ff -00af03000001030c0001051102020103020205020701030b00010700030000ff00ff00ae -070003000003030a00010511020201030202050207010309000207010300000105ff05ff -05ab07010300000503080001051102020103020205020701030700030500070103000001 -05ff05ff05ab070103000001050100030306000105110202010302020502070103050003 -050207010300000105ff05ff05ab07010300000105030003030400010511020201030202 -0502070103030003050407010300000105ff05ff05ab0701030000010505000303020001 -05110202010302020502070103010003050607010300000105ff05ff05ab070103000001 -0507000303000001051102020103020205020705050807010300000105ff05ff05ab0701 -0300000105080703000105110202010302020502070103010703050607010300000105ff -05ff05ab0701030000010507070303000001051102020103020205020701030307030504 -07010300000105ff05ff05ab070103000001050507030302000105110202010302020502 -070103050703050207010300000105ff05ff05ab07010300000105030703030400010511 -0202010302020502070103070703050007010300000105ff05ff05ab0701030000010501 -070303060001051102020103020205020701030907040300000105ff05ff05ab07010300 -0001070303080001051102020103020205020701030b07020300000107ff07ff07ad0300 -00010701030a0001051102020101000405020701030d07000300000007ff07ff07ae0300 -00000700030c000105110005020204000502070100ff00ff00d105110000020204000000 -020204000502070000ff00ff00d2051100000202040000000202040005ff05ff05e80000 -0202040000000202040005ff05ff05e800000202040000000202040005ff05ff05e80000 -02020400000002020400000502ff02ff02dc00060202040000000208040002ff02ff02dc -00000208040000000208040002ff02ff02dc00000208040000000208040001ff01ff01dc -0000020804000000040901ff01ff01dc00000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 377 205 -%%EOF diff --git a/lib/tv/doc/src/tv_start_system_unreadable.gif b/lib/tv/doc/src/tv_start_system_unreadable.gif Binary files differdeleted file mode 100644 index 38b69deb8e..0000000000 --- a/lib/tv/doc/src/tv_start_system_unreadable.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_start_system_unreadable.ps b/lib/tv/doc/src/tv_start_system_unreadable.ps deleted file mode 100644 index 4486557837..0000000000 --- a/lib/tv/doc/src/tv_start_system_unreadable.ps +++ /dev/null @@ -1,1377 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_start_system_unreadable.eps) -%%CreationDate: (Mon Mar 19 17:15:29 2001) -%%BoundingBox: 0 0 377 205 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 377 205 -userdict begin -%%BeginData: -DisplayImage -0 0 -377.000000 205.000000 -12 -755 410 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -b22222 -828282 -aab6aa -e7e7e7 -000000 -000000 -000000 -000000 -000000 -000000 -000a01ff01ff01dc000b0208040001ff01ff01dc00000208040000000208040002ff02ff -02dc000002080400000002080400020000ff00ff00d90400020000000208040000000202 -04060200000004ff04ff04d9020000000405020204000000020204000209000d02ff02ff -02d000000202040000000202040002080000020d040002f6010302110103023801010206 -0101024001010230010102ff020400000202040000000202040002080000020d040002f6 -010102020107020001010203010102010101020e0105020001070201010302070100020b -01010206010102400101020c0104021e010102ff02040000020204000000020204000208 -0000020d040002f6010102050101020301010203010102010101020e0101020701010203 -01010201010102050101020b010102060101024e010102020101021d010102ff02040000 -0202040000000202040002080000020204060203040002f6010102050101020301010203 -010102010101020e01010207010102030101020801040201010302030101020001010203 -010102020103020301040206010302030101020001010207010102000101020101010203 -010302030101020201010200010102020101020101030202010102000101020101010203 -010302020101020001010201010102020103020201010202010102f30000020204000000 -04030208000002020400030400000203040002f601010205010102040101020201000202 -0101020e0101020701010203010202080101020201010201010102020102020001010202 -010102010101020101010201010102090101020101010202010202000101020601020200 -010202000101020101010201010102020101020201020200010102010101020001010200 -010102020102020001020200010102010101020101010201010102000101020101010201 -010102010101020101010202010102f3000004030101020b000002030400030200000204 -040002f6010102050101020401010201010102020101020e010402040101020401030206 -010102060101020201010201010102020101020101010201010102010102020801010201 -010102020101020101010206010102010101020101010205010102020101020201010201 -010102010101020001010200010102020101020101010201010102050101020101020203 -01010201010102010101020101010202010002f70103020b000002030400030200000204 -040002f6010102050101020501010200010002030101020e010102070101020601020205 -010102030104020201010201010102020101020101050202010302060101020101010202 -010102010101020601010201010102010101020201040202010102020101020101010201 -010102000101020001010202010102010101020101010202010402010101020401010201 -0105020201010200010102f70103020b000002040400030000000205040002f601010205 -01010205010302030101020e010102070101020701010205010102020101020101010202 -010102010101020201010201010102080102020501010201010102020101020101010206 -010102010101020101010201010102010101020201010202010102010101020101010201 -010102000101020101010201010102010101020101010201010102010101020401010201 -0101020601010200010002f80103020b000002040400030000000205040002f601010205 -01010206010102040101020e010102070101020301010201010102050101020201010201 -010102020101020101010202010102010101020201000205010102050101020101010202 -010102010101020601010201010102010101020101010201010102020101020201010201 -010102020101020701010201010102010101020101010201010102010101020401010201 -0101020201000203010202f80103020b0000020500000206040002f60101020501010206 -010102040101020e01050203010102040103020701020201010202000101020101040203 -010102020103020201040207010302030101020101010206010102010101020101010202 -010202000101020101010202010102010101020301050202010102010101020101010202 -0102020001010200010102040101020201030204010102f90103020b0000020d040002f6 -01030211010302c4010102fa0103020b0000020d040002ff02d5010102fa0103020b0000 -020d040002ff02ff02d20103020c040d02ff02ff02d3010302ff02ff02ee010302ff02ff -02ee0103020200ff00ff00e70400020201030202000004ff04ff04e70202010302ff02ff -02ee0103020200ff00ff00e802020103020200ff00ff00e70700020201030202000105ff -05ff05e40701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 -0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e407010202 -010302020001050b06040504060005030602051f0600050206000504060005270602050b -06000506060005ff05ff053506000502060005090602051307010202010302020001050b -0600050f0600051f060005020600052c060005020600050a060005ff05ff053d06000502 -0600050b0600051307010202010302020001050b06000506060205050600050306020518 -060005020600050206020503060205020600050206000517060005020600050106000500 -060105020604050206020503060205020600050006010503060205ff05ff052006000502 -060005020602050506000502060005000601050c07010202010302020001050b06000508 -060005050600050206000502060005180600050006000505060005020600050206000501 -060005020600051706000502060005010601050106000503060005060600050206000502 -06000501060105010600050106000502060005ff05ff051f060005020600050106000502 -0600050406000502060105010600050b07010202010302020001050b0603050506000505 -060005020600050206000518060005000600050506000502060005020600050106000500 -060005000600051706000502060005010600050206000503060005060600050206000502 -060005010600050206000501060005ff05ff052306040501060005020600050406000502 -060005020600050b07010202010302020001050b06000508060005050600050206040518 -060005000600050506000502060405010600050006000500060005170600050206000501 -0600050206000503060005060600050206000502060005010600050206000502060205ff -05ff052006000502060005010604050406000502060005020600050b0701020201030202 -0001050b0600050806000505060005020600051d06000506060005020600050506000500 -060005000600051706000502060005010600050206000503060005060600050206000502 -060005010600050206000505060005ff05ff051f06000502060005010600050806000502 -060005020600050b07010202010302020001050b06000508060005050600050206000502 -060005190600050606000502060005020600050106000500060005000600051706000502 -060005010601050106000503060005060600050206000502060005010600050206000501 -06000502060005ff05ff051f060005020600050106000502060005040600050206010501 -0600050b07010202010302020001050b0600050806000505060005030602051a06000506 -060005030602050306000500060005190602050206000500060105050601050406000503 -060205020600050206000502060205ff05ff052006000502060005020602050506000502 -060005000601050c070102020103020200010576060005ff05ff055b0600050f07010202 -010302020001050a0606052a0606052a06060500060005ff05ff05450606050e0600050f -07010202010302020001050a0606052a0606052a06060500060005ff05ff05450606050e -0600050f0701020201030202000105ff05ff05e40701020201030202000105ff05ff05e4 -0701020201030202000105ff05ff05e40701020201030202000107ff07ff07e602020103 -0202000007ff07ff07e702020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff05e80202 -0103020205ff05ff05e802020103020205ff05ff05e8020201030202051c010205040103 -05c1010205040103051a0102057f01010505010205f001020504010305190101052f0202 -01030202050e01060508010005060101050f010205010102059b01060508010005060101 -0510010505040101054d010205240104050d0101051e0102052401020501010205930106 -0508010005060101051101030535020201030202050e0100050101010500010005070101 -050601000511010105010100059d01000501010105000100050701010506010005130101 -05060100054d0101050001010524010105000101050c0100051e01010500010105240101 -050101000595010005010101050001000507010105060100051101010501010105340202 -010302020510010105030103050201030503010105030103050801020500010105010103 -05000101050001000500010005020103058b010105030103050201030503010105030103 -050a010105030104054c0101050101050500010305000102050201030501010105000102 -05070101050101010500010305030104051d010105010105050001030500010205020103 -050101010500010205070102050001010501010305000101050001000500010005020103 -058301010503010305020103050301010503010305090101050101000500010305020105 -050101030521020201030202051001010506010105000101050101010502010105020101 -0501010105070100050001000500010005050101050001050500010105010101058a0101 -050601010500010105010101050201010502010105010101050901010502010105010101 -054c01000502010105000101050201000500010205000101050001010501010105010102 -050001000507010105010101050201010502010105010101051d01000502010105000101 -050201000500010205000101050001010501010105010102050001000507010005000100 -050001000505010105000105050001010501010105820101050601010500010105010101 -050201010502010105010101050801020504010105020101050001010501010105010101 -052002020103020205100100050401040500010105010101050201010501010605070100 -0500010205020104050001010500010005000107058a0100050401040500010105010101 -0502010105010106050901010501010105020101054b0101050201000501010105000100 -05000100050001010501010805010101050a0103050401010501010105020101051c0101 -05020100050101010500010005000100050001010501010805010101050a010005000102 -050201040500010105000100050001070582010005040104050001010501010105020101 -05010106050901020503010105040101050101060520020201030202050f010105020101 -0501010105000101050201010501010105020101050b0101050001010501010105010101 -05010100050001000500010005000101058e010105020101050101010500010105020101 -0501010105020101050d01010502010105010101054c0101050101010501010205000100 -05010100050201000500010105050101050a0101050601010502010105010101051d0101 -05010101050101020500010005010100050201000500010105050101050a010105000101 -050101010501010105010100050001000500010005000101058601010502010105010101 -05000101050201010501010105020101050b010105010101050201010503010105030101 -0525020201030202050f0101050201010501010105000101050101010502010105020101 -050101010507010005010101050101010501010105000101050001000500010005000101 -05010101058a010105020101050101010500010105010101050201010502010105010101 -050901010502010105010101054c01010500010105020103050101010501010105000101 -0501010105010101050a0101050601010502010105010101051d01010500010105020103 -0501010105010101050001010501010105010101050a0100050101010501010105010101 -050001010500010005000100050001010501010105820101050201010501010105000101 -050101010502010105020101050101010507010105010101050201010502010205000101 -05000101050101010521020201030202050e01030502010a050101050501010305070102 -0500010105020107050001000500010105000103058a01030502010a0501010505010103 -0508010505010105054c0102050301010500010005000103050001020500010305010104 -050701030503010505010105051d01020503010105000100050001030500010205000103 -05010104050701020500010105020107050001000500010105000103058201030502010a -050101050501010305090103050101050500010505010103052202020103020205ff05ff -05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff -05e802020103020205ff05ff05e802020103020205ff05ff05e802020103020205ff05ff -05e8020201030202050201ff01ff01e205020202010302020503010000cb010100810101 -0059010100c30101005801000711000005020202010302020503010000cb010100810101 -0059010100c30101005801000701030607000306000105020202010302020503010000cb -010100810101000c0100002301000026010100c301010058010007010305000007000306 -0001050202020103020205030100001f0100000a0100009e010100810101000b01000004 -010100090104000a01010002010000250101001e0102000501000012010000060100002e -010000120102000301020031010100080104004a01000701030500000701030500010502 -02020103020205030100001f0100000a0100009e010100810101000a0100000401000001 -010000080100000d01000001010000020100002401010020010000190100003601000014 -010000050100003101010008010000020100004a01000701030400010701030500010502 -02020103020205030100000901020003010200090104000201020002010000000101009b -01010081010100090100000501000001010000080100000d010000010100000301000023 -010100090102000201000000010100020100000001010005010000030102000301020003 -01020002010400020102000301020002010000000101000a010200030102000201000000 -010100020104000101000000010100030102000501000005010000030102000201000000 -010100230101000c0100004a010007010304000105000701030400010502020201030202 -0503010000080100000201000001010000020100000a0100000301000002010000010101 -00010100009a01010081010100080100000601000001010000080103000a010000010100 -000401000022010100080100000201000001010100010100000101010001010000040100 -000501000002010000020100000101000002010000030100000601000002010000020100 -000101010001010000080100000201000001010000020100000101010001010000030100 -000301010001010000010100000201000004010000050100000201000002010000010101 -0001010000220101000b0100004b01000701030300010501070103040001050202020103 -020205030100000c010000010100000e0100000701000001010000020100009a01010081 -0101000701000007010000010100000c010000090100000101000005010000210101000c -010000010100000201000001010000020100000401000005010000020100000901000003 -010000060100000201000002010000010100000201000008010000050100000201000001 -010000020100000301000003010000050100000201000004010000050100000201000002 -01000001010000260101000b0100004b0100070103030001050207010303000105020202 -01030202050301000009010300010100000e0100000401030001010000020100009a0101 -00810101000801000006010000010100000c010000090100000101000004010000220101 -000901030001010000020100000101000002010000040100000501000002010000060103 -000301000006010000020100000201000001010000020100000801000005010000020100 -000101000002010000030100000301000005010000020100000401000005010000020104 -0001010000260101000b0100004b01000701030200010503070103030001050202020103 -020205030100000801000002010000010100000e01000003010000020100000101000002 -0100009a0101008101010009010000050100000101000008010000020100000901000001 -010000030100002301010008010000020100000101000002010000010100000201000004 -010000050100000201000005010000020100000301000006010000020100000201000001 -010000020100000801000005010000020100000101000002010000030100000301000005 -0100000201000004010000050100000201000005010000260101000a0100004c01000701 -030200010504070103020001050202020103020205030100000801000002010000010100 -00020100000a010000030100000201000001010100010100009a010100810101000a0100 -000401000001010000030101000201000002010000030101000301000001010000020100 -002401010008010000020100000101010001010000010101000101000004010000050100 -000201000002010000010100000201000003010000060100000201000002010000010100 -000201000008010000020100000101000002010000010100000201000003010000030100 -0005010000020100000401000005010000020100000201000001010000260101000a0100 -004c01000701030100010505070103020001050202020103020205030100000901030002 -0102000c0101000201030001010000000101009b010100810101000b0100000401010004 -010100030102000401010004010100020100002501010009010300010100000001010002 -010000000101000501000005010000030102000301030004010100040100000301020002 -010000020100000901020003010200020100000201000004010100010100000601020005 -010000050100000301020002010000260101000a0100004c010007010301000105060701 -030100010502020201030202050301000015010500af010100810101000c010000230100 -00260101000f010000050100003c01050068010100580100070103000001050707010301 -000105020202010302020503010000cb01010081010100590101000f01000005010000ab -010100580100070103000001050807010300000105020202010302020503010000cb0101 -0081010100590101000f01000005010000ab01010058010007010001070b030000010502 -0202010302020503010000cb0101008101010059010100c301010058010007010000070d -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -030e000105020202010302020503010000cb0101008101010059010100c3010100580100 -0701001005020202010302020503010000cb0101008101010059010100c3010100580100 -0701000d070000010502020201030202050301ff01ff01ce07010001050a070100010502 -020201030202050308cd01ff01ff010007010001050a0701000105020202010302020503 -080009cb08000100098101010959010109c301010958010007010001050a070100010502 -0202010302020503080009cb08000100090b0101094e0101092201010959010109c30101 -0958010007010001050a0701000105020202010302020503080009cb08000100090a0100 -091c0100092a01000908010009210101090c0100092a0100091f010109c3010109580100 -07010001050a07010001050202020103020205030800091a080009af08000100090a0100 -0905010009050101090c010009040101090a010209020104090a01010902010009070100 -09210101090b010009040101090a010209020104090a010109020100091e0101091a0100 -09a70101090901020903010209020104093c010007010001050a07010001050202020103 -020205030800091a080009af08000100090a0100090401010904010009010100090a0100 -090401000901010009080100090201000901010009020100090901000901010009020100 -0906010009210101090a0100090401000901010009080100090201000901010009020100 -090901000901010009020100091d0101091a010009a70101090801000902010009010100 -090201000901010009020100093c010007010001050a0701000105020202010302020503 -0800090908020903080209030801090008000902080209a908000100090a010009030100 -090001000904010009010100090901000905010009010100090c01000905010009090100 -09010100090301000905010009210101090901000905010009010100090c010009050100 -090901000901010009030100091c01010909010209030102090301010900010009020102 -090a01020903010209020100090001010902010009020100090201020902010009000101 -09700101090c01000905010009050100093c010007010001050a07010001050202020103 -020205030800090808000902080009010800090208000901080009010801090108000902 -080009a808000100090a0100090501000904010009010100090801000906010009010100 -090c010009040100090a0100090101000904010009040100092101010908010009060100 -09010100090c010009040100090a01000901010009040100091b01010908010009020100 -090101000902010009010100090101010901010009020100090801000902010009010100 -090201000901010109010100090101000902010009010100090201000901010109010100 -096f0101090c01000905010009040100093d010007010001050a07010001050202020103 -0202050308000908080009050800090208000901080009020800090108000902080009a8 -0800010009080101090601000904010009010100090701000907010009010100090b0100 -09050100090a0100090101000905010009040101091f0101090701000907010009010100 -090b010009050100090a01000901010009050100091a0101090801000905010009020100 -090101000902010009010100090201000908010009050100090201000901010009050100 -0902010009010100090201000901010009730101090b01000905010009050100093d0100 -07010001050a070100010502020201030202050308000908080009050800090208000901 -0800090208000901080409a808000100090a010009050100090401000901010009080100 -0906010009010100090a010009060100090a010009010100090401000904010009210101 -090801000906010009010100090a010009060100090a01000901010009040100091b0101 -090801000905010009020100090101000902010009010104090901020902010409010100 -0906010009000100090201040901010009730101090a01000905010009060100093d0100 -07010001050a070100010502020201030202050308000908080009050800090208000901 -0800090208000901080009ac08000100090a010009050100090401000901010009090100 -09050100090101000909010009060100090b010009010100090301000905010009210101 -0909010009050100090101000909010009060100090b01000901010009030100091c0101 -090801000905010009020100090101000902010009010100091001000901010009050100 -0906010009000100090201000905010009730101090901000905010009060100093e0100 -07010001050a070100010502020201030202050308000908080009020800090108000902 -08000901080009010801090108000902080009a808000100090a01000905010009040100 -090101000903010109040100090401000901010009030101090201000907010009050101 -0903010009010100090201000906010009210101090a0100090401000901010009030101 -090201000907010009050101090301000901010009020100091d01010908010009020100 -090101000902010009010100090101010901010009020100090801000902010009010100 -090201000901010009070100090301000902010009010100097301010908010009050100 -09070100093e010007010001050a07010001050202020103020205030800090908020903 -080209030801090008000902080209a908000100090a0100090301040903010109040101 -090501000904010109040101090201040903010009050101090401010902010009070100 -09210101090b010009040101090401010902010409030100090501010904010109020100 -091e01010909010209030102090301010900010009020102090a01020903010209020100 -09070100090401020902010009730101090801040901010409030100093e010007010001 -050a0701000105020202010302020503080009cb08000100090a01000914010009060100 -092a01000908010009210101090c0100092a0100091f0101092301050999010109580100 -07010001050a0701000105020202010302020503080009cb08000100090b010109100101 -093b0101092201010959010109c301010958010007010001050a07010001050202020103 -02020503080009cb08000100098101010959010109c301010958010007010001050a0701 -000105020202010302020503080009cb08000100098101010959010109c3010109580100 -07010001050a0701000105020202010302020503080009cb080001000981010109590101 -09c301010958010007010001050a0701000105020202010302020503080009cb08000100 -098101010959010109c301010958010007010001050a0701000105020202010302020503 -080009cb08000100098101010959010109c301010958010007010001050a070100010502 -020201030202050308cd01ff01ff010007010001050a0701000105020202010302020503 -08cd01ff01ff010007010001050a0701000105020202010302020503080009cb08000100 -098101010959010109c301010958010007010001050a0701000105020202010302020503 -080009cb08000100090b0101094e0101092201010959010109c301010958010007010001 -050a0701000105020202010302020503080009cb08000100090a0100091c0100092a0100 -0908010009210101090c0100092a0100091f010109c301010958010007010001050a0701 -0001050202020103020205030800091a080009af08000100090a01000905010009050100 -090d010009040101090a010209020104090a0101090201000907010009210101090b0100 -09040101090a010209020104090a010109020100091e0101091a010009a7010109090102 -090301020944010007010001050a07010001050202020103020205030800091a080009af -08000100090a01000904010109040101090c010009040100090101000908010009020100 -09010100090201000909010009010100090201000906010009210101090a010009040100 -0901010009080100090201000901010009020100090901000901010009020100091d0101 -091a010009a70101090801000902010009010100090201000943010007010001050a0701 -000105020202010302020503080009090802090308020903080109000800090208020909 -0800090008010903080209020801090008000903080209030802097f08000100090a0100 -09030100090001000903010009000100090b01000905010009010100090c010009050100 -0909010009010100090301000905010009210101090901000905010009010100090c0100 -09050100090901000901010009030100091c010109090102090301020903010109000100 -09020102090a010209030102090201000900010109020100090201000902010209020100 -0900010109700101090c0100090501000943010007010001050a07010001050202020103 -020205030800090808000902080009010800090208000901080009010801090108000902 -080009080801090108000901080009020800090108000900080009000800090108000902 -08000901080009020800097e08000100090a01000905010009050100090a010009060100 -09010100090c010009040100090a01000901010009040100090401000921010109080100 -0906010009010100090c010009040100090a01000901010009040100091b010109080100 -090201000901010009020100090101000901010109010100090201000908010009020100 -090101000902010009010101090101000901010009020100090101000902010009010101 -09010100096f0101090c0100090501000943010007010001050a07010001050202020103 -020205030800090808000905080009020800090108000902080009010800090208000908 -080009020800090508000901080009000800090008000901080009020800090108000982 -08000100090801010906010009050100090901000907010009010100090b010009050100 -090a0100090101000905010009040101091f0101090701000907010009010100090b0100 -09050100090a01000901010009050100091a010109080100090501000902010009010100 -090201000901010009020100090801000905010009020100090101000905010009020100 -09010100090201000901010009730101090a0101090401010944010007010001050a0701 -000105020202010302020503080009080800090508000902080009010800090208000901 -08040908080009020800090208030901080009000800090008000901080409020802097f -08000100090a01000905010009050100090a01000906010009010100090a010009060100 -090a010009010100090401000904010009210101090801000906010009010100090a0100 -09060100090a01000901010009040100091b010109080100090501000902010009010100 -090201000901010409090102090201040901010009060100090001000902010409010100 -09730101090c0100090501000943010007010001050a0701000105020202010302020503 -0800090808000905080009020800090108000902080009010800090c0800090208000901 -0800090208000901080009000800090008000901080009090800097e08000100090a0100 -0905010009050100090b010009050100090101000909010009060100090b010009010100 -0903010009050100092101010909010009050100090101000909010009060100090b0100 -0901010009030100091c0101090801000905010009020100090101000902010009010100 -0910010009010100090501000906010009000100090201000905010009730101090c0100 -090501000943010007010001050a07010001050202020103020205030800090808000902 -080009010800090208000901080009010801090108000902080009080800090208000901 -08000902080009010800090008000900080009010800090208000901080009020800097e -08000100090a010009050100090501000905010109040100090401000901010009030101 -0902010009070100090501010903010009010100090201000906010009210101090a0100 -090401000901010009030101090201000907010009050101090301000901010009020100 -091d01010908010009020100090101000902010009010100090101010901010009020100 -090801000902010009010100090201000901010009070100090301000902010009010100 -09730101090801000902010009010100090201000943010007010001050a070100010502 -020201030202050308000909080209030802090308010900080009020802090908000902 -0800090208030901080009000800090008000902080209030802097f08000100090a0100 -090301040901010409030101090501000904010109040101090201040903010009050101 -09040101090201000907010009210101090b010009040101090401010902010409030100 -090501010904010109020100091e01010909010209030102090301010900010009020102 -090a01020903010209020100090701000904010209020100097301010909010209030102 -0944010007010001050a070100010502020201030202050308000923080509a108000100 -090a01000914010009060100092a01000908010009210101090c0100092a0100091f0101 -09230105099901010958010007010001050a0701000105020202010302020503080009cb -08000100090b010109100101093b0101092201010959010109c301010958010007010001 -050a0701000105020202010302020503080009cb08000100098101010959010109c30101 -0958010007010001050a0701000105020202010302020503080009cb0800010009810101 -0959010109c301010958010007010001050a0701000105020202010302020503080009cb -08000100098101010959010109c301010958010007010001050a07010001050202020103 -02020503080009cb08000100098101010959010109c301010958010007010001050a0701 -000105020202010302020503080009cb08000100098101010959010109c3010109580100 -07010001050a070100010502020201030202050308cd01ff01ff010007010001050a0701 -00010502020201030202050308cd01ff01ff010007010001050a07010001050202020103 -02020503080009cb08000100098101010959010109c301010958010007010001050a0701 -000105020202010302020503080009cb08000100090b0101094701010929010109590101 -09c301010958010007010001050a0701000105020202010302020503080009cb08000100 -090a010009150100092a01000908010009280101090c0100092a0100091f010109c30101 -0958010007010001050a07010001050202020103020205030800091d08000908080009a2 -08000100090a010009040102090c010009040101090b010009030104090a010109020100 -0907010009280101090b010009040101090b010009030104090a010109020100091e0101 -09180100090a01000922010209770101090a0100094c010007010001050a070100010502 -02020103020205030800091d080009ac08000100090a01000903010009020100090a0100 -090401000901010009090101090301000902010009090100090101000902010009060100 -09280101090a010009040100090101000909010109030100090201000909010009010100 -09020100091d010109180100090a0100092401000977010109090101094c010007010001 -050a07010001050202020103020205030800090908020903080209030802090208000901 -0800090308020903080209030802099408000100090a0100090301000902010009090100 -090501000901010009080100090001000907010009090100090101000903010009050100 -092801010909010009050100090101000908010009000100090701000909010009010100 -09030100091c010109080100090001010903010209020104090801000901010009030102 -090201000900010109020100090001010903010209050100097701010908010009000100 -094c010007010001050a0701000105020202010302020503080009080800090208000901 -080009020800090108000902080009010800090008000906080009020800090208000901 -080009020800099308000100090a01000903010009020100090801000906010009010100 -090a010009060100090a0100090101000904010009040100092801010908010009060100 -09010100090a010009060100090a01000901010009040100091b01010908010109010100 -090101000902010009030100090a01000900010009030100090201000901010109010100 -090101010901010009010100090201000904010009770101090a0100094c010007010001 -050a07010001050202020103020205030800090808000905080009020800090108000902 -080009010801090708000902080009020800090108000997080001000908010109050102 -090801000907010009010100090a010009060100090a0100090101000905010009040101 -09260101090701000907010009010100090a010009060100090a01000901010009050100 -091a01010908010009020100090101000902010009030100090a01010904010009020100 -09010100090501000902010009010100090201000904010009770101090a0100094c0100 -07010001050a070100010502020201030202050308000908080009050800090208000901 -08000902080009010801090708000902080409020802099408000100090a010009030100 -09020100090801000906010009010100090a010009060100090a01000901010009040100 -0904010009280101090801000906010009010100090a010009060100090a010009010100 -09040100091b010109080100090201000901010409030100090a01010904010409010100 -0905010009020100090101040904010009770101090a0100094c010007010001050a0701 -000105020202010302020503080009080800090508000902080009010800090208000901 -080009000800090608000902080009090800099308000100090a01000903010009020100 -090901000905010009010100090a010009050100090b0100090101000903010009050100 -09280101090901000905010009010100090a010009050100090b01000901010009030100 -091c010109080100090201000901010009070100090a0100090001000903010009050100 -0905010009020100090101000908010009770101090a0100094c010007010001050a0701 -000105020202010302020503080009080800090208000901080009020800090108000902 -080009010800090108000905080009020800090208000901080009020800099308000100 -090a01000903010009020100090301010904010009040100090101000903010109040100 -09050100090501010903010009010100090201000906010009280101090a010009040100 -0901010009030101090401000905010009050101090301000901010009020100091d0101 -0908010009020100090101000902010009030100090a0100090101000902010009020100 -09010100090501000902010009010100090201000904010009770101090a0100094c0100 -07010001050a070100010502020201030202050308000909080209030802090308020902 -080009020800090408000903080209030802099408000100090a01000904010209040101 -090501000904010109040101090201040903010009050101090401010902010009070100 -09280101090b010009040101090401010902010409030100090501010904010109020100 -091e01010908010009020100090201020905010109080100090201000902010209020100 -090501000902010009020102090501000977010109080104094a010007010001050a0701 -000105020202010302020503080009cb08000100090a0100090d010009060100092a0100 -0908010009280101090c0100092a0100091f0101091c010509a001010958010007010001 -050a0701000105020202010302020503080009cb08000100090b010109090101093b0101 -092901010959010109c301010958010007010001050a0701000105020202010302020503 -080009cb08000100098101010959010109c301010958010007010001050a070100010502 -0202010302020503080009cb08000100098101010959010109c301010958010007010001 -050a0701000105020202010302020503080009cb08000100098101010959010109c30101 -0958010007010001050a0701000105020202010302020503080009cb0800010009810101 -0959010109c301010958010007010001050a0701000105020202010302020503080009cb -08000100098101010959010109c301010958010007010001050a07010001050202020103 -0202050308cd01ff01ff010007010001050a070100010502020201030202050301ff01ff -01ce07010001050a0701000105020202010302020503010000cb01010081010100590101 -00c301010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb010100810101000c0100002a0100001f010100c301010058010007010001050a0701 -00010502020201030202050301000010010200090100000d0102000a010200100100007b -010100810101000b010000040101000b010000050100000c010100020100001e01010010 -010200090100000d010200930101000a0101004b010007010001050a0701000105020202 -01030202050301000012010000090100000f0100000c010000100100007b010100810101 -000a010000040100000101000009010100040101000b01000001010000020100001d0101 -0012010000090100000f0100009301010009010000010100004a010007010001050a0701 -000105020202010302020503010000090101000001000004010000030102000201000000 -01010003010200050100000c010000030102000301020002010000010100000301020071 -01010081010100090100000501000001010000080100000001000003010000000100000b -01000001010000030100001c010100090101000001000004010000030102000201000000 -01010003010200050100000901000000010100030102000201010000010000030102000a -01020003010200020100000001010002010000020100000201020002010000000101003f -01010009010000010100004a010007010001050a07010001050202020103020205030100 -000801000001010100040100000201000002010000010101000101000001010000020100 -00040100000c010000020100000201000001010000020100000101000000010000030100 -000201000070010100810101000801000006010000010100000a010000050100000b0100 -0001010000040100001b0101000801000001010100040100000201000002010000010101 -000101000001010000020100000401000009010100010100000101000002010000010100 -000001000000010000010100000201000008010000020100000101000002010000010101 -00010100000101000002010000010100000201000001010100010100003e010100090100 -00010100004a010007010001050a07010001050202020103020205030100000801000002 -010000040100000201000002010000010100000201000005010000040100000c01000002 -010000020100000101000005010100040100007401010081010100070100000701000001 -0100000a010000050100000b01000001010000050100001a010100080100000201000004 -010000020100000201000001010000020100000501000004010000090100000201000005 -010000010100000001000000010000010100000201000008010000050100000201000001 -01000005010000020100000101000002010000010100004201010009010000010100004a -010007010001050a07010001050202020103020205030100000801000002010000040100 -000201000002010000010100000201000002010300040100000c01000002010000020100 -0001010000050101000501020071010100810101000801000006010000010100000a0100 -00050100000b01000001010000040100001b010100080100000201000004010000020100 -000201000001010000020100000201030004010000090100000201000002010300010100 -000001000000010000010104000901020002010400010100000601000000010000020104 -00010100004201010009010000010100004a010007010001050a07010001050202020103 -020205030100000801000002010000040100000201000002010000010100000201000001 -01000002010000040100000c010000020100000201000001010000050100000001000007 -01000070010100810101000901000005010000010100000a010000050100000b01000001 -010000030100001c01010008010000020100000401000002010000020100000101000002 -010000010100000201000004010000090100000201000001010000020100000101000000 -010000000100000101000010010000010100000501000006010000000100000201000005 -0100004201010009010000010100004a010007010001050a070100010502020201030202 -050301000008010000010101000401000002010000020100000101010001010000010100 -0002010000040100000c0100000201000002010000010100000201000001010000010100 -00020100000201000070010100810101000a010000040100000101000003010100040100 -0005010000050101000301000001010000020100001d0101000801000001010100040100 -000201000002010000010101000101000001010000020100000401000009010000020100 -000101000002010000010100000001000000010000010100000201000008010000020100 -000101000002010000010100000701000003010000020100000101000042010100090100 -00010100004a010007010001050a07010001050202020103020205030100000901010000 -0100000401000003010200020100000001010003010300040100000c0100000301020003 -01020002010000020100000201020071010100810101000b010000040101000401010002 -010400010104000301010004010100020100001e01010009010100000100000401000003 -010200020100000001010003010300040100000901000002010000020103000101000000 -01000000010000020102000a010200030102000201000007010000040102000201000042 -0101000a0101004b010007010001050a07010001050202020103020205030100000c0100 -002301050093010100810101000c0100002a0100001f0101000c010000230105001c0105 -006801010058010007010001050a07010001050202020103020205030100000801000002 -010000bd01010081010100590101000801000002010000b501010058010007010001050a -070100010502020201030202050301000009010200be0101008101010059010100090102 -00b601010058010007010001050a0701000105020202010302020503010000cb01010081 -01010059010100c301010058010007010001050a07010001050202020103020205030100 -00cb0101008101010059010100c301010058010007010001050a07010001050202020103 -02020503010000cb0101008101010059010100c301010058010007010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a070100010502020201030202050301ff01ff01ce07010001050a0701000105020202 -01030202050301ff01ff01ce07010001050a0701000105020202010302020503010000cb -0101008101010059010100c301010058010007010001050a070100010502020201030202 -0503010000cb0101008101010059010100c301010058010007010001050a070100010502 -0202010302020503010000cb010100810101000c0100002a0100001f010100c301010058 -010007010001050a070100010502020201030202050301000010010200090100000d0102 -009b010100810101000b010000040101000b010000050100000c010100020100001e0101 -0010010200090100000d010200930101000a0101004b010007010001050a070100010502 -020201030202050301000012010000090100000f0100009b010100810101000a01000004 -0100000101000009010100040101000b01000001010000020100001d0101001201000009 -0100000f0100009301010009010000010100004a010007010001050a0701000105020202 -010302020503010000090101000001000004010000030102000201000000010100030102 -000501000009010000000101000301020002010100000100000301020003010200710101 -0081010100090100000501000001010000080100000001000003010000000100000b0100 -0001010000030100001c0101000901010000010000040100000301020002010000000101 -0003010200050100000901000000010100030102000201010000010000030102000a0102 -0003010200020100000001010002010000020100000201020002010000000101003f0101 -0009010000010100004a010007010001050a070100010502020201030202050301000008 -010000010101000401000002010000020100000101010001010000010100000201000004 -010000090101000101000001010000020100000101000000010000000100000101000002 -010000010100000201000070010100810101000801000006010000010100000a01000005 -0100000b01000001010000040100001b0101000801000001010100040100000201000002 -010000010101000101000001010000020100000401000009010100010100000101000002 -010000010100000001000000010000010100000201000008010000020100000101000002 -01000001010100010100000101000002010000010100000201000001010100010100003e -01010009010000010100004a010007010001050a07010001050202020103020205030100 -000801000002010000040100000201000002010000010100000201000005010000040100 -000901000002010000050100000101000000010000000100000101000002010000010100 -0074010100810101000701000007010000010100000a010000050100000b010000010100 -00050100001a010100080100000201000004010000020100000201000001010000020100 -000501000004010000090100000201000005010000010100000001000000010000010100 -000201000008010000050100000201000001010000050100000201000001010000020100 -00010100004201010009010000010100004a010007010001050a07010001050202020103 -020205030100000801000002010000040100000201000002010000010100000201000002 -010300040100000901000002010000020103000101000000010000000100000101040002 -01020071010100810101000801000006010000010100000a010000050100000b01000001 -010000040100001b01010008010000020100000401000002010000020100000101000002 -010000020103000401000009010000020100000201030001010000000100000001000001 -010400090102000201040001010000060100000001000002010400010100004201010009 -010000010100004a010007010001050a0701000105020202010302020503010000080100 -000201000004010000020100000201000001010000020100000101000002010000040100 -000901000002010000010100000201000001010000000100000001000001010000090100 -0070010100810101000901000005010000010100000a010000050100000b010000010100 -00030100001c010100080100000201000004010000020100000201000001010000020100 -000101000002010000040100000901000002010000010100000201000001010000000100 -000001000001010000100100000101000005010000060100000001000002010000050100 -004201010009010000010100004a010007010001050a0701000105020202010302020503 -010000080100000101010004010000020100000201000001010100010100000101000002 -010000040100000901000002010000010100000201000001010000000100000001000001 -01000002010000010100000201000070010100810101000a010000040100000101000003 -0101000401000005010000050101000301000001010000020100001d0101000801000001 -010100040100000201000002010000010101000101000001010000020100000401000009 -010000020100000101000002010000010100000001000000010000010100000201000008 -010000020100000101000002010000010100000701000003010000020100000101000042 -01010009010000010100004a010007010001050a07010001050202020103020205030100 -000901010000010000040100000301020002010000000101000301030004010000090100 -000201000002010300010100000001000000010000020102000301020071010100810101 -000b010000040101000401010002010400010104000301010004010100020100001e0101 -000901010000010000040100000301020002010000000101000301030004010000090100 -000201000002010300010100000001000000010000020102000a01020003010200020100 -00070100000401020002010000420101000a0101004b010007010001050a070100010502 -02020103020205030100000c0100002301050093010100810101000c0100002a0100001f -0101000c010000230105001c0105006801010058010007010001050a0701000105020202 -0103020205030100000801000002010000bd010100810101005901010008010000020100 -00b501010058010007010001050a070100010502020201030202050301000009010200be -010100810101005901010009010200b601010058010007010001050a0701000105020202 -010302020503010000cb0101008101010059010100c301010058010007010001050a0701 -000105020202010302020503010000cb0101008101010059010100c30101005801000701 -0001050a0701000105020202010302020503010000cb0101008101010059010100c30101 -0058010007010001050a0701000105020202010302020503010000cb0101008101010059 -010100c301010058010007010001050a070100010502020201030202050301ff01ff01ce -07010001050a070100010502020201030202050301ff01ff01ce07010001050a07010001 -05020202010302020503010000cb0101008101010059010100c301010058010007010001 -050a0701000105020202010302020503010000cb0101008101010059010100c301010058 -010007010001050a0701000105020202010302020503010000cb010100810101000c0100 -002a0100001f010100c301010058010007010001050a0701000105020202010302020503 -01000010010200090100000d0102004301000056010100810101000b010000040101000b -010000050100000c010100020100001e01010010010200090100000d010200930101000a -0101004b010007010001050a070100010502020201030202050301000012010000090100 -000f0100004301000056010100810101000a010000040100000101000009010100040101 -000b01000001010000020100001d01010012010000090100000f01000093010100090100 -00010100004a010007010001050a07010001050202020103020205030100000901010000 -010000040100000301020002010000000101000301020005010000090100000001010003 -010200020101000001000003010200030102000a01020002010000020100000101040054 -01010081010100090100000501000001010000080100000001000003010000000100000b -01000001010000030100001c010100090101000001000004010000030102000201000000 -01010003010200050100000901000000010100030102000201010000010000030102000a -01020003010200020100000001010002010000020100000201020002010000000101003f -01010009010000010100004a010007010001050a07010001050202020103020205030100 -000801000001010100040100000201000002010000010101000101000001010000020100 -000401000009010100010100000101000002010000010100000001000000010000010100 -000201000001010000020100000801000002010000010100000201000003010000560101 -00810101000801000006010000010100000a010000050100000b01000001010000040100 -001b01010008010000010101000401000002010000020100000101010001010000010100 -000201000004010000090101000101000001010000020100000101000000010000000100 -000101000002010000080100000201000001010000020100000101010001010000010100 -0002010000010100000201000001010100010100003e01010009010000010100004a0100 -07010001050a070100010502020201030202050301000008010000020100000401000002 -010000020100000101000002010000050100000401000009010000020100000501000001 -01000000010000000100000101000002010000010100000c010000020100000201000000 -0100000401000056010100810101000701000007010000010100000a010000050100000b -01000001010000050100001a010100080100000201000004010000020100000201000001 -010000020100000501000004010000090100000201000005010000010100000001000000 -010000010100000201000008010000050100000201000001010000050100000201000001 -01000002010000010100004201010009010000010100004a010007010001050a07010001 -050202020103020205030100000801000002010000040100000201000002010000010100 -000201000002010300040100000901000002010000020103000101000000010000000100 -000101040002010200090104000301000005010000560101008101010008010000060100 -00010100000a010000050100000b01000001010000040100001b01010008010000020100 -000401000002010000020100000101000002010000020103000401000009010000020100 -000201030001010000000100000001000001010400090102000201040001010000060100 -000001000002010400010100004201010009010000010100004a010007010001050a0701 -000105020202010302020503010000080100000201000004010000020100000201000001 -010000020100000101000002010000040100000901000002010000010100000201000001 -010000000100000001000001010000090100000801000006010000000100000401000056 -010100810101000901000005010000010100000a010000050100000b0100000101000003 -0100001c0101000801000002010000040100000201000002010000010100000201000001 -010000020100000401000009010000020100000101000002010000010100000001000000 -010000010100001001000001010000050100000601000000010000020100000501000042 -01010009010000010100004a010007010001050a07010001050202020103020205030100 -000801000001010100040100000201000002010000010101000101000001010000020100 -000401000009010000020100000101000002010000010100000001000000010000010100 -000201000001010000020100000801000002010000010100000201000003010000560101 -00810101000a010000040100000101000003010100040100000501000005010100030100 -0001010000020100001d0101000801000001010100040100000201000002010000010101 -000101000001010000020100000401000009010000020100000101000002010000010100 -000001000000010000010100000201000008010000020100000101000002010000010100 -00070100000301000002010000010100004201010009010000010100004a010007010001 -050a07010001050202020103020205030100000901010000010000040100000301020002 -010000000101000301030004010000090100000201000002010300010100000001000000 -01000002010200030102000a01020002010000020100000401010054010100810101000b -010000040101000401010002010400010104000301010004010100020100001e01010009 -010100000100000401000003010200020100000001010003010300040100000901000002 -01000002010300010100000001000000010000020102000a010200030102000201000007 -0100000401020002010000420101000a0101004b010007010001050a0701000105020202 -0103020205030100000c010000230105002301050069010100810101000c0100002a0100 -001f0101000c010000230105001c0105006801010058010007010001050a070100010502 -02020103020205030100000801000002010000bd01010081010100590101000801000002 -010000b501010058010007010001050a0701000105020202010302020503010000090102 -00be010100810101005901010009010200b601010058010007010001050a070100010502 -0202010302020503010000cb0101008101010059010100c301010058010007010001050a -0701000105020202010302020503010000cb0101008101010059010100c3010100580100 -07010001050a0701000105020202010302020503010000cb0101008101010059010100c3 -01010058010007010001050a0701000105020202010302020503010000cb010100810101 -0059010100c301010058010007010001050a070100010502020201030202050301ff01ff -01ce07010001050a070100010502020201030202050308cd01ff01ff010007010001050a -0701000105020202010302020503080000cb08000100008101010059010100c301010058 -010007010001050a0701000105020202010302020503080000cb08000100000b0101004e -0101002201010059010100c301010058010007010001050a070100010502020201030202 -0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a -0100001f010100c301010058010007010001050a07010001050202020103020205030800 -00cb08000100000a01000005010000040102000c010000040101000d010000020102000b -0101000201000007010000210101000b010000040101000d010000020102000b01010002 -0100001e0101002001010018010000150100006f01010009010200020104004301000701 -0001050a0701000105020202010302020503080000cb08000100000a0100000401010003 -010000020100000a01000004010000010100000b01010001010000020100000901000001 -0100000201000006010000210101000a01000004010000010100000b0101000101000002 -0100000901000001010000020100001d0101001f0100001a010000150100006f01010008 -010000020100000101000047010007010001050a07010001050202020103020205030800 -000908010000080000020802000908000000080100030802000208010000080000030802 -00030802008d08000100000a010000030100000001000007010000090100000501000001 -0100000a0100000001000005010000090100000101000003010000050100002101010009 -01000005010000010100000a01000000010000050100000901000001010000030100001c -0101000901010000010000020102000b0100000301000000010100030102000201000000 -0101000201040002010200020100000001010003010100000100006f0101000801000002 -0100000101000047010007010001050a0701000105020202010302020503080000080800 -000108010001080000020800000808010001080000010800000208000001080000000800 -0000080000010800000208000001080000020800008c08000100000a0100000501000007 -010000080100000601000001010000090100000101000005010000090100000101000004 -010000040100002101010008010000060100000101000009010000010100000501000009 -01000001010000040100001b010100080100000101010001010000020100000801040001 -010100010100000101000002010000010101000101000003010000030100000201000001 -0101000101000001010000010101006f0101000801000002010000010103004401000701 -0001050a07010001050202020103020205030800000808000002080000010800000c0800 -000208000005080000010800000008000000080000010800000208000001080000900800 -010000080101000601000006010000080100000701000001010000080100000201000003 -0101000a0100000101000005010000040101001f01010007010000070100000101000008 -01000002010000030101000a01000001010000050100001a010100080100000201000001 -0100000e0100000301000005010000020100000101000002010000030100000301000002 -010000010100000201000001010000020100006f01010009010200060100004301000701 -0001050a0701000105020202010302020503080000080800000208000002080200090800 -00020800000208030001080000000800000008000001080400020802008d08000100000a -01000005010000050100000a010000060100000101000008010000020100000501000009 -010000010100000401000004010000210101000801000006010000010100000801000002 -010000050100000901000001010000040100001b0101000801000002010000020102000b -010000030100000501000002010000010100000201000003010000030104000101000002 -01000001010000020100006f01010008010000020100000501000043010007010001050a -070100010502020201030202050308000008080000020800000508000008080000020800 -00010800000208000001080000000800000008000001080000090800008c08000100000a -01000005010000040100000c010000050100000101000008010500040100000901000001 -010000030100000501000021010100090100000501000001010000080105000401000009 -01000001010000030100001c0101000801000002010000050100000a0100000301000005 -010000020100000101000002010000030100000301000005010000020100000101000002 -0100006f0101000801000002010000010100000201000043010007010001050a07010001 -050202020103020205030800000808000001080100010800000208000008080000020800 -000108000002080000010800000008000000080000010800000208000001080000020800 -008c08000100000a01000005010000030100000701010004010000040100000101000003 -010100060100000101000002010000030101000301000001010000020100000601000021 -0101000a0100000401000001010000030101000601000001010000020100000301010003 -01000001010000020100001d010100080100000101010001010000020100000a01000003 -010000050100000201000001010000020100000301000003010000020100000101000002 -01000001010000010101006f010100080100000201000001010000020100004301000701 -0001050a0701000105020202010302020503080000090801000008000002080200090800 -00020800000208030001080000000800000008000002080200030802008d08000100000a -010000030104000101040003010100050100000401010004010100060100000201020004 -010100040101000201000007010000210101000b01000004010100040101000601000002 -0102000401010004010100020100001e0101000901010000010000020102000b01000003 -010000060102000201000002010000040101000201020002010000020100000201010000 -0100006f010100090102000301020044010007010001050a070100010502020201030202 -05030800000c08000007080500af08000100000a01000014010000060100002a01000008 -010000210101000c0100002a0100001f0101000c01000007010500a70101005801000701 -0001050a07010001050202020103020205030800000808000002080000bd08000100000b -010100100101003b01010022010100590101000801000002010000b50101005801000701 -0001050a070100010502020201030202050308000009080200be08000100008101010059 -01010009010200b601010058010007010001050a07010001050202020103020205030800 -00cb08000100008101010059010100c301010058010007010001050a0701000105020202 -010302020503080000cb08000100008101010059010100c301010058010007010001050a -0701000105020202010302020503080000cb08000100008101010059010100c301010058 -010007010001050a0701000105020202010302020503080000cb08000100008101010059 -010100c301010058010007010001050a070100010502020201030202050308cd01ff01ff -010007010001050a070100010502020201030202050308cd01ff01ff010007010001050a -0701000105020202010302020503080000cb08000100008101010059010100c301010058 -010007010001050a0701000105020202010302020503080000cb08000100000b0101004e -0101002201010059010100c301010058010007010001050a070100010502020201030202 -0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a -0100001f010100c301010058010007010001050a07010001050202020103020205030800 -00110800000308000010080000010800009e08000100000a01000005010000040102000c -010000040101000d010000050100000a0101000201000007010000210101000b01000004 -0101000d010000050100000a010100020100001e010100c30101000a0100000401020044 -010007010001050a07010001050202020103020205030800001108000003080000100800 -00010800009e08000100000a0100000401010003010000020100000a0100000401000001 -0100000b0101000401010009010000010100000201000006010000210101000a01000004 -010000010100000b010100040101000901000001010000020100001d010100c301010009 -010100030100000201000043010007010001050a07010001050202020103020205030800 -0009080100000800000108040001080000010800000a0801000008000001080000000801 -009b08000100000a0100000301000000010000070100000901000005010000010100000a -010000000100000301000000010000090100000101000003010000050100002101010009 -01000005010000010100000a010000000100000301000000010000090100000101000003 -0100001c010100c30101000801000000010000030100000201000043010007010001050a -070100010502020201030202050308000008080000010801000308000003080000000800 -000a0800000108010001080100010800009a08000100000a010000050100000701000008 -010000060100000101000009010000010100000201000001010000090100000101000004 -010000040100002101010008010000060100000101000009010000010100000201000001 -0100000901000001010000040100001b010100c30101000a010000030100000201000043 -010007010001050a07010001050202020103020205030800000808000002080000030800 -00030801000b0800000208000001080000020800009a0800010000080101000601000005 -010100080100000701000001010000080100000201000001010000020100000901000001 -01000005010000040101001f010100070100000701000001010000080100000201000001 -010000020100000901000001010000050100001a010100c30101000a0100000401030043 -010007010001050a07010001050202020103020205030800000808000002080000030800 -00030801000b0800000208000001080000020800009a08000100000a0100000501000007 -010000080100000601000001010000080100000201000001010000020100000901000001 -010000040100000401000021010100080100000601000001010000080100000201000001 -010000020100000901000001010000040100001b010100c30101000a0100000701000043 -010007010001050a07010001050202020103020205030800000808000002080000030800 -0003080000000800000a0800000208000001080000020800009a08000100000a01000005 -010000070100000901000005010000010100000801050000010500080100000101000003 -010000050100002101010009010000050100000101000008010500000105000801000001 -010000030100001c010100c30101000a0100000701000043010007010001050a07010001 -050202020103020205030800000808000001080100030800000308000001080000090800 -000108010001080100010800009a08000100000a01000005010000030100000201000003 -010100040100000401000001010000030101000601000005010000030101000301000001 -0100000201000006010000210101000a0100000401000001010000030101000601000005 -010000030101000301000001010000020100001d010100c30101000a0100000301000002 -01000043010007010001050a070100010502020201030202050308000009080100000800 -00040801000108000002080000090801000008000001080000000801009b08000100000a -010000030104000201020004010100050100000401010004010100060100000501000003 -010100040101000201000007010000210101000b01000004010100040101000601000005 -0100000301010004010100020100001e010100c301010008010400020102004401000701 -0001050a07010001050202020103020205030800000c0800000e080500a808000100000a -01000014010000060100002a01000008010000210101000c0100002a0100001f010100c3 -01010058010007010001050a070100010502020201030202050308000008080000020800 -00bd08000100000b010100100101003b0101002201010059010100c30101005801000701 -0001050a070100010502020201030202050308000009080200be08000100008101010059 -010100c301010058010007010001070c000105020202010302020503080000cb08000100 -008101010059010100c301010058010007010000070d0001050202020103020205030800 -00cb08000100008101010059010100c30101005801000701030e00010502020201030202 -0503080000cb08000100008101010059010100c30101005801000701030e000105020202 -010302020503080000cb08000100008101010059010100c30101005801000701030e0001 -0502020201030202050308cd01ff01ff01000701030e00010502020201030202050308cd -01ff01ff01000701030e000105020202010302020503080000cb08000100008101010059 -010100c30101005801000701030e000105020202010302020503080000cb08000100000b -0101004e0101002201010059010100c30101005801000701030e00010502020201030202 -0503080000cb08000100000a0100001c0100002a01000008010000210101000c0100002a -0100001f010100c30101005801000701030e000105020202010302020503080000110800 -000308000010080000010800009e08000100000a01000005010000070100000b01000004 -0101000d010000050100000a0101000201000007010000210101000b010000040101000d -010000050100000a010100020100001e010100c301010008010400020102004401000701 -030e000105020202010302020503080000110800000308000010080000010800009e0800 -0100000a01000004010100060101000a01000004010000010100000b0101000401010009 -010000010100000201000006010000210101000a01000004010000010100000b01010004 -0101000901000001010000020100001d010100c301010008010000050100000201000043 -01000701030e000105020202010302020503080000090801000008000001080400010800 -00010800000a0801000008000001080000000801009b08000100000a0100000301000000 -01000005010000000100000901000005010000010100000a010000000100000301000000 -01000009010000010100000301000005010000210101000901000005010000010100000a -0100000001000003010000000100000901000001010000030100001c010100c301010008 -01000005010000020100004301000701030e000105020202010302020503080000080800 -00010801000308000003080000000800000a0800000108010001080100010800009a0800 -0100000a0100000501000004010000010100000801000006010000010100000901000001 -010000020100000101000009010000010100000401000004010000210101000801000006 -01000001010000090100000101000002010000010100000901000001010000040100001b -010100c30101000801030002010000020100004301000701030e00010502020201030202 -0503080000080800000208000003080000030801000b0800000208000001080000020800 -009a08000100000801010006010000030100000201000007010000070100000101000008 -010000020100000101000002010000090100000101000005010000040101001f01010007 -010000070100000101000008010000020100000101000002010000090100000101000005 -0100001a010100c30101000c010000020102004401000701030e00010502020201030202 -0503080000080800000208000003080000030801000b0800000208000001080000020800 -009a08000100000a01000005010000030100000201000008010000060100000101000008 -010000020100000101000002010000090100000101000004010000040100002101010008 -010000060100000101000008010000020100000101000002010000090100000101000004 -0100001b010100c30101000c01000001010000020100004301000701030e000105020202 -01030202050308000008080000020800000308000003080000000800000a080000020800 -0001080000020800009a08000100000a0100000501000003010500080100000501000001 -010000080105000001050008010000010100000301000005010000210101000901000005 -0100000101000008010500000105000801000001010000030100001c010100c301010008 -0100000201000001010000020100004301000701030e0001050202020103020205030800 -000808000001080100030800000308000001080000090800000108010001080100010800 -009a08000100000a01000005010000070100000301010004010000040100000101000003 -01010006010000050100000301010003010000010100000201000006010000210101000a -010000040100000101000003010100060100000501000003010100030100000101000002 -0100001d010100c3010100080100000201000001010000020100004301000701030e0001 -050202020103020205030800000908010000080000040801000108000002080000090801 -000008000001080000000801009b08000100000a01000003010400050100000301010005 -010000040101000401010006010000050100000301010004010100020100000701000021 -0101000b010000040101000401010006010000050100000301010004010100020100001e -010100c301010009010200030102004401000701030e0001050202020103020205030800 -000c0800000e080500a808000100000a01000014010000060100002a0100000801000021 -0101000c0100002a0100001f010100c30101005801000701030e00010502020201030202 -05030800000808000002080000bd08000100000b010100100101003b0101002201010059 -010100c30101005801000701030e00010502020201030202050308000009080200be0800 -0100008101010059010100c30101005801000701030e0001050202020103020205030800 -00cb08000100008101010059010100c30101005801000701030e00010502020201030202 -0503080000cb08000100008101010059010100c30101005801000701030e000105020202 -010302020503080000cb08000100008101010059010100c30101005801000701030e0001 -05020202010302020503080000cb08000100008101010059010100c30101005801000701 -030e00010502020201030202050308cd01ff01ff01000701030e00010502020201030202 -050308cd01ff01ff01000701030e000105020202010302020503080000cb080001000081 -01010059010100c30101005801000701030e000105020202010302020503080000cb0800 -0100000b0101004e0101002201010059010100c30101005801000701030e000105020202 -010302020503080000cb08000100000a0100001c0100002a01000008010000210101000c -0100002a0100001f010100c30101005801000701030e0001050202020103020205030800 -00110800000308000010080000010800009e08000100000a01000005010000030104000b -010000040101000d010000050100000a0101000201000007010000210101000b01000004 -0101000d010000050100000a010100020100001e010100c3010100090102000301020044 -01000701030e000105020202010302020503080000110800000308000010080000010800 -009e08000100000a01000004010100030100000e01000004010000010100000b01010004 -01010009010000010100000201000006010000210101000a01000004010000010100000b -010100040101000901000001010000020100001d010100c3010100080100000201000001 -010000020100004301000701030e00010502020201030202050308000009080100000800 -000108040001080000010800000a0801000008000001080000000801009b08000100000a -0100000301000000010000030100000d01000005010000010100000a0100000001000003 -010000000100000901000001010000030100000501000021010100090100000501000001 -0100000a0100000001000003010000000100000901000001010000030100001c010100c3 -0101000c010000050100004301000701030e000105020202010302020503080000080800 -00010801000308000003080000000800000a0800000108010001080100010800009a0800 -0100000a0100000501000003010300090100000601000001010000090100000101000002 -010000010100000901000001010000040100000401000021010100080100000601000001 -010000090100000101000002010000010100000901000001010000040100001b010100c3 -0101000c010000050100004301000701030e000105020202010302020503080000080800 -000208000003080000030801000b0800000208000001080000020800009a080001000008 -010100060100000701000007010000070100000101000008010000020100000101000002 -010000090100000101000005010000040101001f01010007010000070100000101000008 -0100000201000001010000020100000901000001010000050100001a010100c30101000a -010100040101004401000701030e00010502020201030202050308000008080000020800 -0003080000030801000b0800000208000001080000020800009a08000100000a01000005 -010000070100000801000006010000010100000801000002010000010100000201000009 -010000010100000401000004010000210101000801000006010000010100000801000002 -01000001010000020100000901000001010000040100001b010100c30101000c01000005 -0100004301000701030e0001050202020103020205030800000808000002080000030800 -0003080000000800000a0800000208000001080000020800009a08000100000a01000005 -010000030100000201000009010000050100000101000008010500000105000801000001 -010000030100000501000021010100090100000501000001010000080105000001050008 -01000001010000030100001c010100c30101000c010000050100004301000701030e0001 -050202020103020205030800000808000001080100030800000308000001080000090800 -000108010001080100010800009a08000100000a01000005010000030100000201000003 -010100040100000401000001010000030101000601000005010000030101000301000001 -0100000201000006010000210101000a0100000401000001010000030101000601000005 -010000030101000301000001010000020100001d010100c3010100080100000201000001 -010000020100004301000701030e00010502020201030202050308000009080100000800 -00040801000108000002080000090801000008000001080000000801009b08000100000a -010000030104000201020004010100050100000401010004010100060100000501000003 -010100040101000201000007010000210101000b01000004010100040101000601000005 -0100000301010004010100020100001e010100c301010009010200030102004401000701 -030e0001050202020103020205030800000c0800000e080500a808000100000a01000014 -010000060100002a01000008010000210101000c0100002a0100001f010100c301010058 -01000701030e0001050202020103020205030800000808000002080000bd08000100000b -010100100101003b0101002201010059010100c30101005801000701030e000105020202 -01030202050308000009080200be08000100008101010059010100c30101005801000701 -030e000105020202010302020503080000cb08000100008101010059010100c301010058 -01000701030e000105020202010302020503080000cb08000100008101010059010100c3 -0101005801000701030e000105020202010302020503080000cb08000100008101010059 -010100c30101005801000701030e000105020202010302020503080000cb080001000081 -01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff -01000701030e00010502020201030202050308cd01ff01ff01000701030e000105020202 -010302020503080000cb08000100008101010059010100c30101005801000701030e0001 -05020202010302020503080000cb08000100000b0101004e0101002201010059010100c3 -0101005801000701030e000105020202010302020503080000cb08000100000a0100001c -0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701 -030e000105020202010302020503080000110800000308000010080000010800009e0800 -0100000a01000005010000040102000c010000040101000d010000050100000a01010002 -01000007010000210101000b010000040101000d010000050100000a010100020100001e -010100c30101000a0101004b01000701030e000105020202010302020503080000110800 -000308000010080000010800009e08000100000a0100000401010003010000020100000a -01000004010000010100000b010100040101000901000001010000020100000601000021 -0101000a01000004010000010100000b010100040101000901000001010000020100001d -010100c301010009010000010100004a01000701030e0001050202020103020205030800 -0009080100000800000108040001080000010800000a0801000008000001080000000801 -009b08000100000a0100000301000000010000030100000d01000005010000010100000a -010000000100000301000000010000090100000101000003010000050100002101010009 -01000005010000010100000a010000000100000301000000010000090100000101000003 -0100001c010100c301010009010000010100004a01000701030e00010502020201030202 -050308000008080000010801000308000003080000000800000a08000001080100010801 -00010800009a08000100000a01000005010000030100000c010000060100000101000009 -010000010100000201000001010000090100000101000004010000040100002101010008 -010000060100000101000009010000010100000201000001010000090100000101000004 -0100001b010100c301010009010000010100004a01000701030e00010502020201030202 -0503080000080800000208000003080000030801000b0800000208000001080000020800 -009a08000100000801010006010000030103000801000007010000010100000801000002 -0100000101000002010000090100000101000005010000040101001f0101000701000007 -01000001010000080100000201000001010000020100000901000001010000050100001a -010100c301010009010000010100004a01000701030e0001050202020103020205030800 -00080800000208000003080000030801000b0800000208000001080000020800009a0800 -0100000a0100000501000003010000020100000801000006010000010100000801000002 -010000010100000201000009010000010100000401000004010000210101000801000006 -01000001010000080100000201000001010000020100000901000001010000040100001b -010100c301010009010000010100004a01000701030e0001050202020103020205030800 -0008080000020800000308000003080000000800000a0800000208000001080000020800 -009a08000100000a01000005010000030100000201000009010000050100000101000008 -010500000105000801000001010000030100000501000021010100090100000501000001 -01000008010500000105000801000001010000030100001c010100c30101000901000001 -0100004a01000701030e0001050202020103020205030800000808000001080100030800 -000308000001080000090800000108010001080100010800009a08000100000a01000005 -010000030100000201000003010100040100000401000001010000030101000601000005 -0100000301010003010000010100000201000006010000210101000a0100000401000001 -010000030101000601000005010000030101000301000001010000020100001d010100c3 -01010009010000010100004a01000701030e000105020202010302020503080000090801 -0000080000040801000108000002080000090801000008000001080000000801009b0800 -0100000a0100000301040002010200040101000501000004010100040101000601000005 -01000003010100040101000201000007010000210101000b010000040101000401010006 -010000050100000301010004010100020100001e010100c30101000a0101004b01000701 -030e0001050202020103020205030800000c0800000e080500a808000100000a01000014 -010000060100002a01000008010000210101000c0100002a0100001f010100c301010058 -01000701030e0001050202020103020205030800000808000002080000bd08000100000b -010100100101003b0101002201010059010100c30101005801000701030e000105020202 -01030202050308000009080200be08000100008101010059010100c30101005801000701 -030e000105020202010302020503080000cb08000100008101010059010100c301010058 -01000701030e000105020202010302020503080000cb08000100008101010059010100c3 -0101005801000701030e000105020202010302020503080000cb08000100008101010059 -010100c30101005801000701030e000105020202010302020503080000cb080001000081 -01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff -01000701030e00010502020201030202050308cd01ff01ff01000701030e000105020202 -010302020503080000cb08000100008101010059010100c30101005801000701030e0001 -05020202010302020503080000cb08000100000b0101004e0101002201010059010100c3 -0101005801000701030e000105020202010302020503080000cb08000100000a0100001c -0100002a01000008010000210101000c0100002a0100001f010100c30101005801000701 -030e000105020202010302020503080000110800000308000010080000010800009e0800 -0100000a01000005010000030104000b010000040101000d010000050100000a01010002 -01000007010000210101000b010000040101000d010000050100000a010100020100001e -010100c30101000a01000003010400030101003d01000701030e00010502020201030202 -0503080000110800000308000010080000010800009e08000100000a0100000401010003 -010000020100000a01000004010000010100000b01010004010100090100000101000002 -01000006010000210101000a01000004010000010100000b010100040101000901000001 -010000020100001d010100c3010100090101000301000006010000010100003c01000701 -030e00010502020201030202050308000009080100000800000108040001080000010800 -000a0801000008000001080000000801009b08000100000a010000030100000001000007 -0100000901000005010000010100000a0100000001000003010000000100000901000001 -0100000301000005010000210101000901000005010000010100000a0100000001000003 -010000000100000901000001010000030100001c010100c3010100080100000001000003 -01000006010000010100003c01000701030e000105020202010302020503080000080800 -00010801000308000003080000000800000a0800000108010001080100010800009a0800 -0100000a0100000501000006010000090100000601000001010000090100000101000002 -010000010100000901000001010000040100000401000021010100080100000601000001 -010000090100000101000002010000010100000901000001010000040100001b010100c3 -0101000a0100000301030003010000010100003c01000701030e00010502020201030202 -0503080000080800000208000003080000030801000b0800000208000001080000020800 -009a08000100000801010006010000060100000801000007010000010100000801000002 -0100000101000002010000090100000101000005010000040101001f0101000701000007 -01000001010000080100000201000001010000020100000901000001010000050100001a -010100c30101000a0100000701000002010000010100003c01000701030e000105020202 -010302020503080000080800000208000003080000030801000b08000002080000010800 -00020800009a08000100000a010000050100000601000009010000060100000101000008 -010000020100000101000002010000090100000101000004010000040100002101010008 -010000060100000101000008010000020100000101000002010000090100000101000004 -0100001b010100c30101000a0100000701000002010000010100003c01000701030e0001 -0502020201030202050308000008080000020800000308000003080000000800000a0800 -000208000001080000020800009a08000100000a01000005010000050100000b01000005 -010000010100000801050000010500080100000101000003010000050100002101010009 -010000050100000101000008010500000105000801000001010000030100001c010100c3 -0101000a010000030100000201000002010000010100003c01000701030e000105020202 -010302020503080000080800000108010003080000030800000108000009080000010801 -0001080100010800009a08000100000a0100000501000005010000050101000401000004 -010000010100000301010006010000050100000301010003010000010100000201000006 -010000210101000a01000004010000010100000301010006010000050100000301010003 -01000001010000020100001d010100c30101000a01000003010000020100000201000001 -0100003c01000701030e0001050202020103020205030800000908010000080000040801 -000108000002080000090801000008000001080000000801009b08000100000a01000003 -010400030100000501010005010000040101000401010006010000050100000301010004 -0101000201000007010000210101000b0100000401010004010100060100000501000003 -01010004010100020100001e010100c30101000801040002010200040101003d01000701 -030e0001050202020103020205030800000c0800000e080500a808000100000a01000014 -010000060100002a01000008010000210101000c0100002a0100001f010100c301010058 -01000701030e0001050202020103020205030800000808000002080000bd08000100000b -010100100101003b0101002201010059010100c30101005801000701030e000105020202 -01030202050308000009080200be08000100008101010059010100c30101005801000701 -030e000105020202010302020503080000cb08000100008101010059010100c301010058 -01000701030e000105020202010302020503080000cb08000100008101010059010100c3 -0101005801000701030e000105020202010302020503080000cb08000100008101010059 -010100c30101005801000701030e000105020202010302020503080000cb080001000081 -01010059010100c30101005801000701030e00010502020201030202050308cd01ff01ff -01000701030e00010502020201030202050308cd01ff01ff010007010010050202020103 -02020503080000cb08000100008101010059010100c301010058010007010300000c0700 -000105020202010302020503080000cb08000100000b0101004e01010022010100590101 -00c3010100580100070103000001050807010300000105020202010302020503080000cb -08000100000a0100001c0100002a01000008010000210101000c0100002a0100001f0101 -00c301010058010007010301000105070701030000010502020201030202050308000011 -0800000308000010080000010800009e08000100000a01000005010000040102000c0100 -00040101000d010000050100000a0101000201000007010000210101000b010000040101 -000d010000050100000a010100020100001e010100c30101000801040001010400430100 -070103010001050607010301000105020202010302020503080000110800000308000010 -080000010800009e08000100000a0100000401010003010000020100000a010000040100 -00010100000b0101000401010009010000010100000201000006010000210101000a0100 -0004010000010100000b010100040101000901000001010000020100001d010100c30101 -000801000002010000010100000201000043010007010302000105050701030100010502 -020201030202050308000009080100000800000108040001080000010800000a08010000 -08000001080000000801009b08000100000a010000030100000001000003010000020100 -000901000005010000010100000a01000000010000030100000001000009010000010100 -000301000005010000210101000901000005010000010100000a01000000010000030100 -00000100000901000001010000030100001c010100c30101000c01000005010000430100 -070103020001050407010302000105020202010302020503080000080800000108010003 -08000003080000000800000a0800000108010001080100010800009a08000100000a0100 -000501000003010000020100000801000006010000010100000901000001010000020100 -000101000009010000010100000401000004010000210101000801000006010000010100 -00090100000101000002010000010100000901000001010000040100001b010100c30101 -000b01000005010000440100070103030001050307010302000105020202010302020503 -080000080800000208000003080000030801000b0800000208000001080000020800009a -080001000008010100060100000401020008010000070100000101000008010000020100 -000101000002010000090100000101000005010000040101001f01010007010000070100 -0001010000080100000201000001010000020100000901000001010000050100001a0101 -00c30101000b010000050100004401000701030300010502070103030001050202020103 -02020503080000080800000208000003080000030801000b080000020800000108000002 -0800009a08000100000a0100000501000003010000020100000801000006010000010100 -000801000002010000010100000201000009010000010100000401000004010000210101 -000801000006010000010100000801000002010000010100000201000009010000010100 -00040100001b010100c30101000b01000005010000440100070103040001050107010303 -00010502020201030202050308000008080000020800000308000003080000000800000a -0800000208000001080000020800009a08000100000a0100000501000003010000020100 -000901000005010000010100000801050000010500080100000101000003010000050100 -002101010009010000050100000101000008010500000105000801000001010000030100 -001c010100c30101000a0100000501000045010007010304000105000701030400010502 -020201030202050308000008080000010801000308000003080000010800000908000001 -08010001080100010800009a08000100000a010000050100000301000002010000030101 -000401000004010000010100000301010006010000050100000301010003010000010100 -000201000006010000210101000a01000004010000010100000301010006010000050100 -00030101000301000001010000020100001d010100c30101000a01000005010000450100 -070103050000070203040001050202020103020205030800000908010000080000040801 -000108000002080000090801000008000001080000000801009b08000100000a01000003 -010400020102000401010005010000040101000401010006010000050100000301010004 -0101000201000007010000210101000b0100000401010004010100060100000501000003 -01010004010100020100001e010100c30101000a01000005010000450100070103050000 -070103050001050202020103020205030800000c0800000e080500a808000100000a0100 -0014010000060100002a01000008010000210101000c0100002a0100001f010100c30101 -0058010007010306070103050001050202020103020205030800000808000002080000bd -08000100000b010100100101003b0101002201010059010100c301010058010007010306 -0700030600010502020201030202050308000009080200be080001000081010100590101 -00c30101005801000701001005020202010302020503080000cb08000100008101010059 -010100c3010100580100070000110502020201030202050207ff07ff07d3051102020103 -0202050207ff07ff07d20000051102020103020205020701030d0000030000ff00ff00af -03000001030c0001051102020103020205020701030b00010700030000ff00ff00ae0700 -03000003030a00010511020201030202050207010309000207010300000105ff05ff05ab -0701030000050308000105110202010302020502070103070003050007010300000105ff -05ff05ab0701030000010501000303060001051102020103020205020701030500030502 -07010300000105ff05ff05ab070103000001050300030304000105110202010302020502 -070103030003050407010300000105ff05ff05ab07010300000105050003030200010511 -0202010302020502070103010003050607010300000105ff05ff05ab0701030000010507 -000303000001051102020103020205020705050807010300000105ff05ff05ab07010300 -000105080703000105110202010302020502070103010703050607010300000105ff05ff -05ab07010300000105070703030000010511020201030202050207010303070305040701 -0300000105ff05ff05ab0701030000010505070303020001051102020103020205020701 -03050703050207010300000105ff05ff05ab070103000001050307030304000105110202 -010302020502070103070703050007010300000105ff05ff05ab07010300000105010703 -03060001051102020103020205020701030907040300000105ff05ff05ab070103000001 -070303080001051102020103020205020701030b07020300000107ff07ff07ad03000001 -0701030a0001051102020101000405020701030d07000300000007ff07ff07ae03000000 -0700030c000105110005020204000502070100ff00ff00d1051100000202040000000202 -04000502070000ff00ff00d2051100000202040000000202040005ff05ff05e800000202 -040000000202040005ff05ff05e800000202040000000202040005ff05ff05e800000202 -0400000002020400000502ff02ff02dc00060202040000000208040002ff02ff02dc0000 -0208040000000208040002ff02ff02dc00000208040000000208040001ff01ff01dc0000 -020804000000040901ff01ff01dc00000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 377 205 -%%EOF diff --git a/lib/tv/doc/src/tv_table_browser.gif b/lib/tv/doc/src/tv_table_browser.gif Binary files differdeleted file mode 100644 index 9c7cb042ff..0000000000 --- a/lib/tv/doc/src/tv_table_browser.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_table_browser.ps b/lib/tv/doc/src/tv_table_browser.ps deleted file mode 100644 index e2b195a2e5..0000000000 --- a/lib/tv/doc/src/tv_table_browser.ps +++ /dev/null @@ -1,2024 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_browser.eps) -%%CreationDate: (Mon Mar 19 17:15:30 2001) -%%BoundingBox: 0 0 380 315 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 380 315 -userdict begin -%%BeginData: -DisplayImage -0 0 -380.000000 315.000000 -12 -760 630 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -b22222 -ff0000 -990000 -7f7f7f -999999 -ff7f7f -000000 -000000 -000000 -000000 -000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff -02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202 -04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff -02d500000202040000000202040002080000020d04000289010302110103023201020258 -0102020c010102010101021e010102290101020601010208010102310101022a01010230 -0101029600000202040000000202040002080000020d0400028901010202010702000101 -0203010102010101020e01050200010702010103020d0101020401010204010302030103 -020e010302060103020301030203010302060103020b0101020a01010202010102190100 -02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101 -020c0104021e0101029600000202040000000202040002080000020d0400028901010205 -0101020301010203010102010101020e0101020701010203010102010101020c01010202 -010302030101020101010201010102010101020801010201010102010101020401010201 -01010201010102010101020101010201010102040101020101010201010102060101020a -0101020201010218010102210101020b01010206010102090101021b010202020100020d -01010238010102020101021d010102960000020204000000020204000208000002020406 -020304000289010102050101020301010203010102010101020e01010207010102030101 -020501010209010102030101020701010201010102010101020601020202010102010101 -020801010201010102010101020101010201010102040101020101010202010202030101 -020a01010203010102020103020301030202010302010104020101010202010302030101 -02000101020a0104020101030203010102000101020301010202010302030101021a0100 -020001010201010002020103020301040202010302020101020901010200010102010101 -020301030203010102020101020001010202010102010103020201010200010102010101 -020301030202010102000101020101010202010302020101020201010285000002020400 -000004030208000002020400030400000203040002890101020501010204010102020100 -02020101020e0101020701010203010202040101020a0100020301010207010102010101 -020101010205010102040101020101010208010102010101020101010201010102010101 -02040101020101010204010102020100020b010102030101020101010201010102010101 -020101010200010102010101020101010203010102010101020101010202010202000101 -020a01010202010102010101020201020200010102020101020101010201010102020101 -021a01000200010102010100020101010201010102010101020101010201010102010101 -020101010209010202000102020001010201010102010101020201010202010202000101 -020101010200010102000101020201020200010202000101020101010201010102010101 -0200010102010101020101010201010102010101020201010285000004030101020b0000 -0203040003020000020404000289010102050101020401010201010102020101020e0104 -0204010102040103020d0101020401010205010202020101020101010204010102050101 -020101010207010102020101020101010202010402040101020101010205010102020101 -020901010203010102010101020101010201010102080101020101010203010102010101 -020101010202010102010101020a01010206010102020101020101010202010102010101 -0201010102020101021a0100020001020200010002010101020101010201010102010101 -0201010102010101020d0101020101010201010102050101020201010202010102010101 -020101010200010102000101020201010201010102010101020501010201010202030101 -0201010102010101020101010202010002890103020b0000020304000302000002040400 -0289010102050101020501010200010002030101020e01010207010102060102020e0100 -020301010207010102010101020101010205010102040101020101010206010102030101 -020101010205010102040101020101010204010102020100020b01010203010102010101 -020101010201010102050104020101010203010102010101020101010202010102010101 -020a0101020301040202010102010101020201010201010502020101021a010002010101 -020001000201010102010101020101010201010102010105020d01010201010102010101 -020201040202010102020101020101010201010102000101020001010202010102010101 -0201010102020104020101010204010102010105020201010200010102890103020b0000 -02040400030000000205040002890101020501010205010302030101020e010102070101 -02070101020d010102030101020701010201010102010101020601020202010102010101 -0205010102040101020101010205010102040101020101010202010202030101020a0101 -020301010201010102010101020101010204010102010101020101010203010102010101 -020101010202010102010101020a01010202010102010101020201010201010102020101 -0201010102060101021a0100020201020201010102010101020101010201010102010101 -021101010201010102010101020101010201010102020101020201010201010102010101 -020101010200010102010101020101010201010102010101020101010201010102040101 -020101010206010102000100028a0103020b000002040400030000000205040002890101 -020501010206010102040101020e01010207010102030101020101010201010102080101 -020401010203010102010101020101010201010102010101020401010201010102010101 -020101010200010502010101020101010201010102010101020101010200010102010101 -0201010102060101020a0101020201010201010102010101020101010202010002000101 -02010101020101010203010102010101020101010202010102010101020a010102020101 -02010101020201010201010102020101020101010202010002010101021b010002020102 -020101010201010102010101020001020201010102020100020101010209010102010101 -020101010201010102010101020201010202010102010101020201010207010102010101 -0201010102010101020101010201010102040101020101010202010002030102028a0103 -020b0000020500000206040002890101020501010206010102040101020e010502030101 -020401030202010102080101020401010204010302030103020201010209010302020101 -0200010502020103020301030202010102010103020b0101020a01010202010102020103 -0203010302020102020001010201010202010101020201030203010102010101020b0102 -020101020200010102010104020301010202010302020101021b01000203010102020103 -020301010200010102020103020201010209010102010101020101010202010202000101 -020101010202010102010101020301050202010102010101020101010202010202000101 -02000101020401010202010302040101028b0103020b0000020d04000289010302110103 -0232010202190100023d0102020c01010237010602230101029e0101028c0103020b0000 -020d040002f2010002ff02540101028c0103020b0000020d040002ff02ff02d70103020c -040d02ff02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec0400 -020201030202000004ff04ff04ec0202010302ff02ff02f3010302020500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000202010302020000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000202010302020500000005ff05ff05ea01000202010302020000 -05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000 -05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000 -050c06040504060005030602051f06040505060005040600050406000519060005020600 -0504060005270602050b06000506060005ff05ff05080600050206000509060205130100 -050002020103020205000000050b0600050f0600051f060005090600050a060005190600 -05020600052c060005020600050a060005ff05ff0510060005020600050b060005140100 -0202010302020000050c0600050606020505060005030602051806000506060105000600 -050206020502060405170600050206000502060205030602050206000502060005170600 -050206000501060005000601050206040502060205030602050206000500060105030602 -05ff05f306000502060005020602050506000502060005000601050c0100050002020103 -020205000000050b06000508060005050600050206000502060005170600050506000501 -06010504060005040600051a060005000600050506000502060005020600050106000502 -060005170600050206000501060105010600050306000506060005020600050206000501 -060105010600050106000502060005ff05f2060005020600050106000502060005040600 -0502060105010600050c01000202010302020000050c0603050506000505060005020600 -050206000517060305020600050206000504060005040600051a06000500060005050600 -050206000502060005010600050006000500060005170600050206000501060005020600 -0503060005060600050206000502060005010600050206000501060005ff05f606040501 -060005020600050406000502060005020600050b0100050002020103020205000000050b -06000508060005050600050206040517060005050600050206000504060005040600051a -060005000600050506000502060405010600050006000500060005170600050206000501 -0600050206000503060005060600050206000502060005010600050206000502060205ff -05f306000502060005010604050406000502060005020600050c01000202010302020000 -050c0600050806000505060005020600051b060005050600050206000504060005040600 -051b06000506060005020600050506000500060005000600051706000502060005010600 -050206000503060005060600050206000502060005010600050206000505060005ff05f2 -06000502060005010600050806000502060005020600050b010005000202010302020500 -0000050b0600050806000505060005020600050206000517060005050600050106010504 -060005040600051b06000506060005020600050206000501060005000600050006000517 -060005020600050106010501060005030600050606000502060005020600050106000502 -0600050106000502060005ff05f206000502060005010600050206000504060005020601 -05010600050c01000202010302020000050c060005080600050506000503060205180604 -050206010500060005040600050506010519060005060600050306020503060005000600 -051906020502060005000601050506010504060005030602050206000502060005020602 -05ff05f306000502060005020602050506000502060005000601050c0100050002020103 -02020500000005a8060005ff05ff052e0600051001000202010302020000050b0606052a -0606052a0606052a06060500060005ff05ff05180606050e0600050f0100050002020103 -020205000000050a0606052a0606052a0606052a06060500060005ff05ff05180606050e -060005100100020201030202000005ff05ff05ea010005000202010302020500000005ff -05ff05ea0100020201030202000005ff05ff05ea01000500020201030202050000000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100020201030202000005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01000500010005000100050002020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -020201030202053600000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000051a00000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050100000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050100000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000051a00000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000051a00000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000051a00000500000005000000050000000500000005000000050000000500 -00000500000005000000050000000500000005ff05a50202010302020535000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500010005180000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000100000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -010000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050001000518000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500010005180000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000100051800000500000005000000050000000500000005000000 -0500000005000000050000000500000005000000050000000500010005ff05a402020103 -02020536000005140100051a00000514010005010000051401000501000005140100051a -000005140100051a000005140100051a00000514010005ff05a502020103020205350000 -051601000518000005160100000005160100000005160100051800000516010005180000 -05160100051800000516010005ff05a40202010302020536000005140100051a00000514 -010005010000051401000501000005140100051a000005140100051a000005140100051a -00000514010005ff05a50202010302020535000005050602050306020506010005180000 -051601000000051601000000051601000518000005160100051800000516010005180000 -0516010005ff05a402020103020205360000050406020503060205050100051a00000514 -010005010000051401000501000005140100051a00000506060405080100051a00000508 -060105090100051a0000050806030507010005ff05a50202010302020535000005040604 -050106040505010005180000051006000504010000000510060005040100000005040600 -051001000518000005050608050701000518000005080603050901000518000005070607 -0506010005ff05a402020103020205360000050306000501060105010600050106010504 -0100051a0000050f06000503010005010000050f0600050301000501000005030600050f -0100051a00000503060a05050100051a00000507060305080100051a0000050506030501 -06030504010005ff05a5020201030202053500000503060d0504010005180000050d0600 -0501060005040100000005040600050a06000504010000000504060005010600050d0100 -051800000504060305020603050601000518000005090601050a01000518000005060602 -050306020505010005ff05a4020201030202053600000501060005000603050006020500 -060405020100051a0000050c060005010600050301000501000005030600050a06000503 -0100050100000503060005010600050c0100051a0000050206030504060305040100051a -000005140100051a000005050602050306020504010005ff05a502020103020205350000 -050206000500060305000602050006040503010005180000050a06000501060005010600 -050401000000050406000504060005040600050401000000050406000501060005010600 -050a01000518000005030602050306070503010005180000050706040509010005180000 -05070601050206020506010005ff05a40202010302020536000005010600050006030500 -06020500060405020100051a000005090600050106000501060005030100050100000503 -06000504060005040600050301000501000005030600050106000501060005090100051a -0000050206020504060505030100051a00000507060305080100051a0000050a06020506 -010005ff05a5020201030202053500000502060005000603050006020500060405030100 -051800000507060005010600050106000501060005040100000005040600050406000501 -060005010600050401000000050406000501060005010600050106000507010005180000 -05030602050506030505010005180000050906020509010005180000050a060205080100 -05ff05a40202010302020536000005010600050006070500060405020100051a00000506 -060005010600050106000501060005030100050100000503060005040600050106000501 -060005030100050100000503060005010600050106000501060005060100051a00000502 -06030505060105050100051a00000508060205080100051a0000050806020508010005ff -05a502020103020205350000050206000500060405010600050006040503010005180000 -050406000501060005010600050106000501060005040100000005040600050106000501 -060005010600050106000504010000000504060005010600050106000501060005010600 -050401000518000005040603050d01000518000005090602050901000518000005090602 -0509010005ff05a402020103020205360000050106060501060605020100051a00000503 -060005010600050106000501060005010600050301000501000005030600050106000501 -060005010600050106000503010005010000050306000501060005010600050106000501 -060005030100051a00000503060905060100051a00000508060205080100051a00000514 -010005ff05a5020201030202053500000502060005000602050506000500060205030100 -051800000504060005010600050106000501060005010600050401000000050406000501 -060005010600050106000501060005040100000005040600050106000501060005010600 -050106000504010005180000050506070508010005180000050806040508010005180000 -050906020509010005ff05a4020201030202053600000501060005000602050506000500 -060205020100051a00000503060005010600050106000501060005010600050301000501 -000005030600050106000501060005010600050106000503010005010000050306000501 -060005010600050106000501060005030100051a00000506060405080100051a00000506 -060605060100051a0000050806020508010005ff05a50202010302020535000005020604 -050506040503010005180000051601000000051601000000051601000518000005160100 -0518000005160100051800000516010005ff05a40202010302020536000005140100051a -00000514010005010000051401000501000005140100051a000005140100051a00000514 -0100051a00000514010005ff05a502020103020205350000051601000518000005160100 -000005160100000005160100051800000516010005180000051601000518000005160100 -05ff05a40202010302020536000005140100051a00000514010005010000051401000501 -000005140100051a000005140100051a000005140100051a00000514010005ff05a50202 -010302020535000005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005180000050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -000005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010000000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000518000005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005180000050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100051800000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005ff05a402020103020205360100050001000500010005000100050001000500 -0100050001000500010005000100050001000500010005000100051a0100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005010100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005010100050001000500010005000100050001000500 -0100050001000500010005000100050001000500010005000100051a0100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100051a0100050001000500010005000100050001000500010005000100050001000500 -0100050001000500010005000100051a0100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005ff05a5020201030202 -05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 -05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 -05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 -05ff05ff05ed02020103020205ff05ff05ed020201030202050301ff01ff01e505030202 -01030202050301ff01ff01d1050000000500000005000000050000000500000005000000 -050000000500000005000000050001000503020201030202050301ff01ff01d100000500 -000005000000050000000500000005000000050000000500000005000000050001010503 -020201030202050301020aff0aff0acb010205000000050e010005000100050302020103 -0202050301020aff0aff0aca000001020000051001010503020201030202050301020a01 -00ff00ff00c9010205000000050e0100050001000503020201030202050301020a0100ff -00ff00c901020000051001010503020201030202050301020a0100ff00ff00c901020500 -0000050e0100050001000503020201030202050301020a0100ff00ff00c9010200000510 -01010503020201030202050301020a0100ff00ff00c9010205000000050e010005000100 -0503020201030202050301020a0100ff00ff00c9010200000502010a0502010105030202 -01030202050301020a0100ff00ff00c90102050000000502010805020100050001000503 -020201030202050301020a0100ff00ff00c9010200000504010605040101050302020103 -0202050301020a0100ff00ff00c901020500000005040104050401000500010005030202 -01030202050301020a0100ff00ff00c90102000005060102050601010503020201030202 -050301020a0100ff00ff00c9010205000000050601000506010005000100050302020103 -0202050301020a0100ff00ff00c901020000051001010503020201030202050301020a01 -00ff00ff00c9010205000000050e0100050001000503020201030202050301020a0100ff -00ff00c901020000051001010503020201030202050301020a0100ff00ff00c901020500 -0000050e0100050001000503020201030202050301020a0100ff00ff00c9010200000510 -01010503020201030202050301020a0100ff00ff00c9010205000000050e010005000100 -0503020201030202050301020a0000ff00ff00ca01020000051001010503020201030202 -050301ff01ff01d105000000050001000500010005000100050001000500010005000100 -0500010005000100050001000503020201030202050301ff01ff01d10000050001000500 -010005000100050001000500010005000100050001000500010005000101050302020103 -0202050301ff01ff01e5050302020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -020201030202050301ff01ff01e505030202010302020503010005ff05ff05970100054a -01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103 -0202050301000562010705ff05ff052c0100054a01000503020201030202050301000561 -01020503010205ff05ff052b0100054a0100050302020103020205030100056101010505 -010105ff05ff052b0100054a0100050302020103020205030100056101020503010205ff -05ff052b0100054a01000503020201030202050301000562010705ff05ff052c0100054a -01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103 -0202050301000565010105ff05ff052f0100054a01000503020201030202050301000565 -010105ff05ff052f0100054a01000503020201030202050301000565010105ff05ff052f -0100054a01000503020201030202050301000565010105ff05ff052f0100054a01000503 -020201030202050301000565010105ff05ff052f0100054a010005030202010302020503 -01000565010105ff05ff052f0100054a0100050302020103020205030100056101010500 -010205ff05ff052f0100054a0100050302020103020205030100056101010500010205ff -05ff052f0100054a01000503020201030202050301000561010505ff05ff052f0100054a -01000503020201030202050301000561010505ff05ff052f0100054a0100050302020103 -020205030100056101020500010105ff05ff052f0100054a010005030202010302020503 -010005ff05ff05970100054a01000503020201030202050301ff01ff0199054a01000503 -020201030202050301000536000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000009040500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000904050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000090405000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000009040500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000904050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500000005000000050000000500000005000000050000000904050000000100050c0100 -050001000500010005000100050001000500010005000100050001000500010005000100 -052a01000503020201030202050301000535000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000903 -010000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050009030100000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500090301000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000903010000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050009030100000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -05000000050009030100000005000100050d010005000100050001000500010005000100 -05000100050001000500010005000100052b010005030202010302020503010005360000 -055e01000901010205000000055c01000901010205000000055c01000901010205000000 -055c01000901010205000000055c01000901010205000000055c01000901010205000000 -0100050c0100050000000500000005000000050000000500000005000000050000000500 -000005000000052a010005030202010302020503010005350000052d0100052f01000500 -090101020000052b0102052d01000500090101020000052b0102052d0100050009010102 -0000052d0100052d01000500090101020000052a0104052c01000500090101020000052c -0102052c0100050009010102000005000100050d01000500000005000000050000000500 -000005000000050000000500000005000000052b01000503020201030202050301000536 -0000052a01020530010009010102050000000529010005020100052d0100090101020500 -00000529010005020100052d01000901010205000000052b0101052e0100090101020500 -000005290100053101000901010205000000052a01000530010009010102050000000100 -050c010005000000050c010005000000052a010005030202010302020503010005350000 -052d0100052f01000500090101020000052a010005020100052c01000500090101020000 -052e0100052c01000500090101020000052b010005000100052d01000500090101020000 -052a0100053001000500090101020000052a010005300100050009010102000005000100 -050d010005000000050a010005000000052b010005030202010302020503010005360000 -052c01000530010009010102050000000529010005020100052d01000901010205000000 -052d0100052d01000901010205000000052a010005000100052e01000901010205000000 -05290100053101000901010205000000052901000531010009010102050000000100050c -010005000000050c010005000000052a010005030202010302020503010005350000052d -0100052f01000500090101020000052d0100052d01000500090101020000052c0101052d -01000500090101020000052a010005010100052d01000500090101020000052a0103052d -01000500090101020000052a0103052d0100050009010102000005000100050d01000500 -0000050a010005000000052b010005030202010302020503010005360000052c01000530 -01000901010205000000052b0100052f01000901010205000000052d0100052d01000901 -0102050000000528010005020100052e01000901010205000000052d0100052d01000901 -0102050000000529010005020100052d010009010102050000000100050c010005000000 -050c010005000000052a010005030202010302020503010005350000052d0100052f0100 -0500090101020000052b0100052f01000500090101020000052e0100052c010005000901 -0102000005290105052c01000500090101020000052e0100052c01000500090101020000 -052a010005020100052c0100050009010102000005000100050d010005000000050a0100 -05000000052b010005030202010302020503010005360000052c01000530010009010102 -050000000529010005020100052d010009010102050000000529010005020100052d0100 -0901010205000000052c0100052e010009010102050000000528010005030100052d0100 -09010102050000000529010005020100052d010009010102050000000100050c01000500 -0000050c010005000000052a010005030202010302020503010005350000052b0104052d -01000500090101020000052a0104052c01000500090101020000052b0102052d01000500 -090101020000052c0102052c01000500090101020000052a0103052d0100050009010102 -0000052b0102052d0100050009010102000005000100050d010005000000050a01000500 -0000052b010005030202010302020503010005360000055e01000901010205000000055c -01000901010205000000055c01000901010205000000055c01000901010205000000055c -01000901010205000000055c010009010102050000000100050c010005000000050c0100 -05000000052a010005030202010302020503010005350000055e01000500090101020000 -055c01000500090101020000055c01000500090101020000055c01000500090101020000 -055c01000500090101020000055c0100050009010102000005000100050d010005000000 -050a010005000000052b010005030202010302020503010005360000055e010009010102 -05000000055c01000901010205000000055c01000901010205000000055c010009010102 -05000000055c01000901010205000000055c010009010102050000000100050701000503 -010005000000050c010005000000052a010005030202010302020503010005350000055e -01000500090101020000055c01000500090101020000055c01000500090101020000055c -01000500090101020000055c01000500090101020000055c010005000901010200000500 -0100050601010504010005000000050a010005000000052b010005030202010302020503 -010005360000055e01000901010205000000055c01000901010205000000055c01000901 -010205000000055c01000901010205000000055c01000901010205000000055c01000901 -010205000000010005050100050001000503010005000000050001000500010005000100 -0500010005000100050001000500010005000000052a0100050302020103020205030100 -05350000055e01000500090101020000055c01000500090101020000055c010005000901 -01020000055c01000500090101020000055c01000500090101020000055c010005000901 -010200000500010005070100050401000500000005000000050000000500000005000000 -050000000500000005000000052b01000503020201030202050301000536000005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010009010102050000000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100090101020500000005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000901010205000000050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010009010102050000000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -090101020500000005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000901010205000000010005070100050301000500 -0000050c010005000000052a010005030202010302020503010005350000050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050009000103000005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500090001030000050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000900010300000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050009000103000005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -090001030000050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000900010300000500010005070100050401000500 -0000050a010005000000052b01000503020201030202050301000b360063010000630100 -0063010000630100006301000063010000020100050701000503010005000000050c0100 -05000000052a01000503020201030202050301000b350800006301000063010000630100 -00630100006301000063010000020100050701000504010005000000050a010005000000 -052b01000503020201030202050301000b01073208010063010000630100006301000063 -0100006301000063010000020100050501040501010005000000050c010005000000052a -01000503020201030202050301000b010732080100630100006301000063010000630100 -006301000063010000020100050d010005000000050a010005000000052b010005030202 -01030202050301000b010717010007190801006301000063010000630100006301000063 -01000063010000020100050c010005000000050c010005000000052a0100050302020103 -0202050301000b010715010207190801000f010200030102004901000007010000230100 -000b010200030102001f01000063010000630100006301000063010000020100050d0100 -05000000050a010005000000052b01000503020201030202050301000b01071701000719 -08010011010000050100004901000007010000230100000d010000050100001f01000063 -010000630100006301000063010000020100050c010005000000050c010005000000052a -01000503020201030202050301000b010717010007190801000801020005010000050100 -000301020042010000070100000001010003010200020100000001010002010000000101 -000301020002010400010100000201000004010000050100001f01000063010000630100 -006301000063010000020100050d010005000000050a010005000000052b010005030202 -01030202050301000b010717010007190801000701000002010000040100000501000002 -010000020100004101000007010100010100000101000002010000010101000101000001 -01010001010000010100000201000003010000030100000201000004010000050100001f -01000063010000630100006301000063010000020100050c010005000000050c01000500 -0000052a01000503020201030202050301000b0107170100071908010007010000020100 -000401000005010000020100000201000041010000070100000201000001010000020100 -000101000005010000020100000101000007010000030100000201000004010000050100 -001f01000063010000630100006301000063010000020100050d010005000000050a0100 -05000000052b01000503020201030202050301000b010717010007190801000701000002 -010000040100000501000002010400410100000701000002010000010100000201000001 -01000005010000020100000201020004010000030100000201000004010000050100001f -01000063010000630100006301000063010000020100050c010005000000050001000500 -0100050001000500010005000100050001000500010005000000052a0100050302020103 -0202050301000b0107170100071908010007010000020100000401000005010000020100 -004501000007010000020100000101000002010000010100000501000002010000050100 -0003010000030100000201000004010000050100001f0100006301000063010000630100 -0063010000020100050d0100050001000500010005000100050001000500010005000100 -0500010005000000052b01000503020201030202050301000b0107150104071708010007 -010000020100000401000005010000020100000201000041010000070100000201000001 -010000020100000101000005010000020100000101000002010000030100000301000001 -01010004010000050100001f01000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010732080100080102 -000501000005010000030102004201000007010000020100000201020002010000050100 -00020100000201020005010100020101000001000004010000050100001f010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01073208010063010000630100006301000063010000630100006301000002 -0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 -00630100006301000063010000630100006301000063010000020100050d0100030e0000 -052b01000503020201030202050301000b01073208010063010000630100006301000063 -0100006301000063010000020100050c01000500030e05000000052a0100050302020103 -0202050301000b0107320801006301000063010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000b01073208010063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a01000503020201030202050301000b0108340063010000630100006301000063 -0100006301000063010000020100050d0100030e0000052b010005030202010302020503 -01000b00083501ff01ff0161050c01000500030e05000000052a01000503020201030202 -050301000b3600630100006301000063010000630100006301000063010000020100050d -0100030e0000052b01000503020201030202050301000b35080000630100006301000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b01073208010063010000630100006301000063010000630100 -0063010000020100050d0100030e0000052b01000503020201030202050301000b010732 -080100630100006301000063010000630100006301000063010000020100050c01000500 -030e05000000052a01000503020201030202050301000b01071601020718080100630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b01071501000702010007170801001f0100000301020003 -010200340100000f0102005001000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010715010007020100 -071708010026010000050100003401000011010000500100006301000063010000630100 -0063010000020100050d0100030e0000052b01000503020201030202050301000b010715 -010007020100071708010008010100000100000101000002010000010100000001010003 -0102000501000005010000030102002d0100000801020005010000020100000201000002 -010200030102000301020002010000000101002d01000063010000630100006301000063 -010000020100050c01000500030e05000000052a01000503020201030202050301000b01 -071801000718080100070100000101010001010000020100000101010001010000040100 -00050100000501000002010000020100002c010000070100000201000004010000020100 -000201000001010000020100000101000002010000010100000201000001010100010100 -002c01000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b0107170100071908010007010000020100000101000002 -0100000101000002010000040100000501000005010000060100002c0100000701000008 -01000002010000020100000101000005010000050100000201000001010000020100002c -01000063010000630100006301000063010000020100050c01000500030e05000000052a -01000503020201030202050301000b0107160100071a0801000701000002010000010100 -00020100000101000002010000040100000501000005010000030103002c010000080102 -0005010000020100000201000002010200030102000201040001010000020100002c0100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -01030202050301000b010715010007020100071708010007010000020100000101000002 -010000010100000201000004010000050100000501000002010000020100002c0100000b -01000004010000020100000201000005010000050100000101000005010000020100002c -01000063010000630100006301000063010000020100050c01000500030e05000000052a -01000503020201030202050301000b010715010407170801000701000001010100010100 -0001010100010100000201000004010000050100000501000002010000020100002c0100 -000701000002010000040100000201000001010100010100000201000001010000020100 -00010100000201000001010000020100002c010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000b01073208010008 -010100000100000201010000010000010100000201000004010000050100000501000003 -0103002c0100000801020005010000030101000001000002010200030102000301020002 -010000020100002c01000063010000630100006301000063010000020100050c01000500 -030e05000000052a01000503020201030202050301000b0107320801000b010000560100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b0107320801000701000002010000560100006301000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b01073208010008010200570100006301000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -0b010732080100630100006301000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010732080100630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b0108340063010000630100006301000063010000630100 -0063010000020100050c01000500030e05000000052a0100050302020103020205030100 -0b00083501ff01ff0161050d0100030e0000052b01000503020201030202050301000b36 -00630100006301000063010000630100006301000063010000020100050c01000500030e -05000000052a01000503020201030202050301000b350800006301000063010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01073208010063010000630100006301000063010000630100006301000002 -0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 -00630100006301000063010000630100006301000063010000020100050d0100030e0000 -052b01000503020201030202050301000b01071601020718080100630100006301000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b010715010007020100071708010063010000070100005a0100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -01030202050301000b0107190100071708010063010000070100005a0100006301000063 -0100006301000063010000020100050c01000500030e05000000052a0100050302020103 -0202050301000b0107190100071708010008010200020100000001010002010000000101 -000301020042010000070100000001010002010000000101000301020002010100000100 -000201010000010000030102003401000063010000630100006301000063010000020100 -050d0100030e0000052b01000503020201030202050301000b0107170101071808010007 -010000020100000101010001010000010101000101000001010000020100004101000007 -010100010100000101010001010000010100000201000001010000000100000001000001 -010000000100000001000001010000020100003301000063010000630100006301000063 -010000020100050c01000500030e05000000052a01000503020201030202050301000b01 -0719010007170801000b0100000101000002010000010100000201000005010000410100 -000701000002010000010100000501000002010000010100000001000000010000010100 -000001000000010000050100003301000063010000630100006301000063010000020100 -050d0100030e0000052b01000503020201030202050301000b0107190100071708010008 -010300010100000201000001010000020100000201030041010000070100000201000001 -010000050100000201000001010000000100000001000001010000000100000001000002 -0103003301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a01000503020201030202050301000b0107150100070201000717080100070100 -000201000001010000020100000101000002010000010100000201000041010000070100 -000201000001010000050100000201000001010000000100000001000001010000000100 -000001000001010000020100003301000063010000630100006301000063010000020100 -050d0100030e0000052b01000503020201030202050301000b0107160102071808010007 -010000020100000101000002010000010100000201000001010000020100004101000007 -010100010100000101000005010000020100000101000000010000000100000101000000 -010000000100000101000002010000330100006301000063010000630100006301000002 -0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 -000801030001010000020100000101000002010000020103004101000007010000000101 -000201000006010200020100000001000000010000010100000001000000010000020103 -003301000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b0107320801006301000063010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -01000b010732080100630100006301000063010000630100006301000063010000020100 -050d0100030e0000052b01000503020201030202050301000b0107320801006301000063 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -01000503020201030202050301000b010732080100630100006301000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -0b010732080100630100006301000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010834006301000063 -01000063010000630100006301000063010000020100050d0100030e0000052b01000503 -020201030202050301000b00083501ff01ff0161050c01000500030e05000000052a0100 -0503020201030202050301000b3600630100006301000063010000630100006301000063 -010000020100050d0100030e0000052b01000503020201030202050301000b3508000063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a01000503020201030202050301000b0107320801006301000063010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01073208010063010000630100006301000063010000630100006301000002 -0100050c01000500030e05000000052a01000503020201030202050301000b0107180100 -0718080100630100006301000063010000630100006301000063010000020100050d0100 -030e0000052b01000503020201030202050301000b010717010107180801001001000006 -010000490100000e0100001c0100000b010200030102001f010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -01000b010716010007000100071808010010010000510100000e0100001c0100000d0100 -00050100001f01000063010000630100006301000063010000020100050d0100030e0000 -052b01000503020201030202050301000b01071601000700010007180801000801020002 -010400020102000201000000010100030102003b01000008010200020100000101000003 -01020002010000000101000301020002010400010100000201000004010000050100001f -01000063010000630100006301000063010000020100050c01000500030e05000000052a -01000503020201030202050301000b010715010007010100071808010007010000020100 -000301000006010000020101000101000001010000020100003a01000007010000020100 -000101000000010000030100000201000001010100010100000101000002010000030100 -00030100000201000004010000050100001f010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000b01071401000702 -010007180801000701000007010000060100000201000002010000050100003a01000007 -010000050101000801000001010000020100000101000007010000030100000201000004 -010000050100001f01000063010000630100006301000063010000020100050c01000500 -030e05000000052a01000503020201030202050301000b01071401050717080100080102 -0004010000060100000201000002010000020103003a0100000801020002010100050103 -0001010000020100000201020004010000030100000201000004010000050100001f0100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -01030202050301000b010718010007180801000b01000003010000060100000201000002 -01000001010000020100003a0100000b0100000101000000010000030100000201000001 -010000020100000501000003010000030100000201000004010000050100001f01000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b01071701020717080100070100000201000003010000060100 -00020100000201000001010000020100003a010000070100000201000001010000010100 -000201000002010000010100000201000001010000020100000301000003010000010101 -0004010000050100001f01000063010000630100006301000063010000020100050d0100 -030e0000052b01000503020201030202050301000b010732080100080102000501010004 -0100000201000002010000020103003a0100000801020002010000020100000201030001 -010000020100000201020005010100020101000001000004010000050100001f01000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b01073208010063010000630100006301000063010000630100 -0063010000020100050d0100030e0000052b01000503020201030202050301000b010732 -080100630100006301000063010000630100006301000063010000020100050c01000500 -030e05000000052a01000503020201030202050301000b01073208010063010000630100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -01030202050301000b010732080100630100006301000063010000630100006301000063 -010000020100050c01000500030e05000000052a01000503020201030202050301000b01 -0732080100630100006301000063010000630100006301000063010000020100050d0100 -030e0000052b01000503020201030202050301000b010834006301000063010000630100 -00630100006301000063010000020100050c01000500030e05000000052a010005030202 -01030202050301000b00083501ff01ff0161050d0100030e0000052b0100050302020103 -0202050301000b3600630100006301000063010000630100006301000063010000020100 -050c01000500030e05000000052a01000503020201030202050301000b35080000630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b0107320801006301000063010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -01000b010732080100630100006301000063010000630100006301000063010000020100 -050d0100030e0000052b01000503020201030202050301000b0107150104071708010063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a01000503020201030202050301000b0107150100071b080100070100000e0100 -0014010000340100002b0102003401000063010000630100006301000063010000020100 -050d0100030e0000052b01000503020201030202050301000b0107150100071b08010007 -0100000e0100004a0100002d010000340100006301000063010000630100006301000002 -0100050c01000500030e05000000052a01000503020201030202050301000b0107150100 -071b08010007010000010100000301020002010400020102000201000000010100030102 -000201000000010100030102002601000007010000020100000101000000010100020100 -0000010100030102000301020005010000030102002d0100006301000063010000630100 -0063010000020100050d0100030e0000052b01000503020201030202050301000b010715 -010307180801000701000000010000030100000201000003010000030100000201000001 -010100010100000401000002010100010100000101000002010000250100000701000002 -010000010101000101000001010100010100000101000002010000010100000201000004 -01000002010000020100002c01000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010719010007170801 -000701010008010000030100000701000001010000080100000201000002010000050100 -002501000007010000020100000101000002010000010100000201000001010000090100 -0004010000060100002c01000063010000630100006301000063010000020100050d0100 -030e0000052b01000503020201030202050301000b010719010007170801000701010005 -010300030100000401030001010000080100000201000002010000020103002501000007 -010000020100000101000002010000010100000201000002010200030103000401000003 -0103002c01000063010000630100006301000063010000020100050c01000500030e0500 -0000052a01000503020201030202050301000b0107140100070301000717080100070100 -000001000003010000020100000301000003010000020100000101000008010000020100 -000201000001010000020100002501000007010000020100000101000002010000010100 -00020100000501000001010000020100000401000002010000020100002c010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01071501030718080100070100000101000002010000020100000301000003 -010000020100000101000008010000020100000201000001010000020100002501000007 -010000010101000101010001010000010101000101000001010000020100000101000002 -0100000401000002010000020100002c0100006301000063010000630100006301000002 -0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 -000701000002010000020103000401010002010300010100000801000002010000020100 -000201030025010000080101000001000001010000000101000201000000010100030102 -000301030004010000030103002c01000063010000630100006301000063010000020100 -050d0100030e0000052b01000503020201030202050301000b010732080100630100000e -010000050100004c01000063010000630100006301000063010000020100050c01000500 -030e05000000052a01000503020201030202050301000b010732080100630100000e0100 -00050100004c01000063010000630100006301000063010000020100050d0100030e0000 -052b01000503020201030202050301000b010732080100630100000e010000050100004c -01000063010000630100006301000063010000020100050c01000500030e05000000052a -01000503020201030202050301000b010732080100630100006301000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -0b010732080100630100006301000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010834006301000063 -01000063010000630100006301000063010000020100050d0100030e0000052b01000503 -020201030202050301000b00083501ff01ff0161050c01000500030e05000000052a0100 -0503020201030202050301000b3600630100006301000063010000630100006301000063 -010000020100050d0100030e0000052b01000503020201030202050301000b3508000063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a01000503020201030202050301000b0107320801006301000063010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01073208010063010000630100006301000063010000630100006301000002 -0100050c01000500030e05000000052a01000503020201030202050301000b0107170102 -0717080100630100006301000063010000630100006301000063010000020100050d0100 -030e0000052b01000503020201030202050301000b0107160100071a0801000a0100001a -01010004010000340100000f0102000c010000020100003e010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -01000b0107150100071b080100250100003c01000011010000100100003e010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b0107150100071b080100080102000301020003010200030102000401000004 -010200020100000001010003010200260100000801020005010000020100000201000002 -01020002010000010100003b01000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010715010307180801 -000a01000002010000020100000101000002010000010100000201000001010400040100 -000201010001010000010100000201000025010000070100000201000004010000020100 -00020100000401000002010000000100003c010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000b01071501000702 -010007170801000a01000002010000020100000101000005010000020100000301000006 -01000002010000020100000101000002010000250100000b010000040100000201000002 -01000004010000020101003d01000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010715010007020100 -07170801000a010000020100000201000002010200020104000301000006010000020100 -000201000001010400250100000801030004010000030100000001000005010000020101 -003d01000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b01071501000702010007170801000a0100000201000002 -010000050100000101000007010000060100000201000002010000010100002901000007 -010000020100000401000003010000000100000501000002010000000100003c01000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b010716010207180801000a0100000201000002010000010100 -000201000001010000020100000301000006010000020100000201000001010000020100 -0025010000070100000201000004010000040100000601000002010000010100003b0100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -01030202050301000b0107320801000a0100000301020003010200030102000401000006 -010000020100000201000002010200260100000801030004010000040100000601000002 -010000020100003a01000063010000630100006301000063010000020100050c01000500 -030e05000000052a01000503020201030202050301000b0107320801000a010000570100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b0107320801000701000001010000570100006301000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b01073208010008010100580100006301000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -0b010732080100630100006301000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010732080100630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b0108340063010000630100006301000063010000630100 -0063010000020100050c01000500030e05000000052a0100050302020103020205030100 -0b00083501ff01ff0161050d0100030e0000052b01000503020201030202050301000b36 -00630100006301000063010000630100006301000063010000020100050c01000500030e -05000000052a01000503020201030202050301000b350800006301000063010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01073208010063010000630100006301000063010000630100006301000002 -0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 -00630100006301000063010000630100006301000063010000020100050d0100030e0000 -052b01000503020201030202050301000b01071501040717080100630100006301000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b01071501000702010007170801000a010100130100000b0100 -000201000030010000250100000b01020003010200260100006301000063010000630100 -0063010000020100050d0100030e0000052b01000503020201030202050301000b010718 -0100071808010009010000150100000f01000030010000250100000d0100000501000026 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -01000503020201030202050301000b010718010007180801000901000003010000000101 -0003010200030101000001000001010000000101000301020002010000010100002d0100 -000701000000010100030102000201000000010100020100000001010002010400010100 -000201000004010000050100002601000063010000630100006301000063010000020100 -050d0100030e0000052b01000503020201030202050301000b0107180100071808010007 -010400010101000101000001010000020100000101000001010100010101000101000004 -01000002010000000100002e010000070101000101000001010000020100000101010001 -010000010101000101000003010000030100000201000004010000050100002601000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b01071801000718080100090100000301000005010000020100 -0001010000020100000101000008010000020101002f0100000701000002010000010100 -000201000001010000050100000701000003010000020100000401000005010000260100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -01030202050301000b010717010007190801000901000003010000050104000101000002 -0100000101000008010000020101002f0100000701000002010000010100000201000001 -010000050100000701000003010000020100000401000005010000260100006301000063 -0100006301000063010000020100050c01000500030e05000000052a0100050302020103 -0202050301000b0107170100071908010009010000030100000501000005010000020100 -00010100000801000002010000000100002e010000070100000201000001010000020100 -000101000005010000070100000301000002010000040100000501000026010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01071701000719080100090100000301000005010000020100000101000001 -010100010100000801000002010000010100002d01000007010000020100000101000002 -010000010100000501000007010000030100000101010004010000050100002601000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b01073208010009010000030100000601020003010100000100 -00010100000801000002010000020100002c010000070100000201000002010200020100 -000501000008010100020101000001000004010000050100002601000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -0b010732080100630100006301000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010732080100630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b0107320801006301000063010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -01000b010732080100630100006301000063010000630100006301000063010000020100 -050d0100030e0000052b01000503020201030202050301000b0107320801006301000063 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -01000503020201030202050301000b010834006301000063010000630100006301000063 -01000063010000020100050d0100030e0000052b01000503020201030202050301000b00 -083501ff01ff0161050c01000500030e05000000052a0100050302020103020205030100 -0b3600630100006301000063010000630100006301000063010000020100050d0100030e -0000052b01000503020201030202050301000b3508000063010000630100006301000063 -0100006301000063010000020100050c01000500030e05000000052a0100050302020103 -0202050301000b0107320801006301000063010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000b01073208010063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a01000503020201030202050301000b0107160102071808010063010000630100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -01030202050301000b010715010007020100071708010063010000070100000f0100000b -01000006010000100100002201000063010000630100006301000063010000020100050c -01000500030e05000000052a01000503020201030202050301000b010715010007020100 -071708010063010000070100001c01000018010000220100006301000063010000630100 -0063010000020100050d0100030e0000052b01000503020201030202050301000b010715 -010007020100071708010007010000000101000301020002010000000101004901000007 -010000010100000201000000010100030102000301020002010400020102000201000000 -010100030102000201000000010100030102000201000000010100030101000001000009 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -01000503020201030202050301000b010716010207180801000701010001010000010100 -000201000001010100010100004801000007010000000100000301010001010000040100 -000201000002010000030100000601000002010100010100000101000002010000010101 -000101000001010000020100000101010001010000010100000101010009010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01071501000702010007170801000701000002010000010100000201000001 -0100004c0100000701010004010000080100000201000007010000060100000201000002 -010000010100000201000001010000020100000101000002010000010100000501000002 -0100000901000063010000630100006301000063010000020100050c01000500030e0500 -0000052a01000503020201030202050301000b0107150100070201000717080100070100 -000201000001010400010100004c01000007010100040100000801000003010200040100 -000601000002010000020100000101040001010000020100000101040001010000050100 -00020100000901000063010000630100006301000063010000020100050d0100030e0000 -052b01000503020201030202050301000b01071501000702010007170801000701000002 -01000001010000050100004c010000070100000001000003010000080100000601000003 -010000060100000201000002010000010100000501000002010000010100000501000005 -010000020100000901000063010000630100006301000063010000020100050c01000500 -030e05000000052a01000503020201030202050301000b01071601020718080100070101 -00010100000101000002010000010100004c010000070100000101000002010000080100 -000201000002010000030100000601000002010000020100000101000002010000010101 -000101000001010000020100000101000005010000010101000901000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -0b010732080100070100000001010003010200020100004c010000070100000201000001 -010000080100000301020005010100040100000201000002010000020102000201000000 -010100030102000201000006010100000100000901000063010000630100006301000063 -010000020100050c01000500030e05000000052a01000503020201030202050301000b01 -0732080100070100005a0100005801000009010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000b01073208010007 -0100005a0100005401000002010000090100006301000063010000630100006301000002 -0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 -00070100005a010000550102000a01000063010000630100006301000063010000020100 -050d0100030e0000052b01000503020201030202050301000b0107320801006301000063 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -01000503020201030202050301000b010732080100630100006301000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -0b01083400630100006301000063010000630100006301000063010000020100050c0100 -0500030e05000000052a01000503020201030202050301000b00083501ff01ff0161050d -0100030e0000052b01000503020201030202050301000b36006301000063010000630100 -00630100006301000063010000020100050c01000500030e05000000052a010005030202 -01030202050301000b350800006301000063010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000b01073208010063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a01000503020201030202050301000b0107320801006301000063010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01071601020718080100630100006301000063010000630100006301000063 -010000020100050c01000500030e05000000052a01000503020201030202050301000b01 -071501000702010007170801001f01000042010000120100001701020034010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01071501000702010007170801006301000012010000190100003401000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b01071501000702010007170801000701010000010000030102 -00020100000001010003010200030102003b010000080102000301010000010000020102 -000201000000010100020100000001010005010000030102000201000000010100260100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -01030202050301000b010715010007020100071708010007010000000100000001000001 -0100000201000001010100010100000401000002010000020100003a0100000701000002 -010000010100000101010001010000020100000101010001010000010101000101000004 -010000020100000201000001010100010100002501000063010000630100006301000063 -010000020100050c01000500030e05000000052a01000503020201030202050301000b01 -071601030717080100070100000001000000010000050100000101000008010000060100 -003a01000007010000020100000101000002010000010100000201000001010000020100 -000101000002010000040100000601000001010000020100002501000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -0b0107190100071708010007010000000100000001000002010300010100000801000003 -0103003a0100000701000002010000010100000201000001010400010100000201000001 -010000020100000401000003010300010100000201000025010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -01000b010718010007180801000701000000010000000100000101000002010000010100 -000801000002010000020100003a01000007010000020100000101000002010000010100 -000501000002010000010100000201000004010000020100000201000001010000020100 -002501000063010000630100006301000063010000020100050d0100030e0000052b0100 -0503020201030202050301000b0107150102071908010007010000000100000001000001 -01000002010000010100000801000002010000020100003a010000070100000201000001 -010000010101000101000002010000010100000201000001010100010100000401000002 -010000020100000101000002010000250100006301000063010000630100006301000002 -0100050c01000500030e05000000052a01000503020201030202050301000b0107320801 -00070100000001000000010000020103000101000008010000030103003a010000080102 -000301010000010000020102000201000002010000010100000001010005010000030103 -0001010000020100002501000063010000630100006301000063010000020100050d0100 -030e0000052b01000503020201030202050301000b01073208010063010000230100003e -01000063010000630100006301000063010000020100050c01000500030e05000000052a -01000503020201030202050301000b01073208010063010000230100003e010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000b01073208010063010000230100003e01000063010000630100006301000063 -010000020100050c01000500030e05000000052a01000503020201030202050301000b01 -0732080100630100006301000063010000630100006301000063010000020100050d0100 -030e0000052b01000503020201030202050301000b010732080100630100006301000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000b01083400630100006301000063010000630100006301000063 -010000020100050d0100030e0000052b01000503020201030202050301000b00083501ff -01ff0161050c01000500030e05000000052a010005030202010302020503010005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000063 -0100006301000063010000630100006301000063010000020100050d0100030e0000052b -010005030202010302020503010000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050001000063010000630100006301000063010000630100 -0063010000020100050c01000500030e05000000052a0100050302020103020205030100 -050000000532010005000063010000630100006301000063010000630100006301000002 -0100050d0100030e0000052b010005030202010302020503010000000534010000630100 -006301000063010000630100006301000063010000020100050c01000500030e05000000 -052a01000503020201030202050301000500000005130100050401020515010005000063 -0100006301000063010000630100006301000063010000020100050d0100030e0000052b -010005030202010302020503010000000512010205030100050201000515010000630100 -006301000063010000630100006301000063010000020100050c01000500030e05000000 -052a01000503020201030202050301000500000005130100050301000502010005140100 -050000630100006301000063010000630100006301000063010000020100050d0100030e -0000052b0100050302020103020205030100000005140100050301000502010005150100 -00630100006301000063010000630100006301000063010000020100050c01000500030e -05000000052a010005030202010302020503010005000000051301000503010005020100 -05140100050000630100006301000063010000630100006301000063010000020100050d -0100030e0000052b01000503020201030202050301000000051401000503010005020100 -0515010000630100006301000063010000630100006301000063010000020100050c0100 -0500030e05000000052a0100050302020103020205030100050000000513010005030100 -050201000514010005000063010000630100006301000063010000630100006301000002 -0100050d0100030e0000052b010005030202010302020503010000000514010005030100 -050201000515010000630100006301000063010000630100006301000063010000020100 -050c01000500030e05000000052a01000503020201030202050301000500000005110104 -050201020515010005000063010000630100006301000063010000630100006301000002 -0100050d0100030e0000052b010005030202010302020503010000000534010000630100 -006301000063010000630100006301000063010000020100050c01000500030e05000000 -052a01000503020201030202050301000500000005320100050000630100006301000063 -010000630100006301000063010000020100050d0100030e0000052b0100050302020103 -020205030100000005340100006301000063010000630100006301000063010000630100 -00020100050c01000500030e05000000052a010005030202010302020503010005000000 -05320100050000630100006301000063010000630100006301000063010000020100050d -0100030e0000052b01000503020201030202050301000000053401000063010000630100 -0063010000630100006301000063010000020100050c01000500030e05000000052a0100 -050302020103020205030100050000000532010005000063010000630100006301000063 -0100006301000063010000020100050d0100030e0000052b010005030202010302020503 -010000000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010000630100006301000063010000630100006301000063010000020100050c0100 -0500030e05000000052a0100050302020103020205030100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001ff01ff0161050d0100 -030e0000052b010005030202010302020503010005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000063010000630100006301000063 -0100006301000063010000020100050c01000500030e05000000052a0100050302020103 -020205030100000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500010000630100006301000063010000630100006301000063010000020100 -050d0100030e0000052b0100050302020103020205030100050000000532010005000063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a0100050302020103020205030100000005340100006301000063010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000500000005130100050501000516010005000063010000630100006301000063 -0100006301000063010000020100050c01000500030e05000000052a0100050302020103 -020205030100000005120102050301020517010000630100006301000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -050000000513010005050100051601000500006301000063010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -010000000514010005050100051701000063010000630100006301000063010000630100 -0063010000020100050d0100030e0000052b010005030202010302020503010005000000 -051301000505010005160100050000630100006301000063010000630100006301000063 -010000020100050c01000500030e05000000052a01000503020201030202050301000000 -051401000505010005170100006301000063010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000500000005130100 -050501000516010005000063010000630100006301000063010000630100006301000002 -0100050c01000500030e05000000052a0100050302020103020205030100000005140100 -050501000517010000630100006301000063010000630100006301000063010000020100 -050d0100030e0000052b0100050302020103020205030100050000000511010405010104 -05140100050000630100006301000063010000630100006301000063010000020100050c -01000500030e05000000052a010005030202010302020503010000000534010000630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -050302020103020205030100050000000532010005000063010000630100006301000063 -0100006301000063010000020100050c01000500030e05000000052a0100050302020103 -020205030100000005340100006301000063010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000500000005320100 -050000630100006301000063010000630100006301000063010000020100050c01000500 -030e05000000052a01000503020201030202050301000000053401000063010000630100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -010302020503010005000000053201000500006301000063010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -010000000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010000630100006301000063010000630100006301000063010000020100050d0100 -030e0000052b010005030202010302020503010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005000100050001000500010005000100050001ff01ff0161050c01000500030e -05000000052a010005030202010302020503010005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000063010000630100006301000063 -0100006301000063010000020100050d0100030e0000052b010005030202010302020503 -010000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500010000630100006301000063010000630100006301000063010000020100050c0100 -0500030e05000000052a0100050302020103020205030100050000000532010005000063 -0100006301000063010000630100006301000063010000020100050d0100030e0000052b -010005030202010302020503010000000534010000630100006301000063010000630100 -006301000063010000020100050c01000500030e05000000052a01000503020201030202 -050301000500000005130100050401020515010005000063010000630100006301000063 -0100006301000063010000020100050d0100030e0000052b010005030202010302020503 -010000000512010205030100050201000515010000630100006301000063010000630100 -006301000063010000020100050c01000500030e05000000052a01000503020201030202 -050301000500000005130100050301000502010005140100050000630100006301000063 -010000630100006301000063010000020100050d0100030e0000052b0100050302020103 -020205030100000005140100050301000502010005150100006301000063010000630100 -00630100006301000063010000020100050c01000500030e05000000052a010005030202 -010302020503010005000000051301000506010005150100050000630100006301000063 -010000630100006301000063010000020100050d0100030e0000052b0100050302020103 -020205030100000005140100050501000517010000630100006301000063010000630100 -006301000063010000020100050c01000500030e05000000052a01000503020201030202 -050301000500000005130100050401000517010005000063010000630100006301000063 -0100006301000063010000020100050d0100030e0000052b010005030202010302020503 -010000000514010005030100050201000515010000630100006301000063010000630100 -006301000063010000020100050c01000500030e05000000052a01000503020201030202 -050301000500000005110104050101040514010005000063010000630100006301000063 -0100006301000063010000020100050d0100030e0000052b010005030202010302020503 -010000000534010000630100006301000063010000630100006301000063010000020100 -050c01000500030e05000000052a01000503020201030202050301000500000005320100 -050000630100006301000063010000630100006301000063010000020100050d0100030e -0000052b0100050302020103020205030100000005340100006301000063010000630100 -00630100006301000063010000020100050c01000500030e05000000052a010005030202 -010302020503010005000000053201000500006301000063010000630100006301000063 -01000063010000020100050d0100030e0000052b01000503020201030202050301000000 -0534010000630100006301000063010000630100006301000063010000020100050c0100 -0500030e05000000052a0100050302020103020205030100050000000532010005000063 -0100006301000063010000630100006301000063010000020100050d0100030e0000052b -010005030202010302020503010000000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000063010000630100006301000063010000630100 -0063010000020100050c01000500030e05000000052a0100050302020103020205030100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001ff01ff0161050d0100030e0000052b010005030202010302020503010005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a0100050302020103020205030100000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500010000630100006301000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -050000000532010005000063010000630100006301000063010000630100006301000002 -0100050c01000500030e05000000052a0100050302020103020205030100000005340100 -00630100006301000063010000630100006301000063010000020100050d0100030e0000 -052b01000503020201030202050301000500000005130100050401020515010005000063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a0100050302020103020205030100000005120102050301000502010005150100 -00630100006301000063010000630100006301000063010000020100050d0100030e0000 -052b01000503020201030202050301000500000005130100050701000514010005000063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a0100050302020103020205030100000005140100050701000515010000630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -050302020103020205030100050000000513010005050101051501000500006301000063 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -010005030202010302020503010000000514010005070100051501000063010000630100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -010302020503010005000000051301000507010005140100050000630100006301000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000000051401000503010005020100051501000063010000630100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -010302020503010005000000051101040502010205150100050000630100006301000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000000053401000063010000630100006301000063010000630100 -0063010000020100050d0100030e0000052b010005030202010302020503010005000000 -05320100050000630100006301000063010000630100006301000063010000020100050c -01000500030e05000000052a010005030202010302020503010000000534010000630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -050302020103020205030100050000000532010005000063010000630100006301000063 -0100006301000063010000020100050c01000500030e05000000052a0100050302020103 -020205030100000005340100006301000063010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000500000005320100 -050000630100006301000063010000630100006301000063010000020100050c01000500 -030e05000000052a01000503020201030202050301000000050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100006301000063010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -05000100050001ff01ff0161050c01000500030e05000000052a01000503020201030202 -050301000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -05000000050000630100006301000063010000630100006301000063010000020100050d -0100030e0000052b01000503020201030202050301000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000100006301000063010000630100 -00630100006301000063010000020100050c01000500030e05000000052a010005030202 -010302020503010005000000053201000500006301000063010000630100006301000063 -01000063010000020100050d0100030e0000052b01000503020201030202050301000000 -0534010000630100006301000063010000630100006301000063010000020100050c0100 -0500030e05000000052a0100050302020103020205030100050000000513010005060100 -05150100050000630100006301000063010000630100006301000063010000020100050d -0100030e0000052b01000503020201030202050301000000051201020505010105160100 -00630100006301000063010000630100006301000063010000020100050c01000500030e -05000000052a010005030202010302020503010005000000051301000504010005000100 -05150100050000630100006301000063010000630100006301000063010000020100050d -0100030e0000052b01000503020201030202050301000000051401000504010005000100 -0516010000630100006301000063010000630100006301000063010000020100050c0100 -0500030e05000000052a0100050302020103020205030100050000000513010005030100 -050101000515010005000063010000630100006301000063010000630100006301000002 -0100050d0100030e0000052b010005030202010302020503010000000514010005020100 -050201000516010000630100006301000063010000630100006301000063010000020100 -050c01000500030e05000000052a01000503020201030202050301000500000005130100 -050201050514010005000063010000630100006301000063010000630100006301000002 -0100050d0100030e0000052b010005030202010302020503010000000514010005060100 -0516010000630100006301000063010000630100006301000063010000020100050c0100 -0500030e05000000052a0100050302020103020205030100050000000511010405030102 -05140100050000630100006301000063010000630100006301000063010000020100050d -0100030e0000052b01000503020201030202050301000000053401000063010000630100 -0063010000630100006301000063010000020100050c01000500030e05000000052a0100 -050302020103020205030100050000000532010005000063010000630100006301000063 -0100006301000063010000020100050d0100030e0000052b010005030202010302020503 -010000000534010000630100006301000063010000630100006301000063010000020100 -050c01000500030e05000000052a01000503020201030202050301000500000005320100 -050000630100006301000063010000630100006301000063010000020100050d0100030e -0000052b0100050302020103020205030100000005340100006301000063010000630100 -00630100006301000063010000020100050c01000500030e05000000052a010005030202 -010302020503010005000000053201000500006301000063010000630100006301000063 -01000063010000020100050d0100030e0000052b01000503020201030202050301000000 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -00630100006301000063010000630100006301000063010000020100050c01000500030e -05000000052a010005030202010302020503010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005000100050001000500010005000100050001ff01ff0161050d0100030e0000 -052b01000503020201030202050301000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500006301000063010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -010000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500010000630100006301000063010000630100006301000063010000020100050d0100 -030e0000052b010005030202010302020503010005000000053201000500006301000063 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -010005030202010302020503010000000534010000630100006301000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -050000000513010005030104051401000500006301000063010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -010000000512010205030100051901000063010000630100006301000063010000630100 -0063010000020100050d0100030e0000052b010005030202010302020503010005000000 -051301000503010005180100050000630100006301000063010000630100006301000063 -010000020100050c01000500030e05000000052a01000503020201030202050301000000 -051401000503010005190100006301000063010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000500000005130100 -050301030515010005000063010000630100006301000063010000630100006301000002 -0100050c01000500030e05000000052a0100050302020103020205030100000005140100 -050701000515010000630100006301000063010000630100006301000063010000020100 -050d0100030e0000052b0100050302020103020205030100050000000513010005070100 -05140100050000630100006301000063010000630100006301000063010000020100050c -01000500030e05000000052a010005030202010302020503010000000514010005020100 -050301000515010000630100006301000063010000630100006301000063010000020100 -050d0100030e0000052b0100050302020103020205030100050000000511010405010103 -05150100050000630100006301000063010000630100006301000063010000020100050c -01000500030e05000000052a010005030202010302020503010000000534010000630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -050302020103020205030100050000000532010005000063010000630100006301000063 -0100006301000063010000020100050c01000500030e05000000052a0100050302020103 -020205030100000005340100006301000063010000630100006301000063010000630100 -00020100050d0100030e0000052b01000503020201030202050301000500000005320100 -050000630100006301000063010000630100006301000063010000020100050c01000500 -030e05000000052a01000503020201030202050301000000053401000063010000630100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -010302020503010005000000053201000500006301000063010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -010000000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010000630100006301000063010000630100006301000063010000020100050d0100 -030e0000052b010005030202010302020503010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005000100050001000500010005000100050001ff01ff0161050c01000500030e -05000000052a010005030202010302020503010005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000063010000630100006301000063 -0100006301000063010000020100050d0100030e0000052b010005030202010302020503 -010000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500010000630100006301000063010000630100006301000063010000020100050c0100 -0500030e05000000052a0100050302020103020205030100050000000532010005000063 -0100006301000063010000630100006301000063010000020100050d0100030e0000052b -010005030202010302020503010000000534010000630100006301000063010000630100 -006301000063010000020100050c01000500030e05000000052a01000503020201030202 -050301000500000005130100050501020514010005000063010000630100006301000063 -0100006301000063010000020100050d0100030e0000052b010005030202010302020503 -010000000512010205040100051801000063010000630100006301000063010000630100 -0063010000020100050c01000500030e05000000052a0100050302020103020205030100 -050000000513010005030100051801000500006301000063010000630100006301000063 -01000063010000020100050d0100030e0000052b01000503020201030202050301000000 -051401000503010005190100006301000063010000630100006301000063010000630100 -00020100050c01000500030e05000000052a010005030202010302020503010005000000 -051301000503010305150100050000630100006301000063010000630100006301000063 -010000020100050d0100030e0000052b0100050302020103020205030100000005140100 -050301000502010005150100006301000063010000630100006301000063010000630100 -00020100050c01000500030e05000000052a010005030202010302020503010005000000 -051301000503010005020100051401000500006301000063010000630100006301000063 -01000063010000020100050d0100030e0000052b01000503020201030202050301000000 -051401000503010005020100051501000063010000630100006301000063010000630100 -0063010000020100050c01000500030e05000000052a0100050302020103020205030100 -050000000511010405020102051501000500006301000063010000630100006301000063 -01000063010000020100050d0100030e0000052b01000503020201030202050301000000 -0534010000630100006301000063010000630100006301000063010000020100050c0100 -0500030e05000000052a0100050302020103020205030100050000000532010005000063 -0100006301000063010000630100006301000063010000020100050d0100030e0000052b -010005030202010302020503010000000534010000630100006301000063010000630100 -006301000063010000020100050c01000500030e05000000052a01000503020201030202 -050301000500000005320100050000630100006301000063010000630100006301000063 -010000020100050d0100030e0000052b0100050302020103020205030100000005340100 -00630100006301000063010000630100006301000063010000020100050c01000500030e -05000000052a010005030202010302020503010005000000053201000500006301000063 -01000063010000630100006301000063010000020100050d0100030e0000052b01000503 -020201030202050301000000050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100006301000063010000630100006301000063010000630100 -00020100050c01000500030e05000000052a010005030202010302020503010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005000100050001000500010005000100050001000500010005000100050001ff -01ff0161050d0100030e0000052b01000503020201030202050301000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500006301000063 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -010005030202010302020503010000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050001000063010000630100006301000063010000630100 -0063010000020100050d0100030e0000052b010005030202010302020503010005000000 -05320100050000630100006301000063010000630100006301000063010000020100050c -01000500030e05000000052a010005030202010302020503010000000534010000630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -050302020103020205030100050000000513010005030104051401000500006301000063 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -010005030202010302020503010000000512010205030100050201000515010000630100 -006301000063010000630100006301000063010000020100050d0100030e0000052b0100 -050302020103020205030100050000000513010005060100051501000500006301000063 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -010005030202010302020503010000000514010005060100051601000063010000630100 -0063010000630100006301000063010000020100050d0100030e0000052b010005030202 -010302020503010005000000051301000506010005150100050000630100006301000063 -010000630100006301000063010000020100050c01000500030e05000000052a01000503 -020201030202050301000000051401000506010005160100006301000063010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000500000005130100050501000516010005000063010000630100006301000063 -0100006301000063010000020100050c01000500030e05000000052a0100050302020103 -020205030100000005140100050501000517010000630100006301000063010000630100 -006301000063010000020100050d0100030e0000052b0100050302020103020205030100 -050000000511010405030100051601000500006301000063010000630100006301000063 -01000063010000020100050c01000500030e05000000052a010005030202010302020503 -010000000534010000630100006301000063010000630100006301000063010000020100 -050d0100030e0000052b0100050302020103020205030100050000000532010005000063 -0100006301000063010000630100006301000063010000020100050c01000500030e0500 -0000052a0100050302020103020205030100000005340100006301000063010000630100 -00630100006301000063010000020100050d0100030e0000052b01000503020201030202 -050301000500000005320100050000630100006301000063010000630100006301000063 -010000020100050c01000500030e05000000052a01000503020201030202050301000000 -0534010000630100006301000063010000630100006301000063010000020100050d0100 -030e0000052b010005030202010302020503010005000000053201000500006301000063 -01000063010000630100006301000063010000020100050c01000500030e05000000052a -010005030202010302020503010000000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000063010000630100006301000063010000630100 -0063010000020100050d0100030e0000052b010005030202010302020503010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005000100050001000500010005000100050001000500010005000100050001ff -01ff0161050c01000500030e05000000052a010005030202010302020503010005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000063 -0100006301000063010000630100006301000063010000020100050d0100030e0000052b -010005030202010302020503010000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050001000063010000630100006301000063010000630100 -0063010000020100050c01000500030e05000000052a0100050302020103020205030100 -050000000532010005000063010000630100006301000063010000630100006301000002 -0100050d0100030e0000052b010005030202010302020503010000000534010000630100 -006301000063010000630100006301000063010000020100050c01000500030e05000000 -052a01000503020201030202050301000500000005130100050401020515010005000063 -0100006301000063010000630100006301000063010000020100050d0100030e0000052b -010005030202010302020503010000000512010205030100050201000515010000630100 -006301000063010000630100006301000063010000020100050c01000500000005000000 -05000000050000000500000005000000050000000500000005000000052a010005030202 -01030202050301ff01ff0199050d00000500000005000000050000000500000005000000 -050000000500000005000000052b010005030202010302020503010005ff05ff05e30100 -05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff -05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100 -05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 -0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202 -01030202050301000549010005ff05ff0598010005030202010302020503010005480101 -05ff05ff05980100050302020103020205030100054701000500010005ff05ff05980100 -0503020201030202050301000549010005ff05ff05980100050302020103020205030100 -0549010005ff05ff059801000503020201030202050301000549010005ff05ff05980100 -0503020201030202050301000549010005ff05ff05980100050302020103020205030100 -0549010005ff05ff059801000503020201030202050301000547010405ff05ff05960100 -05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff -05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100 -05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 -050301000538010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005000100050001000500010005000100050001000500010005000100054b0100 -050302020103020205030100053701000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005000000054a0100050302020103020205030100053801000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500000005000000050000000500000003ff03ff033e0000054b01000503020201030202 -050301000537010005000000050000000500000005000000050000000500000005000000 -0500000005000000050000000500000005000000050000000500000005000000050003ff -03ff033e05000000054a01000503020201030202050301000538010005000000050c0000 -050c010003ff03ff033e0000054b01000503020201030202050301000537010005000000 -050c0100050c0100050003ff03ff033e05000000054a0100050302020103020205030100 -0538010005000000050c0000050c010003ff03ff033e0000054b01000503020201030202 -050301000537010005000000050c0100050c0100050003ff03ff033e05000000054a0100 -0503020201030202050301000538010005000000050c0000050c010003ff03ff033e0000 -054b01000503020201030202050301000537010005000000050c0100050c0100050003ff -03ff033e05000000054a01000503020201030202050301000538010005000000050c0000 -050c010003ff03ff033e0000054b01000503020201030202050301000537010005000000 -050c0100050c0100050003ff03ff033e05000000054a0100050302020103020205030100 -0538010005000000050c0000050c010003ff03ff033e0000054b01000503020201030202 -050301000537010005000000050c0100050c0100050003ff03ff033e05000000054a0100 -0503020201030202050301000538010005000000050c0000050c010003ff03ff033e0000 -054b01000503020201030202050301000537010005000000050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005000100050003ff03ff033e05000000054a0100050302020103020205030100 -053801000500010005000100050001000500010005000100050001000500010005000100 -0500010005000100050001000500010005000100050001000500010003ff03ff033e0000 -054b01000503020201030202050301000537010005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000054a01000503020201030202050301000538000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500000005000000050000000500000005000000054b0100050302020103020205030100 -05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 -0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202 -010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100 -05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff -05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100 -05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 -0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202 -010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100 -05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff -05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100 -05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 -0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202 -010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100 -05030202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff -05e3010005030202010302020503010005ff05ff05e30100050302020103020205030100 -05ff05ff05e3010005030202010302020503010005ff05ff05e301000503020201030202 -0503010005ff05ff05e3010005030202010302020503010005ff05ff05e3010005030202 -010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e30100 -05030202010100040503010005ff05ff05e301000503000502020400050301ff01ff01e5 -050300000202040000000202040005ff05ff05ed00000202040000000202040005ff05ff -05ed00000202040000000202040005ff05ff05ed00000202040000000202040005ff05ff -05ed000002020400000002020400000502ff02ff02e100060202040000000208040002ff -02ff02e100000208040000000208040002ff02ff02e100000208040000000208040001ff -01ff01e10000020804000000040901ff01ff01e100000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 380 315 -%%EOF diff --git a/lib/tv/doc/src/tv_table_browser_updated.gif b/lib/tv/doc/src/tv_table_browser_updated.gif Binary files differdeleted file mode 100644 index 547497487d..0000000000 --- a/lib/tv/doc/src/tv_table_browser_updated.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_table_browser_updated.ps b/lib/tv/doc/src/tv_table_browser_updated.ps deleted file mode 100644 index 0a944565e8..0000000000 --- a/lib/tv/doc/src/tv_table_browser_updated.ps +++ /dev/null @@ -1,2124 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_browser_updated.eps) -%%CreationDate: (Mon Mar 19 17:15:32 2001) -%%BoundingBox: 0 0 380 315 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 380 315 -userdict begin -%%BeginData: -DisplayImage -0 0 -380.000000 315.000000 -12 -760 630 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -d9d9d9 -b22222 -00ff00 -ff0000 -990000 -7f7f7f -999999 -ff7f7f -009900 -7fff7f -000000 -000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff -02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202 -04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff -02d500000202040000000202040002080000020d04000289010302110103023201020258 -0102020c010102010101021e010102290101020601010208010102310101022a01010230 -0101029600000202040000000202040002080000020d0400028901010202010702000101 -0203010102010101020e01050200010702010103020d0101020401010204010302030103 -020e010302060103020301030203010302060103020b0101020a01010202010102190100 -02030101021c0100020b01010206010102090101021b010202020100020d0101022a0101 -020c0104021e0101029600000202040000000202040002080000020d0400028901010205 -0101020301010203010102010101020e0101020701010203010102010101020c01010202 -010302030101020101010201010102010101020801010201010102010101020401010201 -01010201010102010101020101010201010102040101020101010201010102060101020a -0101020201010218010102210101020b01010206010102090101021b010202020100020d -01010238010102020101021d010102960000020204000000020204000208000002020406 -020304000289010102050101020301010203010102010101020e01010207010102030101 -020501010209010102030101020701010201010102010101020601020202010102010101 -020801010201010102010101020101010201010102040101020101010202010202030101 -020a01010203010102020103020301030202010302010104020101010202010302030101 -02000101020a0104020101030203010102000101020301010202010302030101021a0100 -020001010201010002020103020301040202010302020101020901010200010102010101 -020301030203010102020101020001010202010102010103020201010200010102010101 -020301030202010102000101020101010202010302020101020201010285000002020400 -000004030208000002020400030400000203040002890101020501010204010102020100 -02020101020e0101020701010203010202040101020a0100020301010207010102010101 -020101010205010102040101020101010208010102010101020101010201010102010101 -02040101020101010204010102020100020b010102030101020101010201010102010101 -020101010200010102010101020101010203010102010101020101010202010202000101 -020a01010202010102010101020201020200010102020101020101010201010102020101 -021a01000200010102010100020101010201010102010101020101010201010102010101 -020101010209010202000102020001010201010102010101020201010202010202000101 -020101010200010102000101020201020200010202000101020101010201010102010101 -0200010102010101020101010201010102010101020201010285000004030101020b0000 -0203040003020000020404000289010102050101020401010201010102020101020e0104 -0204010102040103020d0101020401010205010202020101020101010204010102050101 -020101010207010102020101020101010202010402040101020101010205010102020101 -020901010203010102010101020101010201010102080101020101010203010102010101 -020101010202010102010101020a01010206010102020101020101010202010102010101 -0201010102020101021a0100020001020200010002010101020101010201010102010101 -0201010102010101020d0101020101010201010102050101020201010202010102010101 -020101010200010102000101020201010201010102010101020501010201010202030101 -0201010102010101020101010202010002890103020b0000020304000302000002040400 -0289010102050101020501010200010002030101020e01010207010102060102020e0100 -020301010207010102010101020101010205010102040101020101010206010102030101 -020101010205010102040101020101010204010102020100020b01010203010102010101 -020101010201010102050104020101010203010102010101020101010202010102010101 -020a0101020301040202010102010101020201010201010502020101021a010002010101 -020001000201010102010101020101010201010102010105020d01010201010102010101 -020201040202010102020101020101010201010102000101020001010202010102010101 -0201010102020104020101010204010102010105020201010200010102890103020b0000 -02040400030000000205040002890101020501010205010302030101020e010102070101 -02070101020d010102030101020701010201010102010101020601020202010102010101 -0205010102040101020101010205010102040101020101010202010202030101020a0101 -020301010201010102010101020101010204010102010101020101010203010102010101 -020101010202010102010101020a01010202010102010101020201010201010102020101 -0201010102060101021a0100020201020201010102010101020101010201010102010101 -021101010201010102010101020101010201010102020101020201010201010102010101 -020101010200010102010101020101010201010102010101020101010201010102040101 -020101010206010102000100028a0103020b000002040400030000000205040002890101 -020501010206010102040101020e01010207010102030101020101010201010102080101 -020401010203010102010101020101010201010102010101020401010201010102010101 -020101010200010502010101020101010201010102010101020101010200010102010101 -0201010102060101020a0101020201010201010102010101020101010202010002000101 -02010101020101010203010102010101020101010202010102010101020a010102020101 -02010101020201010201010102020101020101010202010002010101021b010002020102 -020101010201010102010101020001020201010102020100020101010209010102010101 -020101010201010102010101020201010202010102010101020201010207010102010101 -0201010102010101020101010201010102040101020101010202010002030102028a0103 -020b0000020500000206040002890101020501010206010102040101020e010502030101 -020401030202010102080101020401010204010302030103020201010209010302020101 -0200010502020103020301030202010102010103020b0101020a01010202010102020103 -0203010302020102020001010201010202010101020201030203010102010101020b0102 -020101020200010102010104020301010202010302020101021b01000203010102020103 -020301010200010102020103020201010209010102010101020101010202010202000101 -020101010202010102010101020301050202010102010101020101010202010202000101 -02000101020401010202010302040101028b0103020b0000020d04000289010302110103 -0232010202190100023d0102020c01010237010602230101029e0101028c0103020b0000 -020d040002f2010002ff02540101028c0103020b0000020d040002ff02ff02d70103020c -040d02ff02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec0400 -020201030202000004ff04ff04ec0202010302ff02ff02f3010302020500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000202010302020000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000202010302020500000005ff05ff05ea01000202010302020000 -05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000 -05ff05ff05ea010005000202010302020500000005ff05ff05ea01000202010302020000 -050c06040504060005030602051f06040505060005040600050406000519060005020600 -0504060005270602050b06000506060005ff05ff05080600050206000509060205130100 -050002020103020205000000050b0600050f0600051f060005090600050a060005190600 -05020600052c060005020600050a060005ff05ff0510060005020600050b060005140100 -0202010302020000050c0600050606020505060005030602051806000506060105000600 -050206020502060405170600050206000502060205030602050206000502060005170600 -050206000501060005000601050206040502060205030602050206000500060105030602 -05ff05f306000502060005020602050506000502060005000601050c0100050002020103 -020205000000050b06000508060005050600050206000502060005170600050506000501 -06010504060005040600051a060005000600050506000502060005020600050106000502 -060005170600050206000501060105010600050306000506060005020600050206000501 -060105010600050106000502060005ff05f2060005020600050106000502060005040600 -0502060105010600050c01000202010302020000050c0603050506000505060005020600 -050206000517060305020600050206000504060005040600051a06000500060005050600 -050206000502060005010600050006000500060005170600050206000501060005020600 -0503060005060600050206000502060005010600050206000501060005ff05f606040501 -060005020600050406000502060005020600050b0100050002020103020205000000050b -06000508060005050600050206040517060005050600050206000504060005040600051a -060005000600050506000502060405010600050006000500060005170600050206000501 -0600050206000503060005060600050206000502060005010600050206000502060205ff -05f306000502060005010604050406000502060005020600050c01000202010302020000 -050c0600050806000505060005020600051b060005050600050206000504060005040600 -051b06000506060005020600050506000500060005000600051706000502060005010600 -050206000503060005060600050206000502060005010600050206000505060005ff05f2 -06000502060005010600050806000502060005020600050b010005000202010302020500 -0000050b0600050806000505060005020600050206000517060005050600050106010504 -060005040600051b06000506060005020600050206000501060005000600050006000517 -060005020600050106010501060005030600050606000502060005020600050106000502 -0600050106000502060005ff05f206000502060005010600050206000504060005020601 -05010600050c01000202010302020000050c060005080600050506000503060205180604 -050206010500060005040600050506010519060005060600050306020503060005000600 -051906020502060005000601050506010504060005030602050206000502060005020602 -05ff05f306000502060005020602050506000502060005000601050c0100050002020103 -02020500000005a8060005ff05ff052e0600051001000202010302020000050b0606052a -0606052a0606052a06060500060005ff05ff05180606050e0600050f0100050002020103 -020205000000050a0606052a0606052a0606052a06060500060005ff05ff05180606050e -060005100100020201030202000005ff05ff05ea010005000202010302020500000005ff -05ff05ea0100020201030202000005ff05ff05ea01000500020201030202050000000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100020201030202000005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01000500010005000100050002020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -020201030202053600000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000051a00000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050100000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050100000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000051a00000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000051a00000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000051a00000500000005000000050000000500000005000000050000000500 -00000500000005000000050000000500000005ff05a50202010302020535000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500010005180000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000100000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -010000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050001000518000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500010005180000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000100051800000500000005000000050000000500000005000000 -0500000005000000050000000500000005000000050000000500010005ff05a402020103 -02020536000005140100051a00000514010005010000051401000501000005140100051a -000005140100051a000005140100051a00000514010005ff05a502020103020205350000 -051601000518000005160100000005160100000005160100051800000516010005180000 -05160100051800000516010005ff05a40202010302020536000005140100051a00000514 -010005010000051401000501000005140100051a000005140100051a000005140100051a -00000514010005ff05a50202010302020535000005050602050306020506010005180000 -051601000000051601000000051601000518000005160100051800000516010005180000 -0516010005ff05a402020103020205360000050406020503060205050100051a00000514 -010005010000051401000501000005140100051a00000506060405080100051a00000508 -060105090100051a0000050806030507010005ff05a50202010302020535000005040604 -050106040505010005180000051006000504010000000510060005040100000005040600 -051001000518000005050608050701000518000005080603050901000518000005070607 -0506010005ff05a402020103020205360000050306000501060105010600050106010504 -0100051a0000050f06000503010005010000050f0600050301000501000005030600050f -0100051a00000503060a05050100051a00000507060305080100051a0000050506030501 -06030504010005ff05a5020201030202053500000503060d0504010005180000050d0600 -0501060005040100000005040600050a06000504010000000504060005010600050d0100 -051800000504060305020603050601000518000005090601050a01000518000005060602 -050306020505010005ff05a4020201030202053600000501060005000603050006020500 -060405020100051a0000050c060005010600050301000501000005030600050a06000503 -0100050100000503060005010600050c0100051a0000050206030504060305040100051a -000005140100051a000005050602050306020504010005ff05a502020103020205350000 -050206000500060305000602050006040503010005180000050a06000501060005010600 -050401000000050406000504060005040600050401000000050406000501060005010600 -050a01000518000005030602050306070503010005180000050706040509010005180000 -05070601050206020506010005ff05a40202010302020536000005010600050006030500 -06020500060405020100051a000005090600050106000501060005030100050100000503 -06000504060005040600050301000501000005030600050106000501060005090100051a -0000050206020504060505030100051a00000507060305080100051a0000050a06020506 -010005ff05a5020201030202053500000502060005000603050006020500060405030100 -051800000507060005010600050106000501060005040100000005040600050406000501 -060005010600050401000000050406000501060005010600050106000507010005180000 -05030602050506030505010005180000050906020509010005180000050a060205080100 -05ff05a40202010302020536000005010600050006070500060405020100051a00000506 -060005010600050106000501060005030100050100000503060005040600050106000501 -060005030100050100000503060005010600050106000501060005060100051a00000502 -06030505060105050100051a00000508060205080100051a0000050806020508010005ff -05a502020103020205350000050206000500060405010600050006040503010005180000 -050406000501060005010600050106000501060005040100000005040600050106000501 -060005010600050106000504010000000504060005010600050106000501060005010600 -050401000518000005040603050d01000518000005090602050901000518000005090602 -0509010005ff05a402020103020205360000050106060501060605020100051a00000503 -060005010600050106000501060005010600050301000501000005030600050106000501 -060005010600050106000503010005010000050306000501060005010600050106000501 -060005030100051a00000503060905060100051a00000508060205080100051a00000514 -010005ff05a5020201030202053500000502060005000602050506000500060205030100 -051800000504060005010600050106000501060005010600050401000000050406000501 -060005010600050106000501060005040100000005040600050106000501060005010600 -050106000504010005180000050506070508010005180000050806040508010005180000 -050906020509010005ff05a4020201030202053600000501060005000602050506000500 -060205020100051a00000503060005010600050106000501060005010600050301000501 -000005030600050106000501060005010600050106000503010005010000050306000501 -060005010600050106000501060005030100051a00000506060405080100051a00000506 -060605060100051a0000050806020508010005ff05a50202010302020535000005020604 -050506040503010005180000051601000000051601000000051601000518000005160100 -0518000005160100051800000516010005ff05a40202010302020536000005140100051a -00000514010005010000051401000501000005140100051a000005140100051a00000514 -0100051a00000514010005ff05a502020103020205350000051601000518000005160100 -000005160100000005160100051800000516010005180000051601000518000005160100 -05ff05a40202010302020536000005140100051a00000514010005010000051401000501 -000005140100051a000005140100051a000005140100051a00000514010005ff05a50202 -010302020535000005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005180000050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -000005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010000000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000518000005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005180000050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100051800000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005ff05a402020103020205360100050001000500010005000100050001000500 -0100050001000500010005000100050001000500010005000100051a0100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005010100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005010100050001000500010005000100050001000500 -0100050001000500010005000100050001000500010005000100051a0100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100051a0100050001000500010005000100050001000500010005000100050001000500 -0100050001000500010005000100051a0100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005ff05a5020201030202 -05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 -05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 -05ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed020201030202 -05ff05ff05ed02020103020205ff05ff05ed020201030202050301ff01ff01e505030202 -01030202050301ff01ff01d1050000000500000005000000050000000500000005000000 -050000000500000005000000050001000503020201030202050301ff01ff01d100000500 -000005000000050000000500000005000000050000000500000005000000050001010503 -020201030202050301020bff0bff0bcb010205000000050e010005000100050302020103 -0202050301020bff0bff0bca000001020000051001010503020201030202050301020b01 -00ff00ff00c9010205000000050e0100050001000503020201030202050301020b0100ff -00ff00c901020000051001010503020201030202050301020b0100ff00ff00c901020500 -0000050e0100050001000503020201030202050301020b0100ff00ff00c9010200000510 -01010503020201030202050301020b0100ff00ff00c9010205000000050e010005000100 -0503020201030202050301020b0100ff00ff00c9010200000502010a0502010105030202 -01030202050301020b0100ff00ff00c90102050000000502010805020100050001000503 -020201030202050301020b0100ff00ff00c9010200000504010605040101050302020103 -0202050301020b0100ff00ff00c901020500000005040104050401000500010005030202 -01030202050301020b0100ff00ff00c90102000005060102050601010503020201030202 -050301020b0100ff00ff00c9010205000000050601000506010005000100050302020103 -0202050301020b0100ff00ff00c901020000051001010503020201030202050301020b01 -00ff00ff00c9010205000000050e0100050001000503020201030202050301020b0100ff -00ff00c901020000051001010503020201030202050301020b0100ff00ff00c901020500 -0000050e0100050001000503020201030202050301020b0100ff00ff00c9010200000510 -01010503020201030202050301020b0100ff00ff00c9010205000000050e010005000100 -0503020201030202050301020b0000ff00ff00ca01020000051001010503020201030202 -050301ff01ff01d105000000050001000500010005000100050001000500010005000100 -0500010005000100050001000503020201030202050301ff01ff01d10000050001000500 -010005000100050001000500010005000100050001000500010005000101050302020103 -0202050301ff01ff01e5050302020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -02020103020205ff05ff05ed02020103020205ff05ff05ed02020103020205ff05ff05ed -020201030202050301ff01ff01e505030202010302020503010005ff05ff05970100054a -01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103 -0202050301000562010705ff05ff052c0100054a01000503020201030202050301000561 -01020503010205ff05ff052b0100054a0100050302020103020205030100056101010505 -010105ff05ff052b0100054a0100050302020103020205030100056101020503010205ff -05ff052b0100054a01000503020201030202050301000562010705ff05ff052c0100054a -01000503020201030202050301000563010505ff05ff052d0100054a0100050302020103 -0202050301000565010105ff05ff052f0100054a01000503020201030202050301000565 -010105ff05ff052f0100054a01000503020201030202050301000565010105ff05ff052f -0100054a01000503020201030202050301000565010105ff05ff052f0100054a01000503 -020201030202050301000565010105ff05ff052f0100054a010005030202010302020503 -01000565010105ff05ff052f0100054a0100050302020103020205030100056101010500 -010205ff05ff052f0100054a0100050302020103020205030100056101010500010205ff -05ff052f0100054a01000503020201030202050301000561010505ff05ff052f0100054a -01000503020201030202050301000561010505ff05ff052f0100054a0100050302020103 -020205030100056101020500010105ff05ff052f0100054a010005030202010302020503 -010005ff05ff05970100054a01000503020201030202050301ff01ff0199054a01000503 -020201030202050301000536000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -00000500000005000000050000000500000005000000050000000a040500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000a04050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -0000050000000500000005000000050000000a0405000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -05000000050000000500000005000000050000000500000005000000050000000a040500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000a04050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500000005000000050000000500000005000000050000000a0405000000010005140100 -050001000500010005000100050001000500010005000100050001000500010005240100 -050302020103020205030100053500000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500000005000000050000000500000005000000050000000500000005000a0301000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000a03010000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -05000000050000000500000005000000050000000500000005000a030100000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -0500000005000a0301000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000a03010000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -05000a030100000005000100051301000500010005000100050001000500010005000100 -050001000500010005000100050000000523010005030202010302020503010005360000 -055e01000a01010205000000055c01000a01010205000000055c01000a01010205000000 -055c01000a01010205000000055c01000a01010205000000055c01000a01010205000000 -010005140100050000000500000005000000050000000500000005000000050000000500 -00000524010005030202010302020503010005350000052d0100052f010005000a010102 -0000052b0102052d010005000a0101020000052b0102052d010005000a0101020000052d -0100052d010005000a0101020000052a0104052c010005000a0101020000052c0102052c -010005000a01010200000500010005130100050000000500000005000000050000000500 -000005000000050000000500010005000000052301000503020201030202050301000536 -0000052a0102053001000a010102050000000529010005020100052d01000a0101020500 -00000529010005020100052d01000a01010205000000052b0101052e01000a0101020500 -000005290100053101000a01010205000000052a0100053001000a010102050000000100 -0514010005000000050a0100050000000524010005030202010302020503010005350000 -052d0100052f010005000a0101020000052a010005020100052c010005000a0101020000 -052e0100052c010005000a0101020000052b010005000100052d010005000a0101020000 -052a01000530010005000a0101020000052a01000530010005000a010102000005000100 -0513010005000000050c0100050000000523010005030202010302020503010005360000 -052c0100053001000a010102050000000529010005020100052d01000a01010205000000 -052d0100052d01000a01010205000000052a010005000100052e01000a01010205000000 -05290100053101000a0101020500000005290100053101000a0101020500000001000514 -010005000000050a0100050000000524010005030202010302020503010005350000052d -0100052f010005000a0101020000052d0100052d010005000a0101020000052c0101052d -010005000a0101020000052a010005010100052d010005000a0101020000052a0103052d -010005000a0101020000052a0103052d010005000a010102000005000100051301000500 -0000050c0100050000000523010005030202010302020503010005360000052c01000530 -01000a01010205000000052b0100052f01000a01010205000000052d0100052d01000a01 -0102050000000528010005020100052e01000a01010205000000052d0100052d01000a01 -0102050000000529010005020100052d01000a0101020500000001000514010005000000 -050a0100050000000524010005030202010302020503010005350000052d0100052f0100 -05000a0101020000052b0100052f010005000a0101020000052e0100052c010005000a01 -0102000005290105052c010005000a0101020000052e0100052c010005000a0101020000 -052a010005020100052c010005000a0101020000050001000513010005000000050c0100 -050000000523010005030202010302020503010005360000052c0100053001000a010102 -050000000529010005020100052d01000a010102050000000529010005020100052d0100 -0a01010205000000052c0100052e01000a010102050000000528010005030100052d0100 -0a010102050000000529010005020100052d01000a010102050000000100051401000500 -0000050a0100050000000524010005030202010302020503010005350000052b0104052d -010005000a0101020000052a0104052c010005000a0101020000052b0102052d01000500 -0a0101020000052c0102052c010005000a0101020000052a0103052d010005000a010102 -0000052b0102052d010005000a0101020000050001000513010005000000050c01000500 -00000523010005030202010302020503010005360000055e01000a01010205000000055c -01000a01010205000000055c01000a01010205000000055c01000a01010205000000055c -01000a01010205000000055c01000a0101020500000001000514010005000000050a0100 -050000000524010005030202010302020503010005350000055e010005000a0101020000 -055c010005000a0101020000055c010005000a0101020000055c010005000a0101020000 -055c010005000a0101020000055c010005000a0101020000050001000513010005000000 -050c0100050000000523010005030202010302020503010005360000055e01000a010102 -05000000055c01000a01010205000000055c01000a01010205000000055c01000a010102 -05000000055c01000a01010205000000055c01000a010102050000000100050e01000504 -010005000000050a0100050000000524010005030202010302020503010005350000055e -010005000a0101020000055c010005000a0101020000055c010005000a0101020000055c -010005000a0101020000055c010005000a0101020000055c010005000a01010200000500 -0100050d01010503010005000000050c0100050000000523010005030202010302020503 -010005360000055e01000a01010205000000055c01000a01010205000000055c01000a01 -010205000000055c01000a01010205000000055c01000a01010205000000055c01000a01 -0102050000000100050c0100050001000504010005000000050001000500010005000100 -050001000500010005000100050000000524010005030202010302020503010005350000 -055e010005000a0101020000055c010005000a0101020000055c010005000a0101020000 -055c010005000a0101020000055c010005000a0101020000055c010005000a0101020000 -05000100050e010005030100050000000500000005000000050000000500000005000000 -050000000500010005000000052301000503020201030202050301000536000005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -05000100050001000a010102050000000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005000100050001000500010005000100050001000a0101020500000005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000a01010205000000050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -05000100050001000500010005000100050001000a010102050000000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0a0101020500000005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000a010102050000000100050e0100050401000500 -0000050a0100050000000524010005030202010302020503010005350000050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01000500010005000a000103000005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100050001000500010005000100050001000500010005000a0001030000050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000a00010300000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01000500010005000100050001000500010005000a000103000005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0a0001030000050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000a000103000005000100050e0100050301000500 -0000050c0100050000000523010005030202010302020503010005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000063010000630100 -0063010000630100006301000063010000020100050e01000504010005000000050a0100 -050000000524010005030202010302020503010000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050001000063010000630100006301000063 -0100006301000063010000020100050e01000503010005000000050c0100050000000523 -010005030202010302020503010005000000053201000500006301000063010000630100 -00630100006301000063010000020100050c01040502010005000000050a010005000000 -052401000503020201030202050301000000053401000063010000630100006301000063 -01000063010000630100000201000513010005000000050c010005000000052301000503 -020201030202050301000500000005170100051901000500006301000063010000630100 -006301000063010000630100000201000514010005000000050a01000500000005240100 -050302020103020205030100000005160102051a0100000f010200030102004901000007 -010000230100000b010200030102001f0100006301000063010000630100006301000002 -01000513010005000000050c010005000000052301000503020201030202050301000500 -0000051701000519010005000011010000050100004901000007010000230100000d0100 -00050100001f010000630100006301000063010000630100000201000514010005000000 -050a01000500000005240100050302020103020205030100000005180100051a01000008 -010200050100000501000003010200420100000701000000010100030102000201000000 -01010002010000000101000301020002010400010100000201000004010000050100001f -010000630100006301000063010000630100000201000513010005000000050c01000500 -000005230100050302020103020205030100050000000517010005190100050000070100 -000201000004010000050100000201000002010000410100000701010001010000010100 -000201000001010100010100000101010001010000010100000201000003010000030100 -000201000004010000050100001f01000063010000630100006301000063010000020100 -0514010005000000050a0100050000000524010005030202010302020503010000000518 -0100051a0100000701000002010000040100000501000002010000020100004101000007 -010000020100000101000002010000010100000501000002010000010100000701000003 -0100000201000004010000050100001f0100006301000063010000630100006301000002 -01000513010005000000050c010005000000052301000503020201030202050301000500 -000005170100051901000500000701000002010000040100000501000002010400410100 -000701000002010000010100000201000001010000050100000201000002010200040100 -00030100000201000004010000050100001f010000630100006301000063010000630100 -000201000514010005000000050001000500010005000100050001000500010005000100 -0500000005240100050302020103020205030100000005180100051a0100000701000002 -010000040100000501000002010000450100000701000002010000010100000201000001 -01000005010000020100000501000003010000030100000201000004010000050100001f -010000630100006301000063010000630100000201000513010005000000050001000500 -010005000100050001000500010005000100050001000500000005230100050302020103 -020205030100050000000515010405170100050000070100000201000004010000050100 -000201000002010000410100000701000002010000010100000201000001010000050100 -0002010000010100000201000003010000030100000101010004010000050100001f0100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -010302020503010000000534010000080102000501000005010000030102004201000007 -010000020100000201020002010000050100000201000002010200050101000201010000 -01000004010000050100001f010000630100006301000063010000630100000201000513 -01000500030e050000000523010005030202010302020503010005000000053201000500 -0063010000630100006301000063010000630100006301000002010005140100030e0000 -052401000503020201030202050301000000053401000063010000630100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -020205030100050000000532010005000063010000630100006301000063010000630100 -006301000002010005140100030e00000524010005030202010302020503010000000534 -010000630100006301000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000500000005320100050000630100 -00630100006301000063010000630100006301000002010005140100030e000005240100 -050302020103020205030100000005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010000630100006301000063010000630100006301000063 -010000020100051301000500030e05000000052301000503020201030202050301000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01ff01ff016105140100030e000005240100050302020103020205030100050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000630100 -006301000063010000630100006301000063010000020100051301000500030e05000000 -052301000503020201030202050301000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000100006301000063010000630100006301000063 -0100006301000002010005140100030e0000052401000503020201030202050301000500 -000005320100050000630100006301000063010000630100006301000063010000020100 -051301000500030e05000000052301000503020201030202050301000000053401000063 -010000630100006301000063010000630100006301000002010005140100030e00000524 -010005030202010302020503010005000000051601020518010005000063010000630100 -0063010000630100006301000063010000020100051301000500030e0500000005230100 -0503020201030202050301000000051601000502010005180100001f0100000301020003 -010200340100000f01020050010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000500000005150100050201000517 -010005000026010000050100003401000011010000500100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -000005160100050201000518010000080101000001000001010000020100000101000000 -010100030102000501000005010000030102002d01000008010200050100000201000002 -01000002010200030102000301020002010000000101002d010000630100006301000063 -0100006301000002010005140100030e0000052401000503020201030202050301000500 -000005180100051801000500000701000001010100010100000201000001010100010100 -0004010000050100000501000002010000020100002c0100000701000002010000040100 -000201000002010000010100000201000001010000020100000101000002010000010101 -00010100002c01000063010000630100006301000063010000020100051301000500030e -0500000005230100050302020103020205030100000005180100051a0100000701000002 -01000001010000020100000101000002010000040100000501000005010000060100002c -010000070100000801000002010000020100000101000005010000050100000201000001 -010000020100002c0100006301000063010000630100006301000002010005140100030e -0000052401000503020201030202050301000500000005160100051a0100050000070100 -000201000001010000020100000101000002010000040100000501000005010000030103 -002c01000008010200050100000201000002010000020102000301020002010400010100 -00020100002c01000063010000630100006301000063010000020100051301000500030e -050000000523010005030202010302020503010000000516010005020100051801000007 -010000020100000101000002010000010100000201000004010000050100000501000002 -010000020100002c0100000b010000040100000201000002010000050100000501000001 -01000005010000020100002c010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000500000005150104051701000500 -000701000001010100010100000101010001010000020100000401000005010000050100 -0002010000020100002c0100000701000002010000040100000201000001010100010100 -00020100000101000002010000010100000201000001010000020100002c010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010000000534010000080101000001000002010100000100000101000002 -010000040100000501000005010000030103002c01000008010200050100000301010000 -01000002010200030102000301020002010000020100002c010000630100006301000063 -0100006301000002010005140100030e0000052401000503020201030202050301000500 -0000053201000500000b0100005601000063010000630100006301000063010000630100 -00020100051301000500030e050000000523010005030202010302020503010000000534 -010000070100000201000056010000630100006301000063010000630100006301000002 -010005140100030e00000524010005030202010302020503010005000000053201000500 -000801020057010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005340100006301000063 -0100006301000063010000630100006301000002010005140100030e0000052401000503 -020201030202050301000500000005320100050000630100006301000063010000630100 -006301000063010000020100051301000500030e05000000052301000503020201030202 -050301000000050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100006301000063010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01000500010005000100050001000500010005000100050001ff01ff0161051301000500 -030e05000000052301000503020201030202050301000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500006301000063010000630100 -0063010000630100006301000002010005140100030e0000052401000503020201030202 -050301000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000100006301000063010000630100006301000063010000630100000201000513 -01000500030e050000000523010005030202010302020503010005000000053201000500 -0063010000630100006301000063010000630100006301000002010005140100030e0000 -052401000503020201030202050301000000053401000063010000630100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -020205030100050000000516010205180100050000630100006301000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -00000516010005020100051801000063010000070100005a010000630100006301000063 -01000063010000020100051301000500030e050000000523010005030202010302020503 -010005000000051901000517010005000063010000070100005a01000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -0000051a0100051801000008010200020100000001010002010000000101000301020042 -010000070100000001010002010000000101000301020002010100000100000201010000 -010000030102003401000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000500000005170101051801000500 -000701000002010000010101000101000001010100010100000101000002010000410100 -000701010001010000010101000101000001010000020100000101000000010000000100 -000101000000010000000100000101000002010000330100006301000063010000630100 -006301000002010005140100030e0000052401000503020201030202050301000000051a -010005180100000b01000001010000020100000101000002010000050100004101000007 -010000020100000101000005010000020100000101000000010000000100000101000000 -010000000100000501000033010000630100006301000063010000630100000201000513 -01000500030e050000000523010005030202010302020503010005000000051901000517 -010005000008010300010100000201000001010000020100000201030041010000070100 -000201000001010000050100000201000001010000000100000001000001010000000100 -000001000002010300330100006301000063010000630100006301000002010005140100 -030e00000524010005030202010302020503010000000516010005020100051801000007 -010000020100000101000002010000010100000201000001010000020100004101000007 -010000020100000101000005010000020100000101000000010000000100000101000000 -010000000100000101000002010000330100006301000063010000630100006301000002 -0100051301000500030e0500000005230100050302020103020205030100050000000516 -010205180100050000070100000201000001010000020100000101000002010000010100 -000201000041010000070101000101000001010000050100000201000001010000000100 -000001000001010000000100000001000001010000020100003301000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -000005340100000801030001010000020100000101000002010000020103004101000007 -010000000101000201000006010200020100000001000000010000010100000001000000 -010000020103003301000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000500000005320100050000630100 -00630100006301000063010000630100006301000002010005140100030e000005240100 -050302020103020205030100000005340100006301000063010000630100006301000063 -01000063010000020100051301000500030e050000000523010005030202010302020503 -010005000000053201000500006301000063010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000000053401000063 -0100006301000063010000630100006301000063010000020100051301000500030e0500 -000005230100050302020103020205030100050000000532010005000063010000630100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -010302020503010000000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000063010000630100006301000063010000630100006301000002 -0100051301000500030e0500000005230100050302020103020205030100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001ff01ff -016105140100030e00000524010005030202010302020503010005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000063010000630100 -0063010000630100006301000063010000020100051301000500030e0500000005230100 -050302020103020205030100000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500010000630100006301000063010000630100006301000063 -01000002010005140100030e000005240100050302020103020205030100050000000532 -010005000063010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005340100006301000063 -0100006301000063010000630100006301000002010005140100030e0000052401000503 -020201030202050301000500000005180100051801000500006301000063010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010000000518010105190100001001000006010000490100000e0100001c -0100000b010200030102001f010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000500000005160100050001000518 -010005000010010000510100000e0100001c0100000d010000050100001f010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010000000517010005000100051901000008010200020104000201020002 -01000000010100030102003b010000080102000201000001010000030102000201000000 -0101000301020002010400010100000201000004010000050100001f0100006301000063 -010000630100006301000002010005140100030e00000524010005030202010302020503 -010005000000051501000501010005180100050000070100000201000003010000060100 -00020101000101000001010000020100003a010000070100000201000001010000000100 -000301000002010000010101000101000001010000020100000301000003010000020100 -0004010000050100001f0100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005150100050201000519 -0100000701000007010000060100000201000002010000050100003a0100000701000005 -010100080100000101000002010000010100000701000003010000020100000401000005 -0100001f0100006301000063010000630100006301000002010005140100030e00000524 -010005030202010302020503010005000000051401050517010005000008010200040100 -00060100000201000002010000020103003a010000080102000201010005010300010100 -00020100000201020004010000030100000201000004010000050100001f010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010000000519010005190100000b01000003010000060100000201000002 -01000001010000020100003a0100000b0100000101000000010000030100000201000001 -010000020100000501000003010000030100000201000004010000050100001f01000063 -01000063010000630100006301000002010005140100030e000005240100050302020103 -020205030100050000000517010205170100050000070100000201000003010000060100 -00020100000201000001010000020100003a010000070100000201000001010000010100 -000201000002010000010100000201000001010000020100000301000003010000010101 -0004010000050100001f0100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005340100000801020005 -010100040100000201000002010000020103003a01000008010200020100000201000002 -01030001010000020100000201020005010100020101000001000004010000050100001f -0100006301000063010000630100006301000002010005140100030e0000052401000503 -020201030202050301000500000005320100050000630100006301000063010000630100 -006301000063010000020100051301000500030e05000000052301000503020201030202 -050301000000053401000063010000630100006301000063010000630100006301000002 -010005140100030e00000524010005030202010302020503010005000000053201000500 -00630100006301000063010000630100006301000063010000020100051301000500030e -050000000523010005030202010302020503010000000534010000630100006301000063 -01000063010000630100006301000002010005140100030e000005240100050302020103 -020205030100050000000532010005000063010000630100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -000005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01000063010000630100006301000063010000630100006301000002010005140100030e -000005240100050302020103020205030100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001ff01ff0161051301000500030e0500 -0000052301000503020201030202050301000a3600630100006301000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -0a3501000063010000630100006301000063010000630100006301000002010005130100 -0500030e05000000052301000503020201030202050301000a0101340063010000630100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -01030202050301000a010134006301000063010000630100006301000063010000630100 -00020100051301000500030e05000000052301000503020201030202050301000a010115 -000401190063010000630100006301000063010000630100006301000002010005140100 -030e0000052401000503020201030202050301000a0101150000011d00070100000e0100 -0014010000340100002b0102003401000063010000630100006301000063010000020100 -051301000500030e05000000052301000503020201030202050301000a0101150000011d -00070100000e0100004a0100002d01000034010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000a0101150000011d -000701000001010000030102000201040002010200020100000001010003010200020100 -000001010003010200260100000701000002010000010100000001010002010000000101 -00030102000301020005010000030102002d010000630100006301000063010000630100 -00020100051301000500030e05000000052301000503020201030202050301000a010115 -0003011a0007010000000100000301000002010000030100000301000002010000010101 -000101000004010000020101000101000001010000020100002501000007010000020100 -000101010001010000010101000101000001010000020100000101000002010000040100 -0002010000020100002c0100006301000063010000630100006301000002010005140100 -030e0000052401000503020201030202050301000a010119000001190007010100080100 -000301000007010000010100000801000002010000020100000501000025010000070100 -000201000001010000020100000101000002010000010100000901000004010000060100 -002c01000063010000630100006301000063010000020100051301000500030e05000000 -052301000503020201030202050301000a01011900000119000701010005010300030100 -000401030001010000080100000201000002010000020103002501000007010000020100 -0001010000020100000101000002010000020102000301030004010000030103002c0100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -01030202050301000a010114000001030000011900070100000001000003010000020100 -000301000003010000020100000101000008010000020100000201000001010000020100 -002501000007010000020100000101000002010000010100000201000005010000010100 -00020100000401000002010000020100002c010000630100006301000063010000630100 -00020100051301000500030e05000000052301000503020201030202050301000a010115 -0003011a0007010000010100000201000002010000030100000301000002010000010100 -000801000002010000020100000101000002010000250100000701000001010100010101 -000101000001010100010100000101000002010000010100000201000004010000020100 -00020100002c0100006301000063010000630100006301000002010005140100030e0000 -052401000503020201030202050301000a01013400070100000201000002010300040101 -000201030001010000080100000201000002010000020103002501000008010100000100 -0001010000000101000201000000010100030102000301030004010000030103002c0100 -0063010000630100006301000063010000020100051301000500030e0500000005230100 -0503020201030202050301000a01013400630100000e010000050100004c010000630100 -0063010000630100006301000002010005140100030e0000052401000503020201030202 -050301000a01013400630100000e010000050100004c0100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -0a01013400630100000e010000050100004c010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000a01013400630100 -006301000063010000630100006301000063010000020100051301000500030e05000000 -052301000503020201030202050301000a01013400630100006301000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -0a0101340063010000630100006301000063010000630100006301000002010005130100 -0500030e05000000052301000503020201030202050301000a0001ff01ff019705140100 -030e00000524010005030202010302020503010005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000063010000630100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -020205030100000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500010000630100006301000063010000630100006301000063010000020100 -05140100030e000005240100050302020103020205030100050000000532010005000063 -0100006301000063010000630100006301000063010000020100051301000500030e0500 -000005230100050302020103020205030100000005340100006301000063010000630100 -0063010000630100006301000002010005140100030e0000052401000503020201030202 -050301000500000005170102051701000500006301000063010000630100006301000063 -01000063010000020100051301000500030e050000000523010005030202010302020503 -0100000005170100051b0100000a0100001a01010004010000340100000f0102000c0100 -00020100003e0100006301000063010000630100006301000002010005140100030e0000 -052401000503020201030202050301000500000005150100051b0100050000250100003c -01000011010000100100003e010000630100006301000063010000630100000201000513 -01000500030e0500000005230100050302020103020205030100000005160100051c0100 -000801020003010200030102000301020004010000040102000201000000010100030102 -0026010000080102000501000002010000020100000201020002010000010100003b0100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -01030202050301000500000005150103051801000500000a010000020100000201000001 -010000020100000101000002010000010104000401000002010100010100000101000002 -010000250100000701000002010000040100000201000002010000040100000201000000 -0100003c01000063010000630100006301000063010000020100051301000500030e0500 -0000052301000503020201030202050301000000051601000502010005180100000a0100 -000201000002010000010100000501000002010000030100000601000002010000020100 -000101000002010000250100000b01000004010000020100000201000004010000020101 -003d0100006301000063010000630100006301000002010005140100030e000005240100 -050302020103020205030100050000000515010005020100051701000500000a01000002 -010000020100000201020002010400030100000601000002010000020100000101040025 -0100000801030004010000030100000001000005010000020101003d0100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -0202050301000000051601000502010005180100000a0100000201000002010000050100 -000101000007010000060100000201000002010000010100002901000007010000020100 -000401000003010000000100000501000002010000000100003c01000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -0500000005160102051801000500000a0100000201000002010000010100000201000001 -010000020100000301000006010000020100000201000001010000020100002501000007 -0100000201000004010000040100000601000002010000010100003b0100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -020205030100000005340100000a01000003010200030102000301020004010000060100 -000201000002010000020102002601000008010300040100000401000006010000020100 -00020100003a0100006301000063010000630100006301000002010005140100030e0000 -0524010005030202010302020503010005000000053201000500000a0100005701000063 -01000063010000630100006301000063010000020100051301000500030e050000000523 -010005030202010302020503010000000534010000070100000101000057010000630100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -010302020503010005000000053201000500000801010058010000630100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -020205030100000005340100006301000063010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000500000005320100 -050000630100006301000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000000050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100006301000063010000630100 -0063010000630100006301000002010005140100030e0000052401000503020201030202 -050301000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -05000100050001ff01ff0161051301000500030e05000000052301000503020201030202 -050301000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500006301000063010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000100006301000063010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010005000000053201000500006301000063010000630100006301000063 -0100006301000002010005140100030e0000052401000503020201030202050301000000 -053401000063010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100050000000515010405170100 -05000063010000630100006301000063010000630100006301000002010005140100030e -0000052401000503020201030202050301000000051601000502010005180100000a0101 -00130100000b0100000201000030010000250100000b0102000301020026010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010005000000051801000518010005000009010000150100000f01000030 -010000250100000d01000005010000260100006301000063010000630100006301000002 -010005140100030e00000524010005030202010302020503010000000519010005190100 -000901000003010000000101000301020003010100000100000101000000010100030102 -0002010000010100002d0100000701000000010100030102000201000000010100020100 -000001010002010400010100000201000004010000050100002601000063010000630100 -006301000063010000020100051301000500030e05000000052301000503020201030202 -050301000500000005180100051801000500000701040001010100010100000101000002 -010000010100000101010001010100010100000401000002010000000100002e01000007 -010100010100000101000002010000010101000101000001010100010100000301000003 -010000020100000401000005010000260100006301000063010000630100006301000002 -010005140100030e00000524010005030202010302020503010000000519010005190100 -000901000003010000050100000201000001010000020100000101000008010000020101 -002f01000007010000020100000101000002010000010100000501000007010000030100 -000201000004010000050100002601000063010000630100006301000063010000020100 -051301000500030e05000000052301000503020201030202050301000500000005170100 -051901000500000901000003010000050104000101000002010000010100000801000002 -0101002f0100000701000002010000010100000201000001010000050100000701000003 -010000020100000401000005010000260100006301000063010000630100006301000002 -010005140100030e000005240100050302020103020205030100000005180100051a0100 -000901000003010000050100000501000002010000010100000801000002010000000100 -002e01000007010000020100000101000002010000010100000501000007010000030100 -000201000004010000050100002601000063010000630100006301000063010000020100 -051301000500030e05000000052301000503020201030202050301000500000005170100 -051901000500000901000003010000050100000201000001010000010101000101000008 -01000002010000010100002d010000070100000201000001010000020100000101000005 -010000070100000301000001010100040100000501000026010000630100006301000063 -0100006301000002010005140100030e0000052401000503020201030202050301000000 -053401000009010000030100000601020003010100000100000101000008010000020100 -00020100002c010000070100000201000002010200020100000501000008010100020101 -000001000004010000050100002601000063010000630100006301000063010000020100 -051301000500030e05000000052301000503020201030202050301000500000005320100 -05000063010000630100006301000063010000630100006301000002010005140100030e -000005240100050302020103020205030100000005340100006301000063010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010005000000053201000500006301000063010000630100006301000063 -0100006301000002010005140100030e0000052401000503020201030202050301000000 -053401000063010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100050000000532010005000063 -010000630100006301000063010000630100006301000002010005140100030e00000524 -010005030202010302020503010000000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000063010000630100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001ff01ff016105140100030e0000052401000503020201030202050301000e360063 -0100006301000063010000630100006301000063010000020100051301000500030e0500 -0000052301000503020201030202050301000e350d000063010000630100006301000063 -010000630100006301000002010005140100030e00000524010005030202010302020503 -01000e0107320d0100630100006301000063010000630100006301000063010000020100 -051301000500030e05000000052301000503020201030202050301000e0107320d010063 -010000630100006301000063010000630100006301000002010005140100030e00000524 -01000503020201030202050301000e010716010207180d01006301000063010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -01030202050301000e01071501000702010007170d01006301000010010000200102002d -0100006301000063010000630100006301000002010005140100030e0000052401000503 -020201030202050301000e01071501000702010007170d01006301000010010000220100 -002d01000063010000630100006301000063010000020100051301000500030e05000000 -052301000503020201030202050301000e01071501000702010007170d01000701000000 -010100030102000201000000010100490100000801020002010400010100000201000001 -01000000010100030102000201000000010100050100000301020002010000000101001f -0100006301000063010000630100006301000002010005140100030e0000052401000503 -020201030202050301000e010716010207180d0100070101000101000001010000020100 -000101010001010000480100000701000002010000030100000301000002010000010101 -000101000001010000020100000101010001010000040100000201000002010000010101 -00010100001e01000063010000630100006301000063010000020100051301000500030e -05000000052301000503020201030202050301000e01071501000702010007170d010007 -010000020100000101000002010000010100004c01000007010000070100000301000002 -010000010100000501000002010000010100000201000004010000060100000101000002 -0100001e0100006301000063010000630100006301000002010005140100030e00000524 -01000503020201030202050301000e01071501000702010007170d010007010000020100 -0001010400010100004c0100000801020004010000030100000201000001010000050104 -000101000002010000040100000301030001010000020100001e01000063010000630100 -006301000063010000020100051301000500030e05000000052301000503020201030202 -050301000e01071501000702010007170d0100070100000201000001010000050100004c -0100000b0100000301000003010000020100000101000005010000050100000201000004 -010000020100000201000001010000020100001e01000063010000630100006301000063 -01000002010005140100030e0000052401000503020201030202050301000e0107160102 -07180d010007010100010100000101000002010000010100004c01000007010000020100 -000301000003010000010101000101000005010000020100000101010001010000040100 -00020100000201000001010000020100001e010000630100006301000063010000630100 -00020100051301000500030e05000000052301000503020201030202050301000e010732 -0d0100070100000001010003010200020100004c01000008010200050101000201010000 -01000001010000060102000201000000010100050100000301030001010000020100001e -0100006301000063010000630100006301000002010005140100030e0000052401000503 -020201030202050301000e0107320d0100070100005a0100002a01000037010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -01030202050301000e0107320d0100070100005a0100002a010000370100006301000063 -010000630100006301000002010005140100030e00000524010005030202010302020503 -01000e0107320d0100070100005a0100002a010000370100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -0e0107320d01006301000063010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000e0107320d010063010000630100 -0063010000630100006301000063010000020100051301000500030e0500000005230100 -0503020201030202050301000e010d340063010000630100006301000063010000630100 -006301000002010005140100030e0000052401000503020201030202050301000e000d35 -01ff01ff0161051301000500030e05000000052301000503020201030202050301000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -0063010000630100006301000063010000630100006301000002010005140100030e0000 -052401000503020201030202050301000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000100006301000063010000630100006301000063 -01000063010000020100051301000500030e050000000523010005030202010302020503 -010005000000053201000500006301000063010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000000053401000063 -0100006301000063010000630100006301000063010000020100051301000500030e0500 -000005230100050302020103020205030100050000000516010205180100050000630100 -00630100006301000063010000630100006301000002010005140100030e000005240100 -0503020201030202050301000000051601000502010005180100001f0100004201000012 -010000170102003401000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000500000005150100050201000517 -010005000063010000120100001901000034010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000000051601000502 -01000518010000070101000001000003010200020100000001010003010200030102003b -010000080102000301010000010000020102000201000000010100020100000001010005 -010000030102000201000000010100260100006301000063010000630100006301000002 -0100051301000500030e0500000005230100050302020103020205030100050000000515 -010005020100051701000500000701000000010000000100000101000002010000010101 -00010100000401000002010000020100003a010000070100000201000001010000010101 -000101000002010000010101000101000001010100010100000401000002010000020100 -000101010001010000250100006301000063010000630100006301000002010005140100 -030e00000524010005030202010302020503010000000517010305180100000701000000 -01000000010000050100000101000008010000060100003a010000070100000201000001 -010000020100000101000002010000010100000201000001010000020100000401000006 -010000010100000201000025010000630100006301000063010000630100000201000513 -01000500030e050000000523010005030202010302020503010005000000051901000517 -0100050000070100000001000000010000020103000101000008010000030103003a0100 -000701000002010000010100000201000001010400010100000201000001010000020100 -000401000003010300010100000201000025010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000000051901000519 -010000070100000001000000010000010100000201000001010000080100000201000002 -0100003a0100000701000002010000010100000201000001010000050100000201000001 -010000020100000401000002010000020100000101000002010000250100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -020205030100050000000515010205190100050000070100000001000000010000010100 -0002010000010100000801000002010000020100003a0100000701000002010000010100 -000101010001010000020100000101000002010000010101000101000004010000020100 -000201000001010000020100002501000063010000630100006301000063010000020100 -05140100030e000005240100050302020103020205030100000005340100000701000000 -01000000010000020103000101000008010000030103003a010000080102000301010000 -010000020102000201000002010000010100000001010005010000030103000101000002 -0100002501000063010000630100006301000063010000020100051301000500030e0500 -000005230100050302020103020205030100050000000532010005000063010000230100 -003e0100006301000063010000630100006301000002010005140100030e000005240100 -0503020201030202050301000000053401000063010000230100003e0100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -020205030100050000000532010005000063010000230100003e01000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -000005340100006301000063010000630100006301000063010000630100000201000513 -01000500030e050000000523010005030202010302020503010005000000053201000500 -0063010000630100006301000063010000630100006301000002010005140100030e0000 -052401000503020201030202050301000000050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100006301000063010000630100006301000063 -01000063010000020100051301000500030e050000000523010005030202010302020503 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100050001ff01ff016105140100030e0000052401000503020201030202050301000c36 -00630100006301000063010000630100006301000063010000020100051301000500030e -05000000052301000503020201030202050301000c350900006301000063010000630100 -0063010000630100006301000002010005140100030e0000052401000503020201030202 -050301000c01083209010063010000630100006301000063010000630100006301000002 -0100051301000500030e05000000052301000503020201030202050301000c0108320901 -0063010000630100006301000063010000630100006301000002010005140100030e0000 -052401000503020201030202050301000c01081301000804010208150901006301000063 -01000063010000630100006301000063010000020100051301000500030e050000000523 -01000503020201030202050301000c010811010208030100080201000814090100070100 -0016010000420100000701000006010200100100000c0100003001000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -0c010813010008030100080201000814090100070100005a010000070100000801000010 -0100000c0100003001000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000c01081301000803010008020100 -081409010007010000010100000301020002010000000101000301020002010000000101 -003b01000007010000000101000501000003010200030102000201000001010000030102 -000201000000010100030102000201000000010100030101000001000017010000630100 -0063010000630100006301000002010005140100030e0000052401000503020201030202 -050301000c01081301000803010008020100081409010007010000000100000301000002 -01000001010100010100000401000002010100010100003a010000070101000101000004 -010000020100000201000001010000020100000101000000010000030100000201000001 -010100010100000101000002010000010101000101000001010000010101001701000063 -010000630100006301000063010000020100051301000500030e05000000052301000503 -020201030202050301000c01081301000803010008020100081409010007010100080100 -00010100000801000002010000020100003a010000070100000201000004010000060100 -000101000005010100040100000201000001010000020100000101000002010000010100 -000501000002010000170100006301000063010000630100006301000002010005140100 -030e0000052401000503020201030202050301000c010813010008030100080201000814 -0901000701010005010300010100000801000002010000020100003a0100000701000002 -010000040100000301030001010000050101000401040001010000020100000101040001 -010000050100000201000017010000630100006301000063010000630100000201000513 -01000500030e05000000052301000503020201030202050301000c010813010008030100 -080201000814090100070100000001000003010000020100000101000008010000020100 -00020100003a010000070100000201000004010000020100000201000001010000050100 -000001000003010000050100000201000001010000050100000501000002010000170100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -01030202050301000c010811010408020102081509010007010000010100000201000002 -010000010100000801000002010000020100003a01000007010100010100000401000002 -010000020100000101000002010000010100000101000002010000020100000101010001 -010000010100000201000001010000050100000101010017010000630100006301000063 -01000063010000020100051301000500030e050000000523010005030202010302020503 -01000c010832090100070100000201000002010300010100000801000002010000020100 -003a01000007010000000101000501000003010300020102000201000002010000020102 -000201000000010100030102000201000006010100000100001701000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -0c010832090100630100004a010000170100006301000063010000630100006301000002 -0100051301000500030e05000000052301000503020201030202050301000c0108320901 -006301000046010000020100001701000063010000630100006301000063010000020100 -05140100030e0000052401000503020201030202050301000c0108320901006301000047 -0102001801000063010000630100006301000063010000020100051301000500030e0500 -0000052301000503020201030202050301000c0108320901006301000063010000630100 -0063010000630100006301000002010005140100030e0000052401000503020201030202 -050301000c01083209010063010000630100006301000063010000630100006301000002 -0100051301000500030e05000000052301000503020201030202050301000c0109340063 -010000630100006301000063010000630100006301000002010005140100030e00000524 -01000503020201030202050301000c00093501ff01ff0161051301000500030e05000000 -052301000503020201030202050301000c36006301000063010000630100006301000063 -0100006301000002010005140100030e0000052401000503020201030202050301000c35 -090000630100006301000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000c01083209010063010000630100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -01030202050301000c010832090100630100006301000063010000630100006301000063 -010000020100051301000500030e05000000052301000503020201030202050301000c01 -081301000805010008160901006301000063010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000c01081101020803 -01020816090100170100004a010000070100003001020026010000630100006301000063 -01000063010000020100051301000500030e050000000523010005030202010302020503 -01000c0108130100080501000816090100170100004a0100000701000032010000260100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -01030202050301000c010813010008050100081609010007010100000100000301020002 -010400020102004201000007010000000101000201000000010100030102000201010000 -010000020101000001000003010200020100000001010005010000030102000201000000 -0101001801000063010000630100006301000063010000020100051301000500030e0500 -0000052301000503020201030202050301000c0108130100080501000816090100070100 -000001000000010000010100000201000003010000030100000201000041010000070101 -000101000001010100010100000101000002010000010100000001000000010000010100 -000001000000010000010100000201000001010100010100000401000002010000020100 -000101010001010000170100006301000063010000630100006301000002010005140100 -030e0000052401000503020201030202050301000c010813010008050100081609010007 -010000000100000001000005010000030100000301000045010000070100000201000001 -010000050100000201000001010000000100000001000001010000000100000001000005 -010000010100000201000004010000060100000101000002010000170100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -0202050301000c0108130100080501000816090100070100000001000000010000020103 -000301000004010200420100000701000002010000010100000501000002010000010100 -000001000000010000010100000001000000010000020103000101000002010000040100 -000301030001010000020100001701000063010000630100006301000063010000020100 -05140100030e0000052401000503020201030202050301000c0108130100080501000816 -090100070100000001000000010000010100000201000003010000070100004101000007 -010000020100000101000005010000020100000101000000010000000100000101000000 -010000000100000101000002010000010100000201000004010000020100000201000001 -010000020100001701000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000c01081101040801010408140901 -000701000000010000000100000101000002010000030100000301000002010000410100 -000701010001010000010100000501000002010000010100000001000000010000010100 -000001000000010000010100000201000001010100010100000401000002010000020100 -000101000002010000170100006301000063010000630100006301000002010005140100 -030e0000052401000503020201030202050301000c010832090100070100000001000000 -010000020103000401010002010200420100000701000000010100020100000601020002 -010000000100000001000001010000000100000001000002010300010100000001010005 -010000030103000101000002010000170100006301000063010000630100006301000002 -0100051301000500030e05000000052301000503020201030202050301000c0108320901 -006301000031010000300100006301000063010000630100006301000002010005140100 -030e0000052401000503020201030202050301000c010832090100630100003101000030 -01000063010000630100006301000063010000020100051301000500030e050000000523 -01000503020201030202050301000c010832090100630100003101000030010000630100 -0063010000630100006301000002010005140100030e0000052401000503020201030202 -050301000c01083209010063010000630100006301000063010000630100006301000002 -0100051301000500030e05000000052301000503020201030202050301000c0108320901 -0063010000630100006301000063010000630100006301000002010005140100030e0000 -052401000503020201030202050301000c01093400630100006301000063010000630100 -006301000063010000020100051301000500030e05000000052301000503020201030202 -050301000c00093501ff01ff016105140100030e00000524010005030202010302020503 -010005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000063010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500010000630100006301000063 -01000063010000630100006301000002010005140100030e000005240100050302020103 -020205030100050000000532010005000063010000630100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -000005340100006301000063010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000500000005130100050401020515 -010005000063010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005120102050301000502 -010005150100006301000063010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000500000005130100050301000502 -010005140100050000630100006301000063010000630100006301000063010000020100 -051301000500030e05000000052301000503020201030202050301000000051401000503 -010005020100051501000063010000630100006301000063010000630100006301000002 -010005140100030e00000524010005030202010302020503010005000000051301000506 -010005150100050000630100006301000063010000630100006301000063010000020100 -051301000500030e05000000052301000503020201030202050301000000051401000505 -010005170100006301000063010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000500000005130100050401000517 -010005000063010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005140100050301000502 -010005150100006301000063010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000500000005110104050101040514 -010005000063010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005340100006301000063 -0100006301000063010000630100006301000002010005140100030e0000052401000503 -020201030202050301000500000005320100050000630100006301000063010000630100 -006301000063010000020100051301000500030e05000000052301000503020201030202 -050301000000053401000063010000630100006301000063010000630100006301000002 -010005140100030e00000524010005030202010302020503010005000000053201000500 -00630100006301000063010000630100006301000063010000020100051301000500030e -050000000523010005030202010302020503010000000534010000630100006301000063 -01000063010000630100006301000002010005140100030e000005240100050302020103 -020205030100050000000532010005000063010000630100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -000005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -01000063010000630100006301000063010000630100006301000002010005140100030e -000005240100050302020103020205030100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001ff01ff0161051301000500030e0500 -000005230100050302020103020205030100050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000630100006301000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -010000630100006301000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000500000005320100050000630100 -00630100006301000063010000630100006301000002010005140100030e000005240100 -050302020103020205030100000005340100006301000063010000630100006301000063 -01000063010000020100051301000500030e050000000523010005030202010302020503 -010005000000051301000504010205150100050000630100006301000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -000005120102050301000502010005150100006301000063010000630100006301000063 -01000063010000020100051301000500030e050000000523010005030202010302020503 -010005000000051301000507010005140100050000630100006301000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -000005140100050701000515010000630100006301000063010000630100006301000063 -010000020100051301000500030e05000000052301000503020201030202050301000500 -000005130100050501010515010005000063010000630100006301000063010000630100 -006301000002010005140100030e00000524010005030202010302020503010000000514 -010005070100051501000063010000630100006301000063010000630100006301000002 -0100051301000500030e0500000005230100050302020103020205030100050000000513 -010005070100051401000500006301000063010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000000051401000503 -010005020100051501000063010000630100006301000063010000630100006301000002 -0100051301000500030e0500000005230100050302020103020205030100050000000511 -010405020102051501000500006301000063010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000000053401000063 -0100006301000063010000630100006301000063010000020100051301000500030e0500 -000005230100050302020103020205030100050000000532010005000063010000630100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -010302020503010000000534010000630100006301000063010000630100006301000063 -010000020100051301000500030e05000000052301000503020201030202050301000500 -000005320100050000630100006301000063010000630100006301000063010000020100 -05140100030e000005240100050302020103020205030100000005340100006301000063 -01000063010000630100006301000063010000020100051301000500030e050000000523 -010005030202010302020503010005000000053201000500006301000063010000630100 -0063010000630100006301000002010005140100030e0000052401000503020201030202 -050301000000050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100006301000063010000630100006301000063010000630100000201000513 -01000500030e050000000523010005030202010302020503010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100050001000500010005000100050001000500010005000100050001ff01ff01610514 -0100030e0000052401000503020201030202050301000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500006301000063010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050001000063010000630100006301000063010000630100006301000002 -010005140100030e00000524010005030202010302020503010005000000053201000500 -00630100006301000063010000630100006301000063010000020100051301000500030e -050000000523010005030202010302020503010000000534010000630100006301000063 -01000063010000630100006301000002010005140100030e000005240100050302020103 -020205030100050000000513010005060100051501000500006301000063010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010000000512010205050101051601000063010000630100006301000063 -010000630100006301000002010005140100030e00000524010005030202010302020503 -010005000000051301000504010005000100051501000500006301000063010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010000000514010005040100050001000516010000630100006301000063 -01000063010000630100006301000002010005140100030e000005240100050302020103 -020205030100050000000513010005030100050101000515010005000063010000630100 -0063010000630100006301000063010000020100051301000500030e0500000005230100 -050302020103020205030100000005140100050201000502010005160100006301000063 -0100006301000063010000630100006301000002010005140100030e0000052401000503 -020201030202050301000500000005130100050201050514010005000063010000630100 -0063010000630100006301000063010000020100051301000500030e0500000005230100 -050302020103020205030100000005140100050601000516010000630100006301000063 -01000063010000630100006301000002010005140100030e000005240100050302020103 -020205030100050000000511010405030102051401000500006301000063010000630100 -00630100006301000063010000020100051301000500030e050000000523010005030202 -010302020503010000000534010000630100006301000063010000630100006301000063 -01000002010005140100030e000005240100050302020103020205030100050000000532 -010005000063010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005340100006301000063 -0100006301000063010000630100006301000002010005140100030e0000052401000503 -020201030202050301000500000005320100050000630100006301000063010000630100 -006301000063010000020100051301000500030e05000000052301000503020201030202 -050301000000053401000063010000630100006301000063010000630100006301000002 -010005140100030e00000524010005030202010302020503010005000000053201000500 -00630100006301000063010000630100006301000063010000020100051301000500030e -050000000523010005030202010302020503010000000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000063010000630100006301000063 -010000630100006301000002010005140100030e00000524010005030202010302020503 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100050001ff01ff0161051301000500030e050000000523010005030202010302020503 -010005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000063010000630100006301000063010000630100006301000002010005140100 -030e00000524010005030202010302020503010000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050001000063010000630100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -020205030100050000000532010005000063010000630100006301000063010000630100 -006301000002010005140100030e00000524010005030202010302020503010000000534 -010000630100006301000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000500000005130100050301040514 -010005000063010000630100006301000063010000630100006301000002010005140100 -030e00000524010005030202010302020503010000000512010205030100051901000063 -0100006301000063010000630100006301000063010000020100051301000500030e0500 -000005230100050302020103020205030100050000000513010005030100051801000500 -0063010000630100006301000063010000630100006301000002010005140100030e0000 -052401000503020201030202050301000000051401000503010005190100006301000063 -01000063010000630100006301000063010000020100051301000500030e050000000523 -010005030202010302020503010005000000051301000503010305150100050000630100 -00630100006301000063010000630100006301000002010005140100030e000005240100 -050302020103020205030100000005140100050701000515010000630100006301000063 -010000630100006301000063010000020100051301000500030e05000000052301000503 -020201030202050301000500000005130100050701000514010005000063010000630100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -010302020503010000000514010005020100050301000515010000630100006301000063 -010000630100006301000063010000020100051301000500030e05000000052301000503 -020201030202050301000500000005110104050101030515010005000063010000630100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -010302020503010000000534010000630100006301000063010000630100006301000063 -010000020100051301000500030e05000000052301000503020201030202050301000500 -000005320100050000630100006301000063010000630100006301000063010000020100 -05140100030e000005240100050302020103020205030100000005340100006301000063 -01000063010000630100006301000063010000020100051301000500030e050000000523 -010005030202010302020503010005000000053201000500006301000063010000630100 -0063010000630100006301000002010005140100030e0000052401000503020201030202 -050301000000053401000063010000630100006301000063010000630100006301000002 -0100051301000500030e0500000005230100050302020103020205030100050000000532 -010005000063010000630100006301000063010000630100006301000002010005140100 -030e00000524010005030202010302020503010000000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000063010000630100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -020205030100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001ff01ff016105140100030e00000524010005030202010302020503 -010005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000063010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500010000630100006301000063 -01000063010000630100006301000002010005140100030e000005240100050302020103 -020205030100050000000532010005000063010000630100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -000005340100006301000063010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000500000005130100050501020514 -010005000063010000630100006301000063010000630100006301000002010005130100 -0500030e0500000005230100050302020103020205030100000005120102050401000518 -01000063010000630100006301000063010000630100006301000002010005140100030e -000005240100050302020103020205030100050000000513010005030100051801000500 -00630100006301000063010000630100006301000063010000020100051301000500030e -050000000523010005030202010302020503010000000514010005030100051901000063 -010000630100006301000063010000630100006301000002010005140100030e00000524 -010005030202010302020503010005000000051301000503010305150100050000630100 -006301000063010000630100006301000063010000020100051301000500030e05000000 -052301000503020201030202050301000000051401000503010005020100051501000063 -010000630100006301000063010000630100006301000002010005140100030e00000524 -010005030202010302020503010005000000051301000503010005020100051401000500 -00630100006301000063010000630100006301000063010000020100051301000500030e -050000000523010005030202010302020503010000000514010005030100050201000515 -01000063010000630100006301000063010000630100006301000002010005140100030e -000005240100050302020103020205030100050000000511010405020102051501000500 -00630100006301000063010000630100006301000063010000020100051301000500030e -050000000523010005030202010302020503010000000534010000630100006301000063 -01000063010000630100006301000002010005140100030e000005240100050302020103 -020205030100050000000532010005000063010000630100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -000005340100006301000063010000630100006301000063010000630100000201000514 -0100030e0000052401000503020201030202050301000500000005320100050000630100 -006301000063010000630100006301000063010000020100051301000500030e05000000 -052301000503020201030202050301000000053401000063010000630100006301000063 -010000630100006301000002010005140100030e00000524010005030202010302020503 -010005000000053201000500006301000063010000630100006301000063010000630100 -00020100051301000500030e050000000523010005030202010302020503010000000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000063 -010000630100006301000063010000630100006301000002010005140100030e00000524 -010005030202010302020503010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -0100050001000500010005000100050001ff01ff0161051301000500030e050000000523 -010005030202010302020503010005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000063010000630100006301000063010000630100 -006301000002010005140100030e00000524010005030202010302020503010000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050001000063 -0100006301000063010000630100006301000063010000020100051301000500030e0500 -000005230100050302020103020205030100050000000532010005000063010000630100 -006301000063010000630100006301000002010005140100030e00000524010005030202 -010302020503010000000534010000630100006301000063010000630100006301000063 -010000020100051301000500030e05000000052301000503020201030202050301000500 -000005130100050301040514010005000063010000630100006301000063010000630100 -006301000002010005140100030e00000524010005030202010302020503010000000512 -010205030100050201000515010000630100006301000063010000630100006301000063 -010000020100051301000500030e05000000052301000503020201030202050301000500 -000005130100050601000515010005000063010000630100006301000063010000630100 -006301000002010005140100030e00000524010005030202010302020503010000000514 -010005060100051601000063010000630100006301000063010000630100006301000002 -0100051301000500030e0500000005230100050302020103020205030100050000000513 -010005060100051501000500006301000063010000630100006301000063010000630100 -0002010005140100030e0000052401000503020201030202050301000000051401000506 -010005160100006301000063010000630100006301000063010000630100000201000513 -01000500030e050000000523010005030202010302020503010005000000051301000505 -010005160100050000630100006301000063010000630100006301000063010000020100 -05140100030e000005240100050302020103020205030100000005140100050501000517 -010000630100006301000063010000630100006301000063010000020100051301000500 -030e05000000052301000503020201030202050301000500000005110104050301000516 -010005000063010000630100006301000063010000630100006301000002010005140100 -030e00000524010005030202010302020503010000000534010000630100006301000063 -010000630100006301000063010000020100051301000500030e05000000052301000503 -020201030202050301000500000005320100050000630100006301000063010000630100 -00630100006301000002010005140100030e000005240100050302020103020205030100 -000005340100006301000063010000630100006301000063010000630100000201000513 -01000500030e050000000523010005030202010302020503010005000000053201000500 -0063010000630100006301000063010000630100006301000002010005140100030e0000 -052401000503020201030202050301000000053401000063010000630100006301000063 -0100006301000063010000020100051301000500030e0500000005230100050302020103 -020205030100050000000532010005000063010000630100006301000063010000630100 -006301000002010005140100030e00000524010005030202010302020503010000000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000063 -0100006301000063010000630100006301000063010000020100051301000500030e0500 -000005230100050302020103020205030100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001ff01ff016105140100030e00000524 -010005030202010302020503010005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000063010000630100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -01000063010000630100006301000063010000630100006301000002010005140100030e -000005240100050302020103020205030100050000000532010005000063010000630100 -0063010000630100006301000063010000020100051301000500030e0500000005230100 -050302020103020205030100000005340100006301000063010000630100006301000063 -0100006301000002010005140100030e0000052401000503020201030202050301000500 -000005130100050401020515010005000063010000630100006301000063010000630100 -0063010000020100051301000500030e0500000005230100050302020103020205030100 -000005120102050301000502010005150100006301000063010000630100006301000063 -010000630100000201000514010005000000050000000500000005000000050000000500 -00000500000005000000052401000503020201030202050301ff01ff0199051301000500 -000005000000050000000500000005000000050000000500000005000000050000000523 -010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff -05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503 -010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103 -02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503 -0202010302020503010005ff05ff05e301000503020201030202050301000549010005ff -05ff059801000503020201030202050301000548010105ff05ff05980100050302020103 -020205030100054701000500010005ff05ff059801000503020201030202050301000549 -010005ff05ff059801000503020201030202050301000549010005ff05ff059801000503 -020201030202050301000549010005ff05ff059801000503020201030202050301000549 -010005ff05ff059801000503020201030202050301000549010005ff05ff059801000503 -020201030202050301000547010405ff05ff0596010005030202010302020503010005ff -05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503 -010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103 -02020503010005ff05ff05e3010005030202010302020503010005380100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100054b01000503020201030202050301000537 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000000054a01000503 -020201030202050301000538010005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000003ff03ff033e0000054b010005030202010302020503010005370100050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050003ff03ff033e05000000054a01000503 -020201030202050301000538010005000000050c0000050c010003ff03ff033e0000054b -01000503020201030202050301000537010005000000050c0100050c0100050003ff03ff -033e05000000054a01000503020201030202050301000538010005000000050c0000050c -010003ff03ff033e0000054b01000503020201030202050301000537010005000000050c -0100050c0100050003ff03ff033e05000000054a01000503020201030202050301000538 -010005000000050c0000050c010003ff03ff033e0000054b010005030202010302020503 -01000537010005000000050c0100050c0100050003ff03ff033e05000000054a01000503 -020201030202050301000538010005000000050c0000050c010003ff03ff033e0000054b -01000503020201030202050301000537010005000000050c0100050c0100050003ff03ff -033e05000000054a01000503020201030202050301000538010005000000050c0000050c -010003ff03ff033e0000054b01000503020201030202050301000537010005000000050c -0100050c0100050003ff03ff033e05000000054a01000503020201030202050301000538 -010005000000050c0000050c010003ff03ff033e0000054b010005030202010302020503 -010005370100050000000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050003ff03ff -033e05000000054a01000503020201030202050301000538010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010003ff03ff033e0000054b010005030202010302020503 -010005370100050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -00000500000005000000050000000500000005000000050000000500000005000000054a -010005030202010302020503010005380000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000054b010005030202010302020503010005ff05ff05e30100050302020103 -02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503 -0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3 -010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff -05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503 -010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103 -02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503 -0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3 -010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff -05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503 -010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103 -02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503 -0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3 -010005030202010302020503010005ff05ff05e3010005030202010302020503010005ff -05ff05e3010005030202010302020503010005ff05ff05e3010005030202010302020503 -010005ff05ff05e3010005030202010302020503010005ff05ff05e30100050302020103 -02020503010005ff05ff05e3010005030202010302020503010005ff05ff05e301000503 -0202010302020503010005ff05ff05e3010005030202010302020503010005ff05ff05e3 -010005030202010302020503010005ff05ff05e3010005030202010100040503010005ff -05ff05e301000503000502020400050301ff01ff01e50503000002020400000002020400 -05ff05ff05ed00000202040000000202040005ff05ff05ed000002020400000002020400 -05ff05ff05ed00000202040000000202040005ff05ff05ed000002020400000002020400 -000502ff02ff02e100060202040000000208040002ff02ff02e100000208040000000208 -040002ff02ff02e100000208040000000208040001ff01ff01e100000208040000000409 -01ff01ff01e100000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 380 315 -%%EOF diff --git a/lib/tv/doc/src/tv_table_loaded.gif b/lib/tv/doc/src/tv_table_loaded.gif Binary files differdeleted file mode 100644 index 1786426f4d..0000000000 --- a/lib/tv/doc/src/tv_table_loaded.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_table_loaded.ps b/lib/tv/doc/src/tv_table_loaded.ps deleted file mode 100644 index 3f0cf9d707..0000000000 --- a/lib/tv/doc/src/tv_table_loaded.ps +++ /dev/null @@ -1,1430 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_loaded.eps) -%%CreationDate: (Mon Mar 19 17:15:33 2001) -%%BoundingBox: 0 0 532 441 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 532 441 -userdict begin -%%BeginData: -DisplayImage -0 0 -532.000000 441.000000 -12 -760 630 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -ff0000 -d9d9d9 -b22222 -828282 -ff9155 -c3c3c3 -7f7f7f -990000 -000000 -000000 -000000 -000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff -02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202 -04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff -02d500000202040000000202040002080000020d040002a501010206010102150101021e -0101022901010206010102430101022a010102260101023201010233010102ae00000202 -040000000202040002080000020d04000277010502000107020101030206010702090101 -02060101021501010219010002030101021c0100020b010102060101022e010202020100 -020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400 -00000202040002080000020d04000277010102070101020301010201010102080101020c -010102060101021501010218010102210101020b010102060101022e010202020100020d -01010238010102020101024801010215010102cc00000202040000000202040002080000 -0202040602030400027701010207010102030101020c0101020401030203010102000101 -020301010202010302020101020901010202010302030103020201030201010402010101 -020201030203010102000101020a01040201010302030101020001010203010102020103 -022701000200010102010100020201030203010402020103020201010209010102000101 -020101010203010302030101020201010200010102020101020101030202010402020101 -020101010202010102020101020001010203010102000101020301030203010402020104 -020501040202010102010101020501030201010402000101020101010204010302020101 -020001010201010102020103020201040202010402020103020301010200010102060104 -020201030274000002020400000004030208000002020400030400000203040002770101 -0207010102030102020b0101020301010201010102020102020001010202010102010101 -020101010201010102090101020101010201010102010101020101010200010102010101 -020101010203010102010101020101010202010202000101020a01010202010102010101 -020201020200010102020101020101010201010102260100020001010201010002010101 -020101010201010102010101020101010201010102010101020901020200010202000101 -020101010201010102020101020201020200010102010101020001010200010102010101 -020101010202010102010101020201010202010202000101020201020200010102010101 -020101010201010102050101020801010201010102020101020101010204010102010101 -020101010202010102010101020301010201010102010101020001010201010102010101 -020101010200010102050101020501010201010102020102020001010204010102050101 -020101010273000004030101020b00000203040003020000020404000277010402040101 -0204010302090101020701010202010102010101020201010201010102010101020d0101 -020101010201010102010101020801010201010102030101020101010201010102020101 -02010101020a010102060101020201010201010102020101020101010201010102260100 -0200010202000100020101010201010102010101020101010201010102010101020d0101 -020101010201010102050101020201010202010102010101020101010200010102000101 -020101010201010102020101020101010202010102020101020101010202010102010101 -020101010201010102010102020401020207010102010101020201010201010102040101 -020101010201010102030101020001000204010102010101020101020203010102010101 -020401020204010202040101020101010202010102010101020401020204010102010101 -02760103020b000002030400030200000204040002770101020701010206010202080101 -0204010402020101020101010202010102010105020d0101020101010201010102010101 -02050104020101010203010102010101020101010202010102010101020a010102030104 -020201010201010102020101020101050226010002010101020001000201010102010101 -020101010201010102010105020d01010201010102010101020201040202010102020101 -020101010201010102000101020001010201010102010101020201010201010102020101 -020201010201010102020101020101010201010502020103020301030205010102010101 -020201010201010102040105020101010204010102050105020101010204010102010101 -020501030203010302020101020101010202010102010101020501030202010502760103 -020b00000204040003000000020504000277010102070101020701010208010102030101 -020101010202010102010101020201010201010102110101020101010201010102010101 -0204010102010101020101010203010102010101020101010202010102010101020a0101 -020201010201010102020101020101010202010102010101022a01000202010202010101 -020101010201010102010101020101010211010102010101020101010201010102010101 -020201010202010102010101020101010201010102000101020001010200010202020101 -020101010202010102020101020101010202010102010101020101010208010202040102 -020401010201010102020101020101010204010102050101020301000200010102040101 -020501010204010102010101020701020204010202010101020101010202010102010101 -0207010202010101027a0103020b00000204040003000000020504000277010102070101 -020301010201010102080101020301010201010102020101020101010202010102010101 -020201000201010102090101020101010201010102010101020201000200010102010101 -020101010203010102010101020101010202010102010101020a01010202010102010101 -020201010201010102020101020101010202010002260100020201020201010102010101 -020101010200010202010101020201000201010102090101020101010201010102010101 -020101010202010102020101020101010202010102070101020001010202010102000102 -020201010202010102010101020201010201010102010101020201000205010102050101 -020101010200010102000102020201010200010202010101020001010202010002010101 -020201010201010102000101020001010202010002010101020401010201010102020100 -020401010205010102010101020101010202010102010101020101010204010102010101 -0202010002760103020b0000020500000206040002770105020301010204010302090101 -020401020200010102010104020301010202010302020101020901010202010302030103 -02020102020001010201010202010101020201030203010102010101020b010202010102 -020001010201010402030101020201030227010002030101020201030203010102000101 -020201030202010102090101020101010201010102020102020001010201010102020101 -020101010203010502050101020301010200010102020101020201010201010102020101 -020101010202010302020104020201040202010102010101020001010203010102000101 -020101010201010302030102020001010201010102000101020101030202010102040101 -020201030201010402020104020301030203010102010101020101010200010402030103 -02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d -040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff -02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103 -0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202 -00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff -06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801 -020201030202000106ff06ff06e908010202010302020001060b07040604070006030702 -061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa -07000602070006090702061308010202010302020001060b0700060f0700062107000614 -0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b -0700061308010202010302020001060b0700060607020605070006030702061a07000604 -070206030702060507000603070206180700060207000601070006000701060207040602 -070206030702060207000600070106030702061807000602070006020702060307020602 -07000602070006ff06eb07000602070006020702060507000602070006000701060c0801 -0202010302020001060b0700060807000605070006020700060207000619070006030700 -060207000601070006020700060407000602070006020700061707000602070006010701 -060107000603070006060700060207000602070006010701060107000601070006020700 -0618070006000700060507000602070006020700060107000602070006ff06eb07000602 -07000601070006020700060407000602070106010700060b08010202010302020001060b -070306050700060507000602070006020700061907000603070006020700060107000602 -07000604070006020700061b070006020700060107000602070006030700060607000602 -070006020700060107000602070006010700061c07000600070006050700060207000602 -070006010700060007000600070006ff06eb070406010700060207000604070006020700 -06020700060b08010202010302020001060b070006080700060507000602070406190700 -060307000602070006010700060207000604070006030702061807000602070006010700 -060207000603070006060700060207000602070006010700060207000602070206190700 -06000700060507000602070406010700060007000600070006ff06eb0700060207000601 -0704060407000602070006020700060b08010202010302020001060b0700060807000605 -070006020700061d07000603070006020700060107000602070006040700060607000617 -070006020700060107000602070006030700060607000602070006020700060107000602 -07000605070006190700060607000602070006050700060007000600070006ff06eb0700 -0602070006010700060807000602070006020700060b08010202010302020001060b0700 -060807000605070006020700060207000619070006030700060207000601070006020700 -060407000602070006020700061707000602070006010701060107000603070006060700 -060207000602070006010700060207000601070006020700061907000606070006020700 -0602070006010700060007000600070006ff06eb07000602070006010700060207000604 -07000602070106010700060b08010202010302020001060b070006080700060507000603 -0702061a0700060407020603070206050700060307020619070206020700060007010605 -07010604070006030702060207000602070006020702061a070006060700060307020603 -07000600070006ff06ec07000602070006020702060507000602070006000701060c0801 -0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706 -062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202 -0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801 -020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103 -0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff -08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff -06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff -06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603 -0016061600160616004406160016061600160616001606ff06be02020103020206030015 -080006160015080006160015080000150800001508000616001508000616001508000616 -0015080006ff06be02020103020206030001061208010616000106120801061600010612 -080100010612080100010612080106160001061208010616000106120801061600010612 -080106ff06be020201030202060300010612080106160001061208010616000106120801 -000106120801000106120801061600010612080106160001061208010616000106120801 -06ff06be0202010302020603000106120801061600010603070206030702060408010616 -000106120801000106120801000106120801061600010612080106160001061208010616 -00010612080106ff06be0202010302020603000106080702060608010616000106030702 -060307020604080106160001061208010001061208010001061208010616000106050704 -0607080106160001060707010608080106160001060707030606080106ff06be02020103 -020206030001060b0701060408010616000106020704060107040603080106160001060e -0700060208010001060e070006020801000106020700060e080106160001060307080605 -080106160001060607030607080106160001060507070604080106ff06be020201030202 -06030001060d070006000700060108010616000106020700060107010601070006010701 -0603080106160001060e0700060208010001060e070006020801000106020700060e0801 -061600010602070a06040801061600010606070306070801061600010604070306010703 -0603080106ff06be02020103020206030001060207020608070106010801061600010601 -070d0602080106160001060b07000601070006020801000106020700060a070006020801 -00010602070006010700060b080106160001060207030602070306040801061600010607 -0701060808010616000106040702060307020603080106ff06be02020103020206030001 -060107080602070206010801061600010600070006000703060007020600070406010801 -06160001060b07000601070006020801000106020700060a070006020801000106020700 -06010700060b080106160001060107030604070306030801061600010612080106160001 -06040702060307020603080106ff06be0202010302020603000106010709060608010616 -000106000700060007030600070206000704060108010616000106080700060107000601 -070006020801000106020700060407000604070006020801000106020700060107000601 -070006080801061600010601070206030707060108010616000106050704060708010616 -000106050701060207020604080106ff06be020201030202060300010601070906060801 -061600010600070006000703060007020600070406010801061600010608070006010700 -060107000602080100010602070006040700060407000602080100010602070006010700 -060107000608080106160001060107020604070506020801061600010606070306070801 -06160001060907020605080106ff06be0202010302020603000106010709060608010616 -000106000700060007030600070206000704060108010616000106050700060107000601 -070006010700060208010001060207000604070006010700060107000602080100010602 -070006010700060107000601070006050801061600010601070206050703060308010616 -0001060707020607080106160001060807020606080106ff06be02020103020206030001 -0601070d0602080106160001060007000600070706000704060108010616000106050700 -060107000601070006010700060208010001060207000604070006010700060107000602 -080100010602070006010700060107000601070006050801061600010601070306050701 -0604080106160001060707020607080106160001060707020607080106ff06be02020103 -020206030001060107030607070006030801061600010600070006000704060107000600 -070406010801061600010602070006010700060107000601070006010700060208010001 -060207000601070006010700060107000601070006020801000106020700060107000601 -07000601070006010700060208010616000106020703060b080106160001060707020607 -080106160001060707020607080106ff06be020201030202060300010601070206070700 -060408010616000106000706060107060601080106160001060207000601070006010700 -060107000601070006020801000106020700060107000601070006010700060107000602 -080100010602070006010700060107000601070006010700060208010616000106020709 -06050801061600010607070206070801061600010612080106ff06be0202010302020603 -000106010701060707000605080106160001060007000600070206050700060007020601 -080106160001060207000601070006010700060107000601070006020801000106020700 -060107000601070006010700060107000602080100010602070006010700060107000601 -070006010700060208010616000106030707060608010616000106060704060608010616 -0001060707020607080106ff06be02020103020206030001060107090606080106160001 -060007000600070206050700060007020601080106160001060207000601070006010700 -060107000601070006020801000106020700060107000601070006010700060107000602 -080100010602070006010700060107000601070006010700060208010616000106050704 -0607080106160001060507060605080106160001060707020607080106ff06be02020103 -020206030001061208010616000106000704060507040601080106160001061208010001 -0612080100010612080106160001061208010616000106120801061600010612080106ff -06be02020103020206030001061208010616000106120801061600010612080100010612 -080100010612080106160001061208010616000106120801061600010612080106ff06be -020201030202060300010612080106160001061208010616000106120801000106120801 -00010612080106160001061208010616000106120801061600010612080106ff06be0202 -010302020603000108140616000108140616000108140001081400010814061600010814 -06160001081406160001081406ff06be0202010302020603000008150616000008150616 -00000815000008150000081506160000081506160000081506160000081506ff06be0202 -0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 -0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 -0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 -0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5 -06030202010302020603010000ff00ff00cf010000120100060302020103020206030100 -00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001 -060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603 -0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603 -010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf -01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801 -010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103 -02020603010000ff00ff00cf010000010601010a06010801010006030202010302020603 -010000ff00ff00cf010000010602010806020801010006030202010302020603010000ff -00ff00cf010000010603010606030801010006030202010302020603010000ff00ff00cf -010000010604010406040801010006030202010302020603010000ff00ff00cf01000001 -0605010206050801010006030202010302020603010000ff00ff00cf0100000106060100 -06060801010006030202010302020603010000ff00ff00cf01000001060e080101000603 -0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603 -010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf -01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801 -010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103 -02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff -00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811 -01000603020201030202060301ff01ff01e5060302020103020206ff06ff06ed02020103 -020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103 -020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103 -020206ff06ff06ed020201030202060301ff01ff01e506030202010302020603010006ff -06ff06970100064a01000603020201030202060301000663010506ff06ff062d0100064a -01000603020201030202060301000662010706ff06ff062c0100064a0100060302020103 -020206030100066101020603010206ff06ff062b0100064a010006030202010302020603 -0100066101010605010106ff06ff062b0100064a01000603020201030202060301000661 -01020603010206ff06ff062b0100064a01000603020201030202060301000662010706ff -06ff062c0100064a01000603020201030202060301000663010506ff06ff062d0100064a -01000603020201030202060301000665010106ff06ff062f0100064a0100060302020103 -0202060301000665010106ff06ff062f0100064a01000603020201030202060301000665 -010106ff06ff062f0100064a01000603020201030202060301000665010106ff06ff062f -0100064a01000603020201030202060301000665010106ff06ff062f0100064a01000603 -020201030202060301000665010106ff06ff062f0100064a010006030202010302020603 -0100066101010600010206ff06ff062f0100064a01000603020201030202060301000661 -01010600010206ff06ff062f0100064a01000603020201030202060301000661010506ff -06ff062f0100064a01000603020201030202060301000661010506ff06ff062f0100064a -0100060302020103020206030100066101020600010106ff06ff062f0100064a01000603 -0202010302020603010006ff06ff06970100064a01000603020201030202060301ff01ff -0199064a0100060302020103020206030100063500610b04005f0b04005f0b04005f0b04 -005f0b04005f0b0400010100060c0812062a010006030202010302020603010006350060 -08000b030100005e08000b030100005e08000b030100005e08000b030100005e08000b03 -0100005e08000b03010000010100060c08110000062a0100060302020103020206030100 -06350001065d08010b0101020001065b08010b0101020001065b08010b0101020001065b -08010b0101020001065b08010b0101020001065b08010b01010200010100060c08010010 -062a010006030202010302020603010006350001062c0100062f08010b0101020001062a -0102062d08010b0101020001062a0102062d08010b0101020001062c0100062d08010b01 -0102000106290104062c08010b0101020001062b0102062c08010b01010200010100060c -0801000d08000001062a010006030202010302020603010006350001062a0102062f0801 -0b01010200010629010006020100062c08010b01010200010629010006020100062c0801 -0b0101020001062b0101062d08010b010102000106290100063008010b0101020001062a -0100062f08010b01010200010100060c08010001060a08010001062a0100060302020103 -02020603010006350001062c0100062f08010b01010200010629010006020100062c0801 -0b0101020001062d0100062c08010b0101020001062a010006000100062d08010b010102 -000106290100063008010b010102000106290100063008010b01010200010100060c0801 -0001060a08010001062a010006030202010302020603010006350001062c0100062f0801 -0b01010200010629010006020100062c08010b0101020001062d0100062c08010b010102 -0001062a010006000100062d08010b010102000106290100063008010b01010200010629 -0100063008010b01010200010100060c08010001060a08010001062a0100060302020103 -02020603010006350001062c0100062f08010b0101020001062c0100062d08010b010102 -0001062b0101062d08010b01010200010629010006010100062d08010b01010200010629 -0103062d08010b010102000106290103062d08010b01010200010100060c08010001060a -08010001062a010006030202010302020603010006350001062c0100062f08010b010102 -0001062b0100062e08010b0101020001062d0100062c08010b0101020001062801000602 -0100062d08010b0101020001062d0100062c08010b01010200010629010006020100062c -08010b01010200010100060c08010001060a08010001062a010006030202010302020603 -010006350001062c0100062f08010b0101020001062a0100062f08010b0101020001062d -0100062c08010b010102000106280105062c08010b0101020001062d0100062c08010b01 -010200010629010006020100062c08010b01010200010100060c08010001060a08010001 -062a010006030202010302020603010006350001062c0100062f08010b01010200010629 -010006020100062c08010b01010200010629010006020100062c08010b0101020001062c -0100062d08010b01010200010628010006030100062c08010b0101020001062901000602 -0100062c08010b01010200010100060c08010001060a08010001062a0100060302020103 -02020603010006350001062a0104062d08010b010102000106290104062c08010b010102 -0001062a0102062d08010b0101020001062b0102062c08010b010102000106290103062d -08010b0101020001062a0102062d08010b01010200010100060c08010001060a08010001 -062a010006030202010302020603010006350001065d08010b0101020001065b08010b01 -01020001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b -08010b01010200010100060c08010001060a08010001062a010006030202010302020603 -010006350001065d08010b0101020001065b08010b0101020001065b08010b0101020001 -065b08010b0101020001065b08010b0101020001065b08010b01010200010100060c0801 -0001060a08010001062a010006030202010302020603010006350001065d08010b010102 -0001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b0801 -0b0101020001065b08010b0101020001010006070100060308010001060a08010001062a -010006030202010302020603010006350001065d08010b0101020001065b08010b010102 -0001065b08010b0101020001065b08010b0101020001065b08010b0101020001065b0801 -0b0101020001010006060101060308010001060a08010001062a01000603020201030202 -0603010006350001065d08010b0101020001065b08010b0101020001065b08010b010102 -0001065b08010b0101020001065b08010b0101020001065b08010b010102000101000605 -010006000100060308010001080c0001062a010006030202010302020603010006350001 -065d08010b0101020001065b08010b0101020001065b08010b0101020001065b08010b01 -01020001065b08010b0101020001065b08010b010102000101000607010006030801000d -08000001062a010006030202010302020603010006350001085f0b0101020001085d0b01 -01020001085d0b0101020001085d0b0101020001085d0b0101020001085d0b0101020001 -010006070100060308010001060a08010001062a01000603020201030202060301000635 -000008600b0001030000085e0b0001030000085e0b0001030000085e0b0001030000085e -0b0001030000085e0b00010300000800010006070100060308010001060a08010001062a -010006030202010302020603010009360063010000630100006301000063010000630100 -006301000002010006070100060308010001060a08010001062a01000603020201030202 -0603010009350c0000630100006301000063010000630100006301000063010000020100 -06070100060308010001060a08010001062a010006030202010302020603010009010532 -0c0100630100006301000063010000630100006301000063010000020100060501040601 -08010001060a08010001062a0100060302020103020206030100090105320c0100630100 -006301000063010000630100006301000063010000020100060c08010001060a08010001 -062a010006030202010302020603010009010517010005190c0100630100006301000063 -010000630100006301000063010000020100060c08010001060a08010001062a01000603 -0202010302020603010009010515010205190c01001601020003010200420100000e0100 -00230100000b010200030102001801000063010000630100006301000063010000020100 -060c08010001060a08010001062a01000603020201030202060301000901051701000519 -0c01001801000005010000420100000e010000230100000d010000050100001801000063 -010000630100006301000063010000020100060c08010001060a08010001062a01000603 -0202010302020603010009010517010005190c01000f0102000501000005010000030102 -003b0100000e010000000101000301020002010000000101000201000000010100030102 -000201040001010000020100000401000005010000180100006301000063010000630100 -0063010000020100060c08010001060a08010001062a0100060302020103020206030100 -09010517010005190c01000e01000002010000040100000501000002010000020100003a -0100000e0101000101000001010000020100000101010001010000010101000101000001 -010000020100000301000003010000020100000401000005010000180100006301000063 -0100006301000063010000020100060c08010001060a08010001062a0100060302020103 -02020603010009010517010005190c01000e010000020100000401000005010000020100 -00020100003a0100000e0100000201000001010000020100000101000005010000020100 -000101000007010000030100000201000004010000050100001801000063010000630100 -006301000063010000020100060c08010001060a08010001062a01000603020201030202 -0603010009010517010005190c01000e010000020100000401000005010000020104003a -0100000e0100000201000001010000020100000101000005010000020100000201020004 -010000030100000201000004010000050100001801000063010000630100006301000063 -010000020100060c08010001080c0001062a010006030202010302020603010009010517 -010005190c01000e010000020100000401000005010000020100003e0100000e01000002 -010000010100000201000001010000050100000201000005010000030100000301000002 -01000004010000050100001801000063010000630100006301000063010000020100060c -08010000080d0001062a010006030202010302020603010009010515010405170c01000e -01000002010000040100000501000002010000020100003a0100000e0100000201000001 -010000020100000101000005010000020100000101000002010000030100000301000001 -01010004010000050100001801000063010000630100006301000063010000020100060c -08010a0e0001062a0100060302020103020206030100090105320c01000f010200050100 -0005010000030102003b0100000e01000002010000020102000201000005010000020100 -000201020005010100020101000001000004010000050100001801000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -090105320c0100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a0100060302020103020206030100090105320c010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -0103020206030100090105320c0100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a0100060302020103020206030100090105320c010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010009010c3400630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a010006030202010302020603010009000c3501ff01ff0161060c0801 -0a0e0001062a010006030202010302020603010009360063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010009350c0000630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a0100060302020103020206030100090105320c010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -0103020206030100090105320c0100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105160102 -05180c0100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a01000603020201030202060301000901051501000502010005170c010026 -01000003010200030102002d010000160102004901000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105150100 -0502010005170c01002d010000050100002d010000180100004901000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -0901051501000502010005170c01000f0101000001000001010000020100000101000000 -01010003010200050100000501000003010200260100000f010200050100000201000002 -010000020102000301020003010200020100000001010026010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 -0518010005180c01000e0100000101010001010000020100000101010001010000040100 -0005010000050100000201000002010000250100000e0100000201000004010000020100 -000201000001010000020100000101000002010000010100000201000001010100010100 -002501000063010000630100006301000063010000020100060c08010a0e0001062a0100 -06030202010302020603010009010517010005190c01000e010000020100000101000002 -010000010100000201000004010000050100000501000006010000250100000e01000008 -010000020100000201000001010000050100000501000002010000010100000201000025 -01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 -02020103020206030100090105160100051a0c01000e0100000201000001010000020100 -00010100000201000004010000050100000501000003010300250100000f010200050100 -000201000002010000020102000301020002010400010100000201000025010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -060301000901051501000502010005170c01000e01000002010000010100000201000001 -010000020100000401000005010000050100000201000002010000250100001201000004 -010000020100000201000005010000050100000101000005010000020100002501000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -02020603010009010515010405170c01000e010000010101000101000001010100010100 -00020100000401000005010000050100000201000002010000250100000e010000020100 -000401000002010000010101000101000002010000010100000201000001010000020100 -0001010000020100002501000063010000630100006301000063010000020100060c0801 -0a0e0001062a0100060302020103020206030100090105320c01000f0101000001000002 -01010000010000010100000201000004010000050100000501000003010300250100000f -010200050100000301010000010000020102000301020003010200020100000201000025 -01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 -02020103020206030100090105320c0100120100004f0100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -090105320c01000e010000020100004f0100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 -000f010200500100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a0100060302020103020206030100090105320c0100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100090105320c01006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a010006030202010302020603010009010c3400630100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -06030202010302020603010009000c3501ff01ff0161060c08010a0e0001062a01000603 -020201030202060301000936006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a010006030202010302020603010009350c0000630100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100090105320c01006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 -05320c0100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010009010516010205180c01006301000063 -01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 -020201030202060301000901051501000502010005170c0100630100000e010000530100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010009010519010005170c0100630100000e010000530100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010009010519010005170c01000f01020002010000000101000201000000010100030102 -003b0100000e010000000101000201000000010100030102000201010000010000020101 -0000010000030102002d01000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010009010517010105180c01000e01000002 -0100000101010001010000010101000101000001010000020100003a0100000e01010001 -010000010101000101000001010000020100000101000000010000000100000101000000 -0100000001000001010000020100002c0100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010009010519010005170c01 -001201000001010000020100000101000002010000050100003a0100000e010000020100 -000101000005010000020100000101000000010000000100000101000000010000000100 -00050100002c01000063010000630100006301000063010000020100060c08010a0e0001 -062a010006030202010302020603010009010519010005170c01000f0103000101000002 -0100000101000002010000020103003a0100000e01000002010000010100000501000002 -010000010100000001000000010000010100000001000000010000020103002c01000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -0202060301000901051501000502010005170c01000e0100000201000001010000020100 -00010100000201000001010000020100003a0100000e0100000201000001010000050100 -000201000001010000000100000001000001010000000100000001000001010000020100 -002c01000063010000630100006301000063010000020100060c08010a0e0001062a0100 -06030202010302020603010009010516010205180c01000e010000020100000101000002 -010000010100000201000001010000020100003a0100000e010100010100000101000005 -010000020100000101000000010000000100000101000000010000000100000101000002 -0100002c01000063010000630100006301000063010000020100060c08010a0e0001062a -0100060302020103020206030100090105320c01000f0103000101000002010000010100 -0002010000020103003a0100000e01000000010100020100000601020002010000000100 -0000010000010100000001000000010000020103002c0100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010009010532 -0c0100630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100090105320c01006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -06030100090105320c010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100090105320c01006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 -0c3400630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a010006030202010302020603010009000c3501ff01ff0161060c08010a0e0001 -062a01000603020201030202060301000936006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000935 -0c0000630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100090105320c01006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -06030100090105320c010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010009010518010005180c01 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a010006030202010302020603010009010517010105180c0100170100000601000042 -010000150100001c0100000b010200030102001801000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105160100 -0500010005180c0100170100004a010000150100001c0100000d01000005010000180100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -01030202060301000901051601000500010005180c01000f010200020104000201020002 -0100000001010003010200340100000f0102000201000001010000030102000201000000 -010100030102000201040001010000020100000401000005010000180100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -01000901051501000501010005180c01000e010000020100000301000006010000020101 -00010100000101000002010000330100000e010000020100000101000000010000030100 -000201000001010100010100000101000002010000030100000301000002010000040100 -00050100001801000063010000630100006301000063010000020100060c08010a0e0001 -062a01000603020201030202060301000901051401000502010005180c01000e01000007 -01000006010000020100000201000005010000330100000e010000050101000801000001 -010000020100000101000007010000030100000201000004010000050100001801000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -02020603010009010514010505170c01000f010200040100000601000002010000020100 -0002010300330100000f0102000201010005010300010100000201000002010200040100 -000301000002010000040100000501000018010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000901051801000518 -0c0100120100000301000006010000020100000201000001010000020100003301000012 -010000010100000001000003010000020100000101000002010000050100000301000003 -010000020100000401000005010000180100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010009010517010205170c01 -000e01000002010000030100000601000002010000020100000101000002010000330100 -000e01000002010000010100000101000002010000020100000101000002010000010100 -000201000003010000030100000101010004010000050100001801000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -090105320c01000f0102000501010004010000020100000201000002010300330100000f -010200020100000201000002010300010100000201000002010200050101000201010000 -01000004010000050100001801000063010000630100006301000063010000020100060c -08010a0e0001062a0100060302020103020206030100090105320c010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -0103020206030100090105320c0100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a0100060302020103020206030100090105320c010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -0100090105320c0100630100006301000063010000630100006301000063010000020100 -060c08010a0e0001062a010006030202010302020603010009010c340063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010009000c3501ff01ff0161060c08010a0e0001062a0100060302020103 -020206030100093600630100006301000063010000630100006301000063010000020100 -060c08010a0e0001062a010006030202010302020603010009350c000063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -0103020206030100090105320c0100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a010006030202010302020603010009010515010405170c0100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100090105150100051b0c01000e0100000e010000140100002d010000320102 -002d01000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100090105150100051b0c01000e0100000e0100004301000034 -0100002d01000063010000630100006301000063010000020100060c08010a0e0001062a -0100060302020103020206030100090105150100051b0c01000e01000001010000030102 -0002010400020102000201000000010100030102000201000000010100030102001f0100 -000e01000002010000010100000001010002010000000101000301020003010200050100 -00030102002601000063010000630100006301000063010000020100060c08010a0e0001 -062a010006030202010302020603010009010515010305180c01000e0100000001000003 -010000020100000301000003010000020100000101010001010000040100000201010001 -01000001010000020100001e0100000e0100000201000001010100010100000101010001 -010000010100000201000001010000020100000401000002010000020100002501000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -02020603010009010519010005170c01000e010100080100000301000007010000010100 -00080100000201000002010000050100001e0100000e0100000201000001010000020100 -000101000002010000010100000901000004010000060100002501000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -09010519010005170c01000e010100050103000301000004010300010100000801000002 -01000002010000020103001e0100000e0100000201000001010000020100000101000002 -010000020102000301030004010000030103002501000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105140100 -0503010005170c01000e0100000001000003010000020100000301000003010000020100 -000101000008010000020100000201000001010000020100001e0100000e010000020100 -000101000002010000010100000201000005010000010100000201000004010000020100 -00020100002501000063010000630100006301000063010000020100060c08010a0e0001 -062a010006030202010302020603010009010515010305180c01000e0100000101000002 -010000020100000301000003010000020100000101000008010000020100000201000001 -010000020100001e0100000e010000010101000101010001010000010101000101000001 -010000020100000101000002010000040100000201000002010000250100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -0100090105320c01000e0100000201000002010300040101000201030001010000080100 -000201000002010000020103001e0100000f010100000100000101000000010100020100 -000001010003010200030103000401000003010300250100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010009010532 -0c0100630100001501000005010000450100006301000063010000630100006301000002 -0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100 -0015010000050100004501000063010000630100006301000063010000020100060c0801 -0a0e0001062a0100060302020103020206030100090105320c0100630100001501000005 -0100004501000063010000630100006301000063010000020100060c08010a0e0001062a -0100060302020103020206030100090105320c0100630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -090105320c0100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a010006030202010302020603010009010c3400630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -02020603010009000c3501ff01ff0161060c08010a0e0001062a01000603020201030202 -06030100093600630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a010006030202010302020603010009350c0000630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100090105320c01006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a0100060302020103020206030100090105320c010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010009010517010205170c01006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -06030100090105160100051a0c0100110100001a010100040100002d010000160102000c -010000020100003701000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100090105150100051b0c01002c010000350100 -0018010000100100003701000063010000630100006301000063010000020100060c0801 -0a0e0001062a0100060302020103020206030100090105150100051b0c01000f01020003 -010200030102000301020004010000040102000201000000010100030102001f0100000f -010200050100000201000002010000020102000201000001010000340100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010009010515010305180c01001101000002010000020100000101000002010000010100 -00020100000101040004010000020101000101000001010000020100001e0100000e0100 -000201000004010000020100000201000004010000020100000001000035010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -060301000901051501000502010005170c01001101000002010000020100000101000005 -010000020100000301000006010000020100000201000001010000020100001e01000012 -010000040100000201000002010000040100000201010036010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 -051501000502010005170c01001101000002010000020100000201020002010400030100 -00060100000201000002010000010104001e0100000f0103000401000003010000000100 -0005010000020101003601000063010000630100006301000063010000020100060c0801 -0a0e0001062a01000603020201030202060301000901051501000502010005170c010011 -010000020100000201000005010000010100000701000006010000020100000201000001 -010000220100000e01000002010000040100000301000000010000050100000201000000 -0100003501000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010009010516010205180c01001101000002010000020100 -000101000002010000010100000201000003010000060100000201000002010000010100 -00020100001e0100000e0100000201000004010000040100000601000002010000010100 -003401000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100090105320c01001101000003010200030102000301020004 -010000060100000201000002010000020102001f0100000f010300040100000401000006 -01000002010000020100003301000063010000630100006301000063010000020100060c -08010a0e0001062a0100060302020103020206030100090105320c010011010000500100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100090105320c01000e01000001010000500100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100090105320c01000f01010051010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010009010532 -0c0100630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100090105320c01006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -0603010009010c3400630100006301000063010000630100006301000063010000020100 -060c08010a0e0001062a010006030202010302020603010009000c3501ff01ff0161060c -08010a0e0001062a01000603020201030202060301000936006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -0603010009350c0000630100006301000063010000630100006301000063010000020100 -060c08010a0e0001062a0100060302020103020206030100090105320c01006301000063 -01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 -02020103020206030100090105320c010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010009010515 -010405170c0100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000901051501000502010005170c01 -0011010100130100000b01000002010000290100002c0100000b010200030102001f0100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010009010518010005180c010010010000150100000f010000290100002c -0100000d010000050100001f01000063010000630100006301000063010000020100060c -08010a0e0001062a010006030202010302020603010009010518010005180c0100100100 -000301000000010100030102000301010000010000010100000001010003010200020100 -0001010000260100000e0100000001010003010200020100000001010002010000000101 -0002010400010100000201000004010000050100001f0100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010009010518 -010005180c01000e01040001010100010100000101000002010000010100000101010001 -01010001010000040100000201000000010000270100000e010100010100000101000002 -010000010101000101000001010100010100000301000003010000020100000401000005 -0100001f01000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010009010518010005180c01001001000003010000050100 -00020100000101000002010000010100000801000002010100280100000e010000020100 -000101000002010000010100000501000007010000030100000201000004010000050100 -001f01000063010000630100006301000063010000020100060c08010a0e0001062a0100 -06030202010302020603010009010517010005190c010010010000030100000501040001 -01000002010000010100000801000002010100280100000e010000020100000101000002 -010000010100000501000007010000030100000201000004010000050100001f01000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -02020603010009010517010005190c010010010000030100000501000005010000020100 -0001010000080100000201000000010000270100000e0100000201000001010000020100 -00010100000501000007010000030100000201000004010000050100001f010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -0603010009010517010005190c0100100100000301000005010000020100000101000001 -01010001010000080100000201000001010000260100000e010000020100000101000002 -010000010100000501000007010000030100000101010004010000050100001f01000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100090105320c01001001000003010000060102000301010000010000010100 -00080100000201000002010000250100000e010000020100000201020002010000050100 -0008010100020101000001000004010000050100001f0100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010009010532 -0c0100630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100090105320c01006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -06030100090105320c010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a0100060302020103020206030100090105320c0100630100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100090105320c01006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 -0c3400630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a010006030202010302020603010009000c3501ff01ff0161060c08010a0e0001 -062a01000603020201030202060301000936006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000935 -0c0000630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100090105320c01006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -06030100090105320c010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010009010516010205180c01 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a01000603020201030202060301000901051501000502010005170c0100630100000e -0100000f0100000b01000006010000100100001b01000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105150100 -0502010005170c0100630100000e0100001c010000180100001b01000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -0901051501000502010005170c01000e0100000001010003010200020100000001010042 -0100000e0100000101000002010000000101000301020003010200020104000201020002 -010000000101000301020002010000000101000301020002010000000101000301010000 -0100000201000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010009010516010205180c01000e01010001010000010100 -00020100000101010001010000410100000e010000000100000301010001010000040100 -000201000002010000030100000601000002010100010100000101000002010000010101 -000101000001010000020100000101010001010000010100000101010002010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -060301000901051501000502010005170c01000e01000002010000010100000201000001 -010000450100000e01010004010000080100000201000007010000060100000201000002 -010000010100000201000001010000020100000101000002010000010100000501000002 -0100000201000063010000630100006301000063010000020100060c08010a0e0001062a -01000603020201030202060301000901051501000502010005170c01000e010000020100 -000101040001010000450100000e01010004010000080100000301020004010000060100 -000201000002010000010104000101000002010000010104000101000005010000020100 -000201000063010000630100006301000063010000020100060c08010a0e0001062a0100 -0603020201030202060301000901051501000502010005170c01000e0100000201000001 -01000005010000450100000e010000000100000301000008010000060100000301000006 -010000020100000201000001010000050100000201000001010000050100000501000002 -0100000201000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010009010516010205180c01000e01010001010000010100 -000201000001010000450100000e01000001010000020100000801000002010000020100 -000301000006010000020100000201000001010000020100000101010001010000010100 -000201000001010000050100000101010002010000630100006301000063010000630100 -00020100060c08010a0e0001062a0100060302020103020206030100090105320c01000e -010000000101000301020002010000450100000e01000002010000010100000801000003 -010200050101000401000002010000020100000201020002010000000101000301020002 -01000006010100000100000201000063010000630100006301000063010000020100060c -08010a0e0001062a0100060302020103020206030100090105320c01000e010000530100 -005f0100000201000063010000630100006301000063010000020100060c08010a0e0001 -062a0100060302020103020206030100090105320c01000e010000530100005b01000002 -0100000201000063010000630100006301000063010000020100060c08010a0e0001062a -0100060302020103020206030100090105320c01000e010000530100005c010200030100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -0103020206030100090105320c0100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a010006030202010302020603010009010c3400630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -09000c3501ff01ff0161060c08010a0e0001062a01000603020201030202060301000936 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a010006030202010302020603010009350c0000630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -090105320c0100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a0100060302020103020206030100090105320c010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010009010516010205180c01006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000901 -051501000502010005170c0100260100003b01000019010000170102002d010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -060301000901051501000502010005170c01006301000019010000190100002d01000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -0202060301000901051501000502010005170c01000e0101000001000003010200020100 -00000101000301020003010200340100000f010200030101000001000002010200020100 -00000101000201000000010100050100000301020002010000000101001f010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -060301000901051501000502010005170c01000e01000000010000000100000101000002 -0100000101010001010000040100000201000002010000330100000e0100000201000001 -010000010101000101000002010000010101000101000001010100010100000401000002 -0100000201000001010100010100001e0100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010009010516010305170c01 -000e010000000100000001000005010000010100000801000006010000330100000e0100 -000201000001010000020100000101000002010000010100000201000001010000020100 -00040100000601000001010000020100001e010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000901051901000517 -0c01000e010000000100000001000002010300010100000801000003010300330100000e -010000020100000101000002010000010104000101000002010000010100000201000004 -0100000301030001010000020100001e0100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010009010518010005180c01 -000e01000000010000000100000101000002010000010100000801000002010000020100 -00330100000e010000020100000101000002010000010100000501000002010000010100 -000201000004010000020100000201000001010000020100001e01000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -09010515010205190c01000e010000000100000001000001010000020100000101000008 -0100000201000002010000330100000e0100000201000001010000010101000101000002 -010000010100000201000001010100010100000401000002010000020100000101000002 -0100001e01000063010000630100006301000063010000020100060c08010a0e0001062a -0100060302020103020206030100090105320c01000e0100000001000000010000020103 -00010100000801000003010300330100000f010200030101000001000002010200020100 -00020100000101000000010100050100000301030001010000020100001e010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -06030100090105320c0100630100002a0100003701000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100090105320c01 -00630100002a0100003701000063010000630100006301000063010000020100060c0801 -0a0e0001062a0100060302020103020206030100090105320c0100630100002a01000037 -01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 -02020103020206030100090105320c010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010009010532 -0c0100630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a010006030202010302020603010009010c340063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010009000c3501ff01ff0161060c08010a0e0001062a0100060302020103020206030100 -009a0100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a01000603020201030202060301000035080000630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -00010632080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010613010006040102061508010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010000010611010206030100060201000614080100630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -000106130100060301000602010006140801006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 -061301000603010006020100061408010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 -010006030100060201000614080100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100000106130100 -060301000602010006140801006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000001061301000603 -010006020100061408010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010000010613010006030100 -060201000614080100630100006301000063010000630100006301000063010000020100 -060c08010a0e0001062a0100060302020103020206030100000106110104060201020615 -080100630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 -0632080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100000108340063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a01000603020201030202060301000000083501ff01ff0161 -060c08010a0e0001062a0100060302020103020206030100009a01000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -060301000035080000630100006301000063010000630100006301000063010000020100 -060c08010a0e0001062a0100060302020103020206030100000106320801006301000063 -01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 -020201030202060301000001063208010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 -010006050100061608010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010000010611010206030102 -0616080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010613010006050100061608010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010613010006050100061608010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010613010006050100061608010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010000010613010006050100061608010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 -010006050100061608010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010000010613010006050100 -0616080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010611010406010104061408010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -00010632080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a01000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -01000001083400630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801 -0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -0035080000630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000001061301000604 -01020615080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001061101020603010006020100 -0614080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010613010006030100060201000614 -080100630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100000106130100060301000602010006140801 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a01000603020201030202060301000001061301000606010006150801006301000063 -01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 -020201030202060301000001061301000605010006160801006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -060301000001061301000604010006170801006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 -061301000603010006020100061408010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010611 -010406010104061408010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 -0632080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010834006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000000 -083501ff01ff0161060c08010a0e0001062a0100060302020103020206030100009a0100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100003508000063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -060301000001061301000604010206150801006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 -061101020603010006020100061408010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 -010006070100061408010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010000010613010006070100 -0614080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010613010006050101061508010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010613010006070100061408010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010613010006070100061408010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010000010613010006030100060201000614080100630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -000106110104060201020615080100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a01000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -060c08010a0e0001062a0100060302020103020206030100000106320801006301000063 -01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 -020201030202060301000001063208010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100000108340063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -01000000083501ff01ff0161060c08010a0e0001062a0100060302020103020206030100 -009a0100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a01000603020201030202060301000035080000630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -00010632080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010613010006060100061508010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010000010611010206050101061508010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 -010006040100060001000615080100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100000106130100 -060401000600010006150801006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000001061301000603 -010006010100061508010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010000010613010006020100 -060201000615080100630100006301000063010000630100006301000063010000020100 -060c08010a0e0001062a0100060302020103020206030100000106130100060201050614 -080100630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100000106130100060601000615080100630100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100000106110104060301020614080100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -00010632080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100000108340063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -01000603020201030202060301000000083501ff01ff0161060c08010a0e0001062a0100 -060302020103020206030100009a01000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000035080000630100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 -0632080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010613010006030104061408010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010611010206030100061808010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010613010006030100061808010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010000010613010006030100061808010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 -010006030103061508010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010000010613010006070100 -0614080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010613010006070100061408010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010613010006020100060301000614080100630100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100000106110104060101030615080100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -00010632080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100000108340063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -01000603020201030202060301000000083501ff01ff0161060c08010a0e0001062a0100 -060302020103020206030100009a01000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000035080000630100 -006301000063010000630100006301000063010000020100060c08010a0e0001062a0100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 -0632080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010613010006050102061408010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010611010206040100061708010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010613010006030100061808010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010000010613010006030100061808010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 -010006030103061508010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010000010613010006030100 -060201000614080100630100006301000063010000630100006301000063010000020100 -060c08010a0e0001062a0100060302020103020206030100000106130100060301000602 -01000614080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001061301000603010006020100 -0614080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010611010406020102061508010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -00010632080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a01000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -01000001083400630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801 -0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -0035080000630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000001061301000603 -01040614080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001061101020603010006020100 -0614080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010613010006060100061508010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010613010006060100061508010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010613010006060100061508010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -010000010613010006060100061508010063010000630100006301000063010000630100 -0063010000020100060c08010a0e0001062a010006030202010302020603010000010613 -010006050100061608010063010000630100006301000063010000630100006301000002 -0100060c08010a0e0001062a010006030202010302020603010000010613010006050100 -0616080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010611010406030100061608010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -00010632080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100060c08010a0e0001062a0100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a01000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100060c08010a0e0001062a010006030202010302020603 -01000001083400630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000000083501ff01ff0161060c0801 -0a0e0001062a0100060302020103020206030100009a0100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -0035080000630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000001061301000604 -01020615080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001061101020603010006020100 -0614080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010613010006030100060201000614 -080100630100006301000063010000630100006301000063010000020100060c08010a0e -0001062a0100060302020103020206030100000106130100060301000602010006140801 -00630100006301000063010000630100006301000063010000020100060c08010a0e0001 -062a01000603020201030202060301000001061301000604010206150801006301000063 -01000063010000630100006301000063010000020100060c08010a0e0001062a01000603 -020201030202060301000001061301000603010006020100061408010063010000630100 -0063010000630100006301000063010000020100060c08010a0e0001062a010006030202 -010302020603010000010613010006030100060201000614080100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100000106130100060301000602010006140801006301000063010000630100 -00630100006301000063010000020100060c08010a0e0001062a01000603020201030202 -060301000001061101040602010206150801006301000063010000630100006301000063 -01000063010000020100060c08010a0e0001062a01000603020201030202060301000001 -0632080100630100006301000063010000630100006301000063010000020100060c0801 -0a0e0001062a010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100060c08010a0e0001062a0100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100060c08010a0e0001062a01000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100060c08010a0e0001062a -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100060c08010a0e0001062a0100060302020103020206030100 -00010632080100630100006301000063010000630100006301000063010000020100060c -08010a0e0001062a01000603020201030202060301000001083400630100006301000063 -010000630100006301000063010000020100060c08010010062a01000603020201030202 -060301ff01ff0199060c08000011062a010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 -02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 -020201030202060301000649010006ff06ff069801000603020201030202060301000648 -010106ff06ff06980100060302020103020206030100064701000600010006ff06ff0698 -01000603020201030202060301000649010006ff06ff0698010006030202010302020603 -01000649010006ff06ff069801000603020201030202060301000649010006ff06ff0698 -01000603020201030202060301000649010006ff06ff0698010006030202010302020603 -01000649010006ff06ff069801000603020201030202060301000647010406ff06ff0696 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 -020206030100063708ff08ff0860064a0100060302020103020206030100063708ff08ff -085f0000064a010006030202010302020603010006370801001d0aff0aff0a3e0001064a -010006030202010302020603010006370801001c08000aff0aff0a3e0001064a01000603 -02020103020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a -0100060302020103020206030100063708010001060b08000000060b08010aff0aff0a3e -0001064a0100060302020103020206030100063708010001060b08000000060b08010aff -0aff0a3e0001064a0100060302020103020206030100063708010001060b08000000060b -08010aff0aff0a3e0001064a0100060302020103020206030100063708010001060b0800 -0000060b08010aff0aff0a3e0001064a0100060302020103020206030100063708010001 -060b08000000060b08010aff0aff0a3e0001064a01000603020201030202060301000637 -08010001060b08000000060b08010aff0aff0a3e0001064a010006030202010302020603 -0100063708010001060b08000000060b08010aff0aff0a3e0001064a0100060302020103 -020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a01000603 -02020103020206030100063708010001060b08000000060b08010aff0aff0a3e0001064a -0100060302020103020206030100063708010001060b08000000060b08010aff0aff0a3e -0001064a0100060302020103020206030100063708010001080c0000080d0aff0aff0a3e -0001064a0100060302020103020206030100063708010000081c0aff0aff0a3e0001064a -01000603020201030202060301000637080100ff00ff005e064a01000603020201030202 -060301000637080000ff00ff005f064a010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 -02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 -0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 -02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 -0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 -02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 -0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020101 -00040603010006ff06ff06e301000603000502020400060301ff01ff01e5060300000202 -040000000202040006ff06ff06ed00000202040000000202040006ff06ff06ed00000202 -040000000202040006ff06ff06ed00000202040000000202040006ff06ff06ed00000202 -0400000002020400000502ff02ff02e100060202040000000208040002ff02ff02e10000 -0208040000000208040002ff02ff02e100000208040000000208040001ff01ff01e10000 -020804000000040901ff01ff01e100000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 532 441 -%%EOF diff --git a/lib/tv/doc/src/tv_table_sorted.gif b/lib/tv/doc/src/tv_table_sorted.gif Binary files differdeleted file mode 100644 index fd69e3cc58..0000000000 --- a/lib/tv/doc/src/tv_table_sorted.gif +++ /dev/null diff --git a/lib/tv/doc/src/tv_table_sorted.ps b/lib/tv/doc/src/tv_table_sorted.ps deleted file mode 100644 index 681b2f4d19..0000000000 --- a/lib/tv/doc/src/tv_table_sorted.ps +++ /dev/null @@ -1,1502 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (/clearcase/otp/erts/lib/tv/doc/src/tv_table_sorted.eps) -%%CreationDate: (Mon Mar 19 17:15:35 2001) -%%BoundingBox: 0 0 532 441 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 0 -%%EndComments - -%%BeginDefaults -%%PageOrientation: Portrait -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/buffer 512 string def -/byte 1 string def -/color_packet 3 string def -/pixels 768 string def - -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 gt - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 gt - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-RunlengthEncodedCompression or 1-NoCompression. - % hex color packets. - % - gsave - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Helvetica findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 532 441 -userdict begin -%%BeginData: -DisplayImage -0 0 -532.000000 441.000000 -12 -760 630 -1 -0 -0 -16 -ffffff -000000 -d8d8d8 -c2c2c2 -6b6b6b -ff0000 -d9d9d9 -b22222 -828282 -00ff00 -ffda00 -ffff80 -c3c3c3 -7f7f7f -998300 -000000 -000a01ff01ff01e1000b0208040001ff01ff01e100000208040000000208040002ff02ff -02e1000002080400000002080400020000ff00ff00de0400020000000208040000000202 -04060200000004ff04ff04de020000000405020204000000020204000209000d02ff02ff -02d500000202040000000202040002080000020d040002a501010206010102150101021e -0101022901010206010102430101022a010102260101023201010233010102ae00000202 -040000000202040002080000020d04000277010502000107020101030206010702090101 -02060101021501010219010002030101021c0100020b010102060101022e010202020100 -020d0101022a0101020c0104021401010232010102160100021b010102ae000002020400 -00000202040002080000020d04000277010102070101020301010201010102080101020c -010102060101021501010218010102210101020b010102060101022e010202020100020d -01010238010102020101024801010215010102cc00000202040000000202040002080000 -0202040602030400027701010207010102030101020c0101020401030203010102000101 -020301010202010302020101020901010202010302030103020201030201010402010101 -020201030203010102000101020a01040201010302030101020001010203010102020103 -022701000200010102010100020201030203010402020103020201010209010102000101 -020101010203010302030101020201010200010102020101020101030202010402020101 -020101010202010102020101020001010203010102000101020301030203010402020104 -020501040202010102010101020501030201010402000101020101010204010302020101 -020001010201010102020103020201040202010402020103020301010200010102060104 -020201030274000002020400000004030208000002020400030400000203040002770101 -0207010102030102020b0101020301010201010102020102020001010202010102010101 -020101010201010102090101020101010201010102010101020101010200010102010101 -020101010203010102010101020101010202010202000101020a01010202010102010101 -020201020200010102020101020101010201010102260100020001010201010002010101 -020101010201010102010101020101010201010102010101020901020200010202000101 -020101010201010102020101020201020200010102010101020001010200010102010101 -020101010202010102010101020201010202010202000101020201020200010102010101 -020101010201010102050101020801010201010102020101020101010204010102010101 -020101010202010102010101020301010201010102010101020001010201010102010101 -020101010200010102050101020501010201010102020102020001010204010102050101 -020101010273000004030101020b00000203040003020000020404000277010402040101 -0204010302090101020701010202010102010101020201010201010102010101020d0101 -020101010201010102010101020801010201010102030101020101010201010102020101 -02010101020a010102060101020201010201010102020101020101010201010102260100 -0200010202000100020101010201010102010101020101010201010102010101020d0101 -020101010201010102050101020201010202010102010101020101010200010102000101 -020101010201010102020101020101010202010102020101020101010202010102010101 -020101010201010102010102020401020207010102010101020201010201010102040101 -020101010201010102030101020001000204010102010101020101020203010102010101 -020401020204010202040101020101010202010102010101020401020204010102010101 -02760103020b000002030400030200000204040002770101020701010206010202080101 -0204010402020101020101010202010102010105020d0101020101010201010102010101 -02050104020101010203010102010101020101010202010102010101020a010102030104 -020201010201010102020101020101050226010002010101020001000201010102010101 -020101010201010102010105020d01010201010102010101020201040202010102020101 -020101010201010102000101020001010201010102010101020201010201010102020101 -020201010201010102020101020101010201010502020103020301030205010102010101 -020201010201010102040105020101010204010102050105020101010204010102010101 -020501030203010302020101020101010202010102010101020501030202010502760103 -020b00000204040003000000020504000277010102070101020701010208010102030101 -020101010202010102010101020201010201010102110101020101010201010102010101 -0204010102010101020101010203010102010101020101010202010102010101020a0101 -020201010201010102020101020101010202010102010101022a01000202010202010101 -020101010201010102010101020101010211010102010101020101010201010102010101 -020201010202010102010101020101010201010102000101020001010200010202020101 -020101010202010102020101020101010202010102010101020101010208010202040102 -020401010201010102020101020101010204010102050101020301000200010102040101 -020501010204010102010101020701020204010202010101020101010202010102010101 -0207010202010101027a0103020b00000204040003000000020504000277010102070101 -020301010201010102080101020301010201010102020101020101010202010102010101 -020201000201010102090101020101010201010102010101020201000200010102010101 -020101010203010102010101020101010202010102010101020a01010202010102010101 -020201010201010102020101020101010202010002260100020201020201010102010101 -020101010200010202010101020201000201010102090101020101010201010102010101 -020101010202010102020101020101010202010102070101020001010202010102000102 -020201010202010102010101020201010201010102010101020201000205010102050101 -020101010200010102000102020201010200010202010101020001010202010002010101 -020201010201010102000101020001010202010002010101020401010201010102020100 -020401010205010102010101020101010202010102010101020101010204010102010101 -0202010002760103020b0000020500000206040002770105020301010204010302090101 -020401020200010102010104020301010202010302020101020901010202010302030103 -02020102020001010201010202010101020201030203010102010101020b010202010102 -020001010201010402030101020201030227010002030101020201030203010102000101 -020201030202010102090101020101010201010102020102020001010201010102020101 -020101010203010502050101020301010200010102020101020201010201010102020101 -020101010202010302020104020201040202010102010101020001010203010102000101 -020101010201010302030102020001010201010102000101020101030202010102040101 -020201030201010402020104020301030203010102010101020101010200010402030103 -02770103020b0000020d040002fc010602a201010201010102ff022a0103020b0000020d -040002ff02a7010302ff022b0103020b0000020d040002ff02ff02d70103020c040d02ff -02ff02d8010302ff02ff02f3010302ff02ff02f30103020200ff00ff00ec040002020103 -0202000004ff04ff04ec0202010302ff02ff02f30103020200ff00ff00ed020201030202 -00ff00ff00ec0800020201030202000106ff06ff06e90801020201030202000106ff06ff -06e90801020201030202000106ff06ff06e90801020201030202000106ff06ff06e90801 -020201030202000106ff06ff06e908010202010302020001060b07040604070006030702 -061f07040610070206200702060b070006060700062d0700060207000604070006ff06fa -07000602070006090702061308010202010302020001060b0700060f0700062107000614 -0700061f070006020700060a0700063507000602070006ff06ff0600070006020700060b -0700061308010202010302020001060b0700060607020605070006030702061a07000604 -070206030702060507000603070206180700060207000601070006000701060207040602 -070206030702060207000600070106030702061807000602070006020702060307020602 -07000602070006ff06eb07000602070006020702060507000602070006000701060c0801 -0202010302020001060b0700060807000605070006020700060207000619070006030700 -060207000601070006020700060407000602070006020700061707000602070006010701 -060107000603070006060700060207000602070006010701060107000601070006020700 -0618070006000700060507000602070006020700060107000602070006ff06eb07000602 -07000601070006020700060407000602070106010700060b08010202010302020001060b -070306050700060507000602070006020700061907000603070006020700060107000602 -07000604070006020700061b070006020700060107000602070006030700060607000602 -070006020700060107000602070006010700061c07000600070006050700060207000602 -070006010700060007000600070006ff06eb070406010700060207000604070006020700 -06020700060b08010202010302020001060b070006080700060507000602070406190700 -060307000602070006010700060207000604070006030702061807000602070006010700 -060207000603070006060700060207000602070006010700060207000602070206190700 -06000700060507000602070406010700060007000600070006ff06eb0700060207000601 -0704060407000602070006020700060b08010202010302020001060b0700060807000605 -070006020700061d07000603070006020700060107000602070006040700060607000617 -070006020700060107000602070006030700060607000602070006020700060107000602 -07000605070006190700060607000602070006050700060007000600070006ff06eb0700 -0602070006010700060807000602070006020700060b08010202010302020001060b0700 -060807000605070006020700060207000619070006030700060207000601070006020700 -060407000602070006020700061707000602070006010701060107000603070006060700 -060207000602070006010700060207000601070006020700061907000606070006020700 -0602070006010700060007000600070006ff06eb07000602070006010700060207000604 -07000602070106010700060b08010202010302020001060b070006080700060507000603 -0702061a0700060407020603070206050700060307020619070206020700060007010605 -07010604070006030702060207000602070006020702061a070006060700060307020603 -07000600070006ff06ec07000602070006020702060507000602070006000701060c0801 -0202010302020001067d070006ff06ff06590700060f08010202010302020001060a0706 -062a07060631070606000700063d070606ff06fe0706060e0700060f0801020201030202 -0001060a0706062a07060631070606000700063d070606ff06fe0706060e0700060f0801 -020201030202000106ff06ff06e90801020201030202000106ff06ff06e9080102020103 -0202000106ff06ff06e90801020201030202000108ff08ff08eb020201030202000008ff -08ff08ec02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff -06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff -06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202010302020603 -0016061600160616004406160016061600160616001606ff06be02020103020206030015 -080006160015080006160015080000150800001508000616001508000616001508000616 -0015080006ff06be02020103020206030001061208010616000106120801061600010612 -080100010612080100010612080106160001061208010616000106120801061600010612 -080106ff06be020201030202060300010612080106160001061208010616000106120801 -000106120801000106120801061600010612080106160001061208010616000106120801 -06ff06be0202010302020603000106120801061600010603070206030702060408010616 -000106120801000106120801000106120801061600010612080106160001061208010616 -00010612080106ff06be0202010302020603000106080702060608010616000106030702 -060307020604080106160001061208010001061208010001061208010616000106050704 -0607080106160001060707010608080106160001060707030606080106ff06be02020103 -020206030001060b0701060408010616000106020704060107040603080106160001060e -0700060208010001060e070006020801000106020700060e080106160001060307080605 -080106160001060607030607080106160001060507070604080106ff06be020201030202 -06030001060d070006000700060108010616000106020700060107010601070006010701 -0603080106160001060e0700060208010001060e070006020801000106020700060e0801 -061600010602070a06040801061600010606070306070801061600010604070306010703 -0603080106ff06be02020103020206030001060207020608070106010801061600010601 -070d0602080106160001060b07000601070006020801000106020700060a070006020801 -00010602070006010700060b080106160001060207030602070306040801061600010607 -0701060808010616000106040702060307020603080106ff06be02020103020206030001 -060107080602070206010801061600010600070006000703060007020600070406010801 -06160001060b07000601070006020801000106020700060a070006020801000106020700 -06010700060b080106160001060107030604070306030801061600010612080106160001 -06040702060307020603080106ff06be0202010302020603000106010709060608010616 -000106000700060007030600070206000704060108010616000106080700060107000601 -070006020801000106020700060407000604070006020801000106020700060107000601 -070006080801061600010601070206030707060108010616000106050704060708010616 -000106050701060207020604080106ff06be020201030202060300010601070906060801 -061600010600070006000703060007020600070406010801061600010608070006010700 -060107000602080100010602070006040700060407000602080100010602070006010700 -060107000608080106160001060107020604070506020801061600010606070306070801 -06160001060907020605080106ff06be0202010302020603000106010709060608010616 -000106000700060007030600070206000704060108010616000106050700060107000601 -070006010700060208010001060207000604070006010700060107000602080100010602 -070006010700060107000601070006050801061600010601070206050703060308010616 -0001060707020607080106160001060807020606080106ff06be02020103020206030001 -0601070d0602080106160001060007000600070706000704060108010616000106050700 -060107000601070006010700060208010001060207000604070006010700060107000602 -080100010602070006010700060107000601070006050801061600010601070306050701 -0604080106160001060707020607080106160001060707020607080106ff06be02020103 -020206030001060107030607070006030801061600010600070006000704060107000600 -070406010801061600010602070006010700060107000601070006010700060208010001 -060207000601070006010700060107000601070006020801000106020700060107000601 -07000601070006010700060208010616000106020703060b080106160001060707020607 -080106160001060707020607080106ff06be020201030202060300010601070206070700 -060408010616000106000706060107060601080106160001060207000601070006010700 -060107000601070006020801000106020700060107000601070006010700060107000602 -080100010602070006010700060107000601070006010700060208010616000106020709 -06050801061600010607070206070801061600010612080106ff06be0202010302020603 -000106010701060707000605080106160001060007000600070206050700060007020601 -080106160001060207000601070006010700060107000601070006020801000106020700 -060107000601070006010700060107000602080100010602070006010700060107000601 -070006010700060208010616000106030707060608010616000106060704060608010616 -0001060707020607080106ff06be02020103020206030001060107090606080106160001 -060007000600070206050700060007020601080106160001060207000601070006010700 -060107000601070006020801000106020700060107000601070006010700060107000602 -080100010602070006010700060107000601070006010700060208010616000106050704 -0607080106160001060507060605080106160001060707020607080106ff06be02020103 -020206030001061208010616000106000704060507040601080106160001061208010001 -0612080100010612080106160001061208010616000106120801061600010612080106ff -06be02020103020206030001061208010616000106120801061600010612080100010612 -080100010612080106160001061208010616000106120801061600010612080106ff06be -020201030202060300010612080106160001061208010616000106120801000106120801 -00010612080106160001061208010616000106120801061600010612080106ff06be0202 -010302020603000108140616000108140616000108140001081400010814061600010814 -06160001081406160001081406ff06be0202010302020603000008150616000008150616 -00000815000008150000081506160000081506160000081506160000081506ff06be0202 -0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 -0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 -0103020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed0202 -0103020206ff06ff06ed02020103020206ff06ff06ed020201030202060301ff01ff01e5 -06030202010302020603010000ff00ff00cf010000120100060302020103020206030100 -00ff00ff00cf010000110800010006030202010302020603010000ff00ff00cf01000001 -060e0801010006030202010302020603010000ff00ff00cf01000001060e080101000603 -0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603 -010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf -01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801 -010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103 -02020603010000ff00ff00cf010000010601010a06010801010006030202010302020603 -010000ff00ff00cf010000010602010806020801010006030202010302020603010000ff -00ff00cf010000010603010606030801010006030202010302020603010000ff00ff00cf -010000010604010406040801010006030202010302020603010000ff00ff00cf01000001 -0605010206050801010006030202010302020603010000ff00ff00cf0100000106060100 -06060801010006030202010302020603010000ff00ff00cf01000001060e080101000603 -0202010302020603010000ff00ff00cf01000001060e0801010006030202010302020603 -010000ff00ff00cf01000001060e0801010006030202010302020603010000ff00ff00cf -01000001060e0801010006030202010302020603010000ff00ff00cf01000001060e0801 -010006030202010302020603010000ff00ff00cf01000001060e08010100060302020103 -02020603010000ff00ff00cf01000001060e0801010006030202010302020603010000ff -00ff00cf010000010810010006030202010302020603010000ff00ff00cf010000000811 -01000603020201030202060301ff01ff01e5060302020103020206ff06ff06ed02020103 -020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103 -020206ff06ff06ed02020103020206ff06ff06ed02020103020206ff06ff06ed02020103 -020206ff06ff06ed020201030202060301ff01ff01e506030202010302020603010006ff -06ff06970100064a01000603020201030202060301000663010506ff06ff062d0100064a -01000603020201030202060301000662010706ff06ff062c0100064a0100060302020103 -020206030100066101020603010206ff06ff062b0100064a010006030202010302020603 -0100066101010605010106ff06ff062b0100064a01000603020201030202060301000661 -01020603010206ff06ff062b0100064a01000603020201030202060301000662010706ff -06ff062c0100064a01000603020201030202060301000663010506ff06ff062d0100064a -01000603020201030202060301000665010106ff06ff062f0100064a0100060302020103 -0202060301000665010106ff06ff062f0100064a01000603020201030202060301000665 -010106ff06ff062f0100064a01000603020201030202060301000665010106ff06ff062f -0100064a01000603020201030202060301000665010106ff06ff062f0100064a01000603 -020201030202060301000665010106ff06ff062f0100064a010006030202010302020603 -0100066101010600010206ff06ff062f0100064a01000603020201030202060301000661 -01010600010206ff06ff062f0100064a01000603020201030202060301000661010506ff -06ff062f0100064a01000603020201030202060301000661010506ff06ff062f0100064a -0100060302020103020206030100066101020600010106ff06ff062f0100064a01000603 -0202010302020603010006ff06ff06970100064a01000603020201030202060301ff01ff -0199064a010006030202010302020603010006350b610d04005f0d04005f0d04005f0d04 -005f0d04005f0d0400010100061308120623010006030202010302020603010006350b60 -0e000d030100005e08000d030100005e08000d030100005e08000d030100005e08000d03 -0100005e08000d0301000001010006130811000006230100060302020103020206030100 -06350b010a5d0e010d0101020001065b08010d0101020001065b08010d0101020001065b -08010d0101020001065b08010d0101020001065b08010d01010200010100061308010010 -0623010006030202010302020603010006350b010a2c01000a2f0e010d0101020001062a -0102062d08010d0101020001062a0102062d08010d0101020001062c0100062d08010d01 -0102000106290104062c08010d0101020001062b0102062c08010d010102000101000613 -0801000d080000010623010006030202010302020603010006350b010a2a01020a2f0e01 -0d01010200010629010006020100062c08010d01010200010629010006020100062c0801 -0d0101020001062b0101062d08010d010102000106290100063008010d0101020001062a -0100062f08010d01010200010100061308010001060a0801000106230100060302020103 -02020603010006350b010a2c01000a2f0e010d01010200010629010006020100062c0801 -0d0101020001062d0100062c08010d0101020001062a010006000100062d08010d010102 -000106290100063008010d010102000106290100063008010d0101020001010006130801 -0001060a080100010623010006030202010302020603010006350b010a2c01000a2f0e01 -0d01010200010629010006020100062c08010d0101020001062d0100062c08010d010102 -0001062a010006000100062d08010d010102000106290100063008010d01010200010629 -0100063008010d01010200010100061308010001060a0801000106230100060302020103 -02020603010006350b010a2c01000a2f0e010d0101020001062c0100062d08010d010102 -0001062b0101062d08010d01010200010629010006010100062d08010d01010200010629 -0103062d08010d010102000106290103062d08010d01010200010100061308010001060a -080100010623010006030202010302020603010006350b010a2c01000a2f0e010d010102 -0001062b0100062e08010d0101020001062d0100062c08010d0101020001062801000602 -0100062d08010d0101020001062d0100062c08010d01010200010629010006020100062c -08010d01010200010100061308010001060a080100010623010006030202010302020603 -010006350b010a2c01000a2f0e010d0101020001062a0100062f08010d0101020001062d -0100062c08010d010102000106280105062c08010d0101020001062d0100062c08010d01 -010200010629010006020100062c08010d01010200010100061308010001060a08010001 -0623010006030202010302020603010006350b010a2c01000a2f0e010d01010200010629 -010006020100062c08010d01010200010629010006020100062c08010d0101020001062c -0100062d08010d01010200010628010006030100062c08010d0101020001062901000602 -0100062c08010d01010200010100061308010001060a0801000106230100060302020103 -02020603010006350b010a2a01040a2d0e010d010102000106290104062c08010d010102 -0001062a0102062d08010d0101020001062b0102062c08010d010102000106290103062d -08010d0101020001062a0102062d08010d01010200010100061308010001060a08010001 -0623010006030202010302020603010006350b010a5d0e010d0101020001065b08010d01 -01020001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b -08010d01010200010100061308010001060a080100010623010006030202010302020603 -010006350b010a5d0e010d0101020001065b08010d0101020001065b08010d0101020001 -065b08010d0101020001065b08010d0101020001065b08010d0101020001010006130801 -0001060a080100010623010006030202010302020603010006350b010a5d0e010d010102 -0001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b0801 -0d0101020001065b08010d01010200010100060e0100060308010001060a080100010623 -010006030202010302020603010006350b010a5d0e010d0101020001065b08010d010102 -0001065b08010d0101020001065b08010d0101020001065b08010d0101020001065b0801 -0d01010200010100060d0101060308010001060a08010001062301000603020201030202 -0603010006350b010a5d0e010d0101020001065b08010d0101020001065b08010d010102 -0001065b08010d0101020001065b08010d0101020001065b08010d01010200010100060c -010006000100060308010001080c00010623010006030202010302020603010006350b01 -0a5d0e010d0101020001065b08010d0101020001065b08010d0101020001065b08010d01 -01020001065b08010d0101020001065b08010d01010200010100060e010006030801000d -080000010623010006030202010302020603010006350b010e5f0d0101020001085d0d01 -01020001085d0d0101020001085d0d0101020001085d0d0101020001085d0d0101020001 -0100060e0100060308010001060a08010001062301000603020201030202060301000635 -0b000e600d0001030000085e0d0001030000085e0d0001030000085e0d0001030000085e -0d0001030000085e0d000103000008000100060e0100060308010001060a080100010623 -0100060302020103020206030100009a0100006301000063010000630100006301000063 -010000020100060e0100060308010001060a080100010623010006030202010302020603 -01000035080000630100006301000063010000630100006301000063010000020100060e -0100060308010001060a0801000106230100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100060c010406010801 -0001060a0801000106230100060302020103020206030100000106320801006301000063 -01000063010000630100006301000063010000020100061308010001060a080100010623 -010006030202010302020603010000010617010006190801006301000063010000630100 -00630100006301000063010000020100061308010001060a080100010623010006030202 -01030202060301000001061501020619080100630100000e010000530100006301000063 -0100006301000063010000020100061308010001060a0801000106230100060302020103 -0202060301000001061701000619080100630100000e0100005301000063010000630100 -006301000063010000020100061308010001060a08010001062301000603020201030202 -0603010000010617010006190801000f0102000201000000010100020100000001010003 -0102003b0100000e01000000010100020100000001010003010200020101000001000002 -01010000010000030102002d010000630100006301000063010000630100000201000613 -08010001060a080100010623010006030202010302020603010000010617010006190801 -000e010000020100000101010001010000010101000101000001010000020100003a0100 -000e01010001010000010101000101000001010000020100000101000000010000000100 -0001010000000100000001000001010000020100002c0100006301000063010000630100 -0063010000020100061308010001060a0801000106230100060302020103020206030100 -00010617010006190801001201000001010000020100000101000002010000050100003a -0100000e0100000201000001010000050100000201000001010000000100000001000001 -0100000001000000010000050100002c0100006301000063010000630100006301000002 -0100061308010001060a0801000106230100060302020103020206030100000106170100 -06190801000f01030001010000020100000101000002010000020103003a0100000e0100 -000201000001010000050100000201000001010000000100000001000001010000000100 -0000010000020103002c0100006301000063010000630100006301000002010006130801 -0001080c00010623010006030202010302020603010000010617010006190801000e0100 -00020100000101000002010000010100000201000001010000020100003a0100000e0100 -000201000001010000050100000201000001010000000100000001000001010000000100 -000001000001010000020100002c01000063010000630100006301000063010000020100 -061308010000080d00010623010006030202010302020603010000010615010406170801 -000e010000020100000101000002010000010100000201000001010000020100003a0100 -000e01010001010000010100000501000002010000010100000001000000010000010100 -00000100000001000001010000020100002c010000630100006301000063010000630100 -00020100061308010c0e000106230100060302020103020206030100000106320801000f -01030001010000020100000101000002010000020103003a0100000e0100000001010002 -01000006010200020100000001000000010000010100000001000000010000020103002c -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001063208010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000108340063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000000835 -01ff01ff0161061308010c0e000106230100060302020103020206030100009a01000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000035080000630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010616010206180801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061501000602 -0100061708010011010100130100000b01000002010000290100002c0100000b01020003 -0102001f01000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010615010006020100061708010010010000150100 -000f010000290100002c0100000d010000050100001f0100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010615 -010006020100061708010010010000030100000001010003010200030101000001000001 -01000000010100030102000201000001010000260100000e010000000101000301020002 -01000000010100020100000001010002010400010100000201000004010000050100001f -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -0202010302020603010000010618010006180801000e0104000101010001010000010100 -000201000001010000010101000101010001010000040100000201000000010000270100 -000e01010001010000010100000201000001010100010100000101010001010000030100 -00030100000201000004010000050100001f010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061701000619 -080100100100000301000005010000020100000101000002010000010100000801000002 -010100280100000e01000002010000010100000201000001010000050100000701000003 -0100000201000004010000050100001f0100006301000063010000630100006301000002 -0100061308010c0e000106230100060302020103020206030100000106160100061a0801 -001001000003010000050104000101000002010000010100000801000002010100280100 -000e01000002010000010100000201000001010000050100000701000003010000020100 -0004010000050100001f0100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010615010006020100061708010010 -010000030100000501000005010000020100000101000008010000020100000001000027 -0100000e0100000201000001010000020100000101000005010000070100000301000002 -01000004010000050100001f010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001061501040617080100100100 -000301000005010000020100000101000001010100010100000801000002010000010100 -00260100000e010000020100000101000002010000010100000501000007010000030100 -000101010004010000050100001f01000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801001001000003 -01000006010200030101000001000001010000080100000201000002010000250100000e -010000020100000201020002010000050100000801010002010100000100000401000005 -0100001f01000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106320801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001083400630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -0000083501ff01ff0161061308010c0e000106230100060302020103020206030100009a -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000350800006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -063208010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106160102061808010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010615 -01000602010006170801002601000003010200030102002d010000160102004901000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -02020603010000010619010006170801002d010000050100002d01000018010000490100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010619010006170801000f01010000010000010100000201000001 -0100000001010003010200050100000501000003010200260100000f0102000501000002 -010000020100000201020003010200030102000201000000010100260100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010617010106180801000e01000001010100010100000201000001010100010100 -000401000005010000050100000201000002010000250100000e01000002010000040100 -000201000002010000010100000201000001010000020100000101000002010000010101 -00010100002501000063010000630100006301000063010000020100061308010c0e0001 -0623010006030202010302020603010000010619010006170801000e0100000201000001 -01000002010000010100000201000004010000050100000501000006010000250100000e -010000080100000201000002010000010100000501000005010000020100000101000002 -0100002501000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010619010006170801000e01000002010000010100 -0002010000010100000201000004010000050100000501000003010300250100000f0102 -000501000002010000020100000201020003010200020104000101000002010000250100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -01030202060301000001061501000602010006170801000e010000020100000101000002 -010000010100000201000004010000050100000501000002010000020100002501000012 -010000040100000201000002010000050100000501000001010000050100000201000025 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -0202010302020603010000010616010206180801000e0100000101010001010000010101 -0001010000020100000401000005010000050100000201000002010000250100000e0100 -000201000004010000020100000101010001010000020100000101000002010000010100 -000201000001010000020100002501000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801000f01010000 -010000020101000001000001010000020100000401000005010000050100000301030025 -0100000f0102000501000003010100000100000201020003010200030102000201000002 -0100002501000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010632080100120100004f01000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -06030100000106320801000e010000020100004f01000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -06320801000f010200500100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001063208010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010834 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000000083501ff01ff0161061308010c0e00010623 -0100060302020103020206030100009a0100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100003508000063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106320801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001061801000618080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000001061701010618080100110100001a010100040100002d -010000160102000c01000002010000370100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010616010006000100 -06180801002c010000350100001801000010010000370100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010616 -01000600010006180801000f010200030102000301020003010200040100000401020002 -01000000010100030102001f0100000f0102000501000002010000020100000201020002 -010000010100003401000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106150100060101000618080100110100 -000201000002010000010100000201000001010000020100000101040004010000020101 -000101000001010000020100001e0100000e010000020100000401000002010000020100 -000401000002010000000100003501000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106140100060201000618 -080100110100000201000002010000010100000501000002010000030100000601000002 -0100000201000001010000020100001e0100001201000004010000020100000201000004 -010000020101003601000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106140105061708010011010000020100 -0002010000020102000201040003010000060100000201000002010000010104001e0100 -000f01030004010000030100000001000005010000020101003601000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106180100061808010011010000020100000201000005010000010100000701000006 -010000020100000201000001010000220100000e01000002010000040100000301000000 -010000050100000201000000010000350100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010617010206170801 -001101000002010000020100000101000002010000010100000201000003010000060100 -00020100000201000001010000020100001e0100000e0100000201000004010000040100 -000601000002010000010100003401000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801001101000003 -010200030102000301020004010000060100000201000002010000020102001f0100000f -010300040100000401000006010000020100000201000033010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -063208010011010000500100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801000e01000001 -010000500100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801000f01010051010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001083400630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -0000083501ff01ff0161061308010c0e0001062301000603020201030202060301000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000000050000000500000005000000050000000500 -000005000000050000000500000005000100006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000500 -000005320100050000630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000005340100006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000500000005150104051701000500006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -06030100000005160100051c0100000e010000160100003b0100000e0100000601020010 -0100000c0100002901000063010000630100006301000063010000020100061308010c0e -0001062301000603020201030202060301000500000005150100051b01000500000e0100 -00530100000e01000008010000100100000c010000290100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000000516 -0100051c0100000e01000001010000030102000201000000010100030102000201000000 -010100340100000e01000000010100050100000301020003010200020100000101000003 -010200020100000001010003010200020100000001010003010100000100001001000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -0202060301000500000005150103051801000500000e0100000001000003010000020100 -000101010001010000040100000201010001010000330100000e01010001010000040100 -000201000002010000010100000201000001010000000100000301000002010000010101 -000101000001010000020100000101010001010000010100000101010010010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000000051a010005180100000e0101000801000001010000080100000201000002 -010000330100000e01000002010000040100000601000001010000050101000401000002 -010000010100000201000001010000020100000101000005010000020100001001000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -0202060301000500000005190100051701000500000e0101000501030001010000080100 -000201000002010000330100000e01000002010000040100000301030001010000050101 -000401040001010000020100000101040001010000050100000201000010010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000000051501000503010005180100000e01000000010000030100000201000001 -010000080100000201000002010000330100000e01000002010000040100000201000002 -010000010100000501000000010000030100000501000002010000010100000501000005 -010000020100001001000063010000630100006301000063010000020100061308010c0e -0001062301000603020201030202060301000500000005150103051801000500000e0100 -0001010000020100000201000001010000080100000201000002010000330100000e0101 -000101000004010000020100000201000001010000020100000101000001010000020100 -000201000001010100010100000101000002010000010100000501000001010100100100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -0103020206030100000005340100000e0100000201000002010300010100000801000002 -01000002010000330100000e010000000101000501000003010300020102000201000002 -010000020102000201000000010100030102000201000006010100000100001001000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100050000000532010005000063010000510100001001000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -00000534010000630100004d010000020100001001000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100050000000532 -0100050000630100004e0102001101000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000005340100006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000500000005320100050000630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010000630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001000500010005000100050001000500 -010005000100050001000500010005000100050001ff01ff0161061308010c0e00010623 -01000603020201030202060301000d360063010000630100006301000063010000630100 -0063010000020100061308010c0e0001062301000603020201030202060301000d350100 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000d01013400630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -0d0101340063010000630100006301000063010000630100006301000002010006130801 -0c0e0001062301000603020201030202060301000d010117000201190063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -01030202060301000d0101160000011c000e0100000e010000140100002d010000320102 -002d01000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000d0101150000011d000e0100000e01000043010000340100 -002d01000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000d0101150000011d000e0100000101000003010200020104 -00020102000201000000010100030102000201000000010100030102001f0100000e0100 -000201000001010000000101000201000000010100030102000301020005010000030102 -002601000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000d0101150003011a000e0100000001000003010000020100 -000301000003010000020100000101010001010000040100000201010001010000010100 -00020100001e0100000e0100000201000001010100010100000101010001010000010100 -000201000001010000020100000401000002010000020100002501000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -0d0101150000010200000119000e01010008010000030100000701000001010000080100 -000201000002010000050100001e0100000e010000020100000101000002010000010100 -000201000001010000090100000401000006010000250100006301000063010000630100 -0063010000020100061308010c0e0001062301000603020201030202060301000d010115 -0000010200000119000e0101000501030003010000040103000101000008010000020100 -0002010000020103001e0100000e01000002010000010100000201000001010000020100 -000201020003010300040100000301030025010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000d01011500000102 -00000119000e010000000100000301000002010000030100000301000002010000010100 -0008010000020100000201000001010000020100001e0100000e01000002010000010100 -000201000001010000020100000501000001010000020100000401000002010000020100 -002501000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000d0101160002011a000e0100000101000002010000020100 -000301000003010000020100000101000008010000020100000201000001010000020100 -001e0100000e010000010101000101010001010000010101000101000001010000020100 -000101000002010000040100000201000002010000250100006301000063010000630100 -0063010000020100061308010c0e0001062301000603020201030202060301000d010134 -000e01000002010000020103000401010002010300010100000801000002010000020100 -00020103001e0100000f0101000001000001010000000101000201000000010100030102 -000301030004010000030103002501000063010000630100006301000063010000020100 -061308010c0e0001062301000603020201030202060301000d0101340063010000150100 -00050100004501000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000d01013400630100001501000005010000450100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -01030202060301000d010134006301000015010000050100004501000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -0d0101340063010000630100006301000063010000630100006301000002010006130801 -0c0e0001062301000603020201030202060301000d010134006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000d01013400630100006301000063010000630100006301000063010000020100 -061308010c0e0001062301000603020201030202060301000d0001ff01ff019706130801 -0c0e000106230100060302020103020206030100009a0100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -003508000063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061501040617 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106150100060201000617080100260100 -003b01000019010000170102002d01000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106180100061808010063 -01000019010000190100002d010000630100006301000063010000630100000201000613 -08010c0e00010623010006030202010302020603010000010618010006180801000e0101 -00000100000301020002010000000101000301020003010200340100000f010200030101 -000001000002010200020100000001010002010000000101000501000003010200020100 -00000101001f01000063010000630100006301000063010000020100061308010c0e0001 -0623010006030202010302020603010000010618010006180801000e0100000001000000 -01000001010000020100000101010001010000040100000201000002010000330100000e -010000020100000101000001010100010100000201000001010100010100000101010001 -01000004010000020100000201000001010100010100001e010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -0618010006180801000e0100000001000000010000050100000101000008010000060100 -00330100000e010000020100000101000002010000010100000201000001010000020100 -000101000002010000040100000601000001010000020100001e01000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -00010617010006190801000e010000000100000001000002010300010100000801000003 -010300330100000e01000002010000010100000201000001010400010100000201000001 -01000002010000040100000301030001010000020100001e010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -0617010006190801000e0100000001000000010000010100000201000001010000080100 -000201000002010000330100000e01000002010000010100000201000001010000050100 -0002010000010100000201000004010000020100000201000001010000020100001e0100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010617010006190801000e01000000010000000100000101000002 -01000001010000080100000201000002010000330100000e010000020100000101000001 -010100010100000201000001010000020100000101010001010000040100000201000002 -01000001010000020100001e010000630100006301000063010000630100000201000613 -08010c0e000106230100060302020103020206030100000106320801000e010000000100 -000001000002010300010100000801000003010300330100000f01020003010100000100 -000201020002010000020100000101000000010100050100000301030001010000020100 -001e01000063010000630100006301000063010000020100061308010c0e000106230100 -06030202010302020603010000010632080100630100002a010000370100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100002a01000037010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001063208010063 -0100002a0100003701000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010834006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202 -010302020603010005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050000000500000005000000 -050000000500000005000000050000000500000005000000050001000063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010005000000053201000500006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000000 -053401000063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010005000000051601020518010005000063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -01000603020201030202060301000000051601000502010005180100001e010000430100 -000e01000006010200100100000c01000029010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000500000005150100 -05020100051701000500001e010000430100000e01000008010000100100000c01000029 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000000051601000502010005180100000e01010000010000030102 -0002010400020102003b0100000e01000000010100050100000301020003010200020100 -000101000003010200020100000001010003010200020100000001010003010100000100 -001001000063010000630100006301000063010000020100061308010c0e000106230100 -0603020201030202060301000500000005160102051801000500000e0100000001000000 -01000001010000020100000301000003010000020100003a0100000e0101000101000004 -010000020100000201000001010000020100000101000000010000030100000201000001 -010100010100000101000002010000010101000101000001010000010101001001000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -0202060301000000051601000502010005180100000e0100000001000000010000050100 -0003010000030100003e0100000e01000002010000040100000601000001010000050101 -000401000002010000010100000201000001010000020100000101000005010000020100 -001001000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100050000000515010005020100051701000500000e01000000 -010000000100000201030003010000040102003b0100000e010000020100000401000003 -010300010100000501010004010400010100000201000001010400010100000501000002 -0100001001000063010000630100006301000063010000020100061308010c0e00010623 -01000603020201030202060301000000051601000502010005180100000e010000000100 -0000010000010100000201000003010000070100003a0100000e01000002010000040100 -000201000002010000010100000501000000010000030100000501000002010000010100 -000501000005010000020100001001000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100050000000516010205180100 -0500000e010000000100000001000001010000020100000301000003010000020100003a -0100000e0101000101000004010000020100000201000001010000020100000101000001 -010000020100000201000001010100010100000101000002010000010100000501000001 -0101001001000063010000630100006301000063010000020100061308010c0e00010623 -0100060302020103020206030100000005340100000e0100000001000000010000020103 -0004010100020102003b0100000e01000000010100050100000301030002010200020100 -000201000002010200020100000001010003010200020100000601010000010000100100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010005000000053201000500006301000051010000100100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000000534010000630100004d01000002010000100100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010005000000 -05320100050000630100004e010200110100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000000534010000630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100050000000532010005000063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -050001000500010005000100050001000500010005000100050001000500010005000100 -0500010005000100050001000500010005000100050001ff01ff0161061308010c0e0001 -06230100060302020103020206030100009a010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000350800 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106160102061808010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010615010006020100061708010016010200030102 -00420100000e010000230100000b01020003010200180100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010615 -01000602010006170801001801000005010000420100000e010000230100000d01000005 -0100001801000063010000630100006301000063010000020100061308010c0e00010623 -01000603020201030202060301000001061501000602010006170801000f010200050100 -0005010000030102003b0100000e01000000010100030102000201000000010100020100 -000001010003010200020104000101000002010000040100000501000018010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001061501000602010006170801000e01000002010000040100000501000002 -010000020100003a0100000e010100010100000101000002010000010101000101000001 -010100010100000101000002010000030100000301000002010000040100000501000018 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -0202010302020603010000010616010306170801000e0100000201000004010000050100 -0002010000020100003a0100000e01000002010000010100000201000001010000050100 -000201000001010000070100000301000002010000040100000501000018010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -0603010000010619010006170801000e010000020100000401000005010000020104003a -0100000e0100000201000001010000020100000101000005010000020100000201020004 -010000030100000201000004010000050100001801000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106180100 -06180801000e010000020100000401000005010000020100003e0100000e010000020100 -000101000002010000010100000501000002010000050100000301000003010000020100 -000401000005010000180100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010615010206190801000e01000002 -010000040100000501000002010000020100003a0100000e010000020100000101000002 -010000010100000501000002010000010100000201000003010000030100000101010004 -010000050100001801000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801000f01020005010000050100 -00030102003b0100000e0100000201000002010200020100000501000002010000020102 -000501010002010100000100000401000005010000180100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -083400630100006301000063010000630100006301000063010000020100061308010c0e -0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001 -062301000603020201030202060301000900000009000000090000000900000009000000 -090000000900000009000000090000000900000009000000090000000900000009000000 -090000000900000009000000090000000900000009000000090000000900000009000000 -090000000900000009000000090000000900006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000000 -090000000900000009000000090000000900000009000000090000000900000009000000 -090000000900000009000000090000000900000009000000090000000900000009000000 -090000000900000009000000090000000900000009000000090000000900000009000100 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000900000009320100090000630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000009340100006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000900000009130100 -090401020915010009000063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000000912010209030100 -090201000915010000630100001701000020010200260100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010009000000 -091301000903010009020100091401000900006301000017010000220100002601000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000009140100090301000902010009150100000e01000000010100030102 -000201000000010100420100000f01020002010400010100000201000001010000000101 -000301020002010000000101000501000003010200020100000001010018010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -0603010009000000091301000903010009020100091401000900000e0101000101000001 -010000020100000101010001010000410100000e01000002010000030100000301000002 -010000010101000101000001010000020100000101010001010000040100000201000002 -010000010101000101000017010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000000091401000903010009020100 -09150100000e01000002010000010100000201000001010000450100000e010000070100 -000301000002010000010100000501000002010000010100000201000004010000060100 -000101000002010000170100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010009000000091301000903010009020100 -091401000900000e010000020100000101040001010000450100000f0102000401000003 -010000020100000101000005010400010100000201000004010000030103000101000002 -0100001701000063010000630100006301000063010000020100061308010c0e00010623 -0100060302020103020206030100000009140100090301000902010009150100000e0100 -000201000001010000050100004501000012010000030100000301000002010000010100 -000501000005010000020100000401000002010000020100000101000002010000170100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -0103020206030100090000000911010409020102091501000900000e0101000101000001 -0100000201000001010000450100000e0100000201000003010000030100000101010001 -010000050100000201000001010100010100000401000002010000020100000101000002 -0100001701000063010000630100006301000063010000020100061308010c0e00010623 -0100060302020103020206030100000009340100000e0100000001010003010200020100 -00450100000f010200050101000201010000010000010100000601020002010000000101 -000501000003010300010100000201000017010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000900000009320100 -0900000e0100005301000031010000300100006301000063010000630100006301000002 -0100061308010c0e000106230100060302020103020206030100000009340100000e0100 -005301000031010000300100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010009000000093201000900000e01000053 -010000310100003001000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000009340100006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000900000009320100090000630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000009000100 -090001000900010009000100090001000900010009000100090001000900010009000100 -090001000900010009000100090001000900010009000100090001000900010009000100 -090001000900010009000100090001000900010009000100090001000900010000630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100090001000900010009000100090001000900010009000100 -090001000900010009000100090001000900010009000100090001000900010009000100 -090001000900010009000100090001000900010009000100090001000900010009000100 -090001000900010009000100090001ff01ff0161061308010c0e00010623010006030202 -0103020206030100009a0100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100003508000063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061301000605010006160801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001061101020603010206160801001701000006010000420100 -00150100001c0100000b0102000301020018010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061301000605 -01000616080100170100004a010000150100001c0100000d010000050100001801000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -0202060301000001061301000605010006160801000f0102000201040002010200020100 -000001010003010200340100000f01020002010000010100000301020002010000000101 -000301020002010400010100000201000004010000050100001801000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -0001061301000605010006160801000e0100000201000003010000060100000201010001 -0100000101000002010000330100000e0100000201000001010000000100000301000002 -010000010101000101000001010000020100000301000003010000020100000401000005 -0100001801000063010000630100006301000063010000020100061308010c0e00010623 -01000603020201030202060301000001061301000605010006160801000e010000070100 -0006010000020100000201000005010000330100000e0100000501010008010000010100 -000201000001010000070100000301000002010000040100000501000018010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001061301000605010006160801000f01020004010000060100000201000002 -01000002010300330100000f010200020101000501030001010000020100000201020004 -010000030100000201000004010000050100001801000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106130100 -060501000616080100120100000301000006010000020100000201000001010000020100 -003301000012010000010100000001000003010000020100000101000002010000050100 -000301000003010000020100000401000005010000180100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010611 -01040601010406140801000e010000020100000301000006010000020100000201000001 -01000002010000330100000e010000020100000101000001010000020100000201000001 -010000020100000101000002010000030100000301000001010100040100000501000018 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -02020103020206030100000106320801000f010200050101000401000002010000020100 -0002010300330100000f0102000201000002010000020103000101000002010000020102 -000501010002010100000100000401000005010000180100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -083400630100006301000063010000630100006301000063010000020100061308010c0e -0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001 -06230100060302020103020206030100009a010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000350800 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106130100060401020615 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106110102060301000602010006140801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061301000603010006020100061408010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010613010006030100060201000614080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106130100060601000615080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106130100060501000616080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106130100060401000617080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106130100 -060301000602010006140801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061101040601 -010406140801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001063208010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001083400630100006301000063010000630100006301000063 -010000020100061308010c0e0001062301000603020201030202060301000000083501ff -01ff0161061308010c0e000106230100060302020103020206030100009a010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000350800006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010632080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106130100060401020615080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106110102 -060301000602010006140801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061301000607 -010006140801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001061301000607010006140801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061301000605010106150801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001061301000607010006140801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001061301000607010006140801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -061301000603010006020100061408010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010611 -010406020102061508010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -063208010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010632080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106320801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001063208010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010834006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000000 -083501ff01ff0161061308010c0e000106230100060302020103020206030100009a0100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100003508000063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001061301000606010006150801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -061101020605010106150801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061301000604 -010006000100061508010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010613010006040100 -060001000615080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106130100060301000601 -010006150801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001061301000602010006020100 -061508010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010613010006020105061408010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010613010006060100061508010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010611010406030102061408010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001063208010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010834006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202 -0103020206030100009a0100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100003508000063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061301000603010406140801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001061101020603010006180801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001061301000603010006180801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -061301000603010006180801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061301000603 -010306150801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001061301000607010006140801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061301000607010006140801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001061301000602010006030100061408010063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010611010406010103061508010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001063208010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010834006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000000083501ff01ff0161061308010c0e00010623010006030202 -0103020206030100009a0100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100003508000063010000630100 -0063010000630100006301000063010000020100061308010c0e00010623010006030202 -010302020603010000010632080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061301000605010206140801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001061101020604010006170801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001061301000603010006180801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -061301000603010006180801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061301000603 -010306150801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001061301000603010006020100 -061408010063010000630100006301000063010000630100006301000002010006130801 -0c0e00010623010006030202010302020603010000010613010006030100060201000614 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106130100060301000602010006140801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061101040602010206150801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001063208010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -083400630100006301000063010000630100006301000063010000020100061308010c0e -0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001 -06230100060302020103020206030100009a010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000350800 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106130100060301040614 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106110102060301000602010006140801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061301000606010006150801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001061301000606010006150801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001061301000606010006150801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -061301000606010006150801006301000063010000630100006301000063010000630100 -00020100061308010c0e0001062301000603020201030202060301000001061301000605 -010006160801006301000063010000630100006301000063010000630100000201000613 -08010c0e0001062301000603020201030202060301000001061301000605010006160801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061101040603010006160801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001063208010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106320801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001063208010063010000630100006301000063010000630100006301000002 -0100061308010c0e00010623010006030202010302020603010000010632080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106320801006301000063010000630100006301000063 -01000063010000020100061308010c0e0001062301000603020201030202060301000001 -083400630100006301000063010000630100006301000063010000020100061308010c0e -0001062301000603020201030202060301000000083501ff01ff0161061308010c0e0001 -06230100060302020103020206030100009a010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000350800 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106130100060401020615 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000106110102060301000602010006140801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001061301000603010006020100061408010063 -0100006301000063010000630100006301000063010000020100061308010c0e00010623 -010006030202010302020603010000010613010006030100060201000614080100630100 -006301000063010000630100006301000063010000020100061308010c0e000106230100 -060302020103020206030100000106130100060401020615080100630100006301000063 -010000630100006301000063010000020100061308010c0e000106230100060302020103 -020206030100000106130100060301000602010006140801006301000063010000630100 -00630100006301000063010000020100061308010c0e0001062301000603020201030202 -060301000001061301000603010006020100061408010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010613010006030100060201000614080100630100006301000063010000630100 -006301000063010000020100061308010c0e000106230100060302020103020206030100 -000106110104060201020615080100630100006301000063010000630100006301000063 -010000020100061308010c0e000106230100060302020103020206030100000106320801 -00630100006301000063010000630100006301000063010000020100061308010c0e0001 -062301000603020201030202060301000001063208010063010000630100006301000063 -0100006301000063010000020100061308010c0e00010623010006030202010302020603 -010000010632080100630100006301000063010000630100006301000063010000020100 -061308010c0e000106230100060302020103020206030100000106320801006301000063 -01000063010000630100006301000063010000020100061308010c0e0001062301000603 -020201030202060301000001063208010063010000630100006301000063010000630100 -0063010000020100061308010c0e00010623010006030202010302020603010000010632 -080100630100006301000063010000630100006301000063010000020100061308010c0e -000106230100060302020103020206030100000108340063010000630100006301000063 -0100006301000063010000020100061308010010062301000603020201030202060301ff -01ff01990613080000110623010006030202010302020603010006ff06ff06e301000603 -0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 -0202060301000649010006ff06ff069801000603020201030202060301000648010106ff -06ff06980100060302020103020206030100064701000600010006ff06ff069801000603 -020201030202060301000649010006ff06ff069801000603020201030202060301000649 -010006ff06ff069801000603020201030202060301000649010006ff06ff069801000603 -020201030202060301000649010006ff06ff069801000603020201030202060301000649 -010006ff06ff069801000603020201030202060301000647010406ff06ff069601000603 -0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -0100063708ff08ff0860064a0100060302020103020206030100063708ff08ff085f0000 -064a010006030202010302020603010006370801001d0cff0cff0c3e0001064a01000603 -0202010302020603010006370801001c08000cff0cff0c3e0001064a0100060302020103 -020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a01000603 -02020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a -0100060302020103020206030100063708010001060b08000000060b08010cff0cff0c3e -0001064a0100060302020103020206030100063708010001060b08000000060b08010cff -0cff0c3e0001064a0100060302020103020206030100063708010001060b08000000060b -08010cff0cff0c3e0001064a0100060302020103020206030100063708010001060b0800 -0000060b08010cff0cff0c3e0001064a0100060302020103020206030100063708010001 -060b08000000060b08010cff0cff0c3e0001064a01000603020201030202060301000637 -08010001060b08000000060b08010cff0cff0c3e0001064a010006030202010302020603 -0100063708010001060b08000000060b08010cff0cff0c3e0001064a0100060302020103 -020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a01000603 -02020103020206030100063708010001060b08000000060b08010cff0cff0c3e0001064a -0100060302020103020206030100063708010001080c0000080d0cff0cff0c3e0001064a -0100060302020103020206030100063708010000081c0cff0cff0c3e0001064a01000603 -020201030202060301000637080100ff00ff005e064a0100060302020103020206030100 -0637080000ff00ff005f064a010006030202010302020603010006ff06ff06e301000603 -0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 -02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 -0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 -02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 -0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010302020603 -010006ff06ff06e3010006030202010302020603010006ff06ff06e30100060302020103 -02020603010006ff06ff06e3010006030202010302020603010006ff06ff06e301000603 -0202010302020603010006ff06ff06e3010006030202010302020603010006ff06ff06e3 -010006030202010302020603010006ff06ff06e3010006030202010302020603010006ff -06ff06e3010006030202010302020603010006ff06ff06e3010006030202010100040603 -010006ff06ff06e301000603000502020400060301ff01ff01e506030000020204000000 -0202040006ff06ff06ed00000202040000000202040006ff06ff06ed0000020204000000 -0202040006ff06ff06ed00000202040000000202040006ff06ff06ed0000020204000000 -02020400000502ff02ff02e100060202040000000208040002ff02ff02e1000002080400 -00000208040002ff02ff02e100000208040000000208040001ff01ff01e1000002080400 -0000040901ff01ff01e100000409 -%%EndData -end -%%PageTrailer -%%Trailer -%%BoundingBox: 0 0 532 441 -%%EOF diff --git a/lib/tv/doc/src/warning.gif b/lib/tv/doc/src/warning.gif Binary files differdeleted file mode 100644 index 96af52360e..0000000000 --- a/lib/tv/doc/src/warning.gif +++ /dev/null diff --git a/lib/tv/ebin/.gitignore b/lib/tv/ebin/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/tv/ebin/.gitignore +++ /dev/null diff --git a/lib/tv/info b/lib/tv/info deleted file mode 100644 index 63e88b04b5..0000000000 --- a/lib/tv/info +++ /dev/null @@ -1,2 +0,0 @@ -group: tools -short: An ETS and MNESIA graphical table visualizer diff --git a/lib/tv/priv/Makefile b/lib/tv/priv/Makefile deleted file mode 100644 index 679a76fe88..0000000000 --- a/lib/tv/priv/Makefile +++ /dev/null @@ -1,72 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1997-2012. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -include ../vsn.mk -VSN = $(TV_VSN) - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/tv-$(VSN) - -# -# Macros -# -TOOLBAR_FILES = \ - arrow_left.xbm \ - arrow_right.xbm \ - edit1.xbm \ - erlang.gif \ - help.xbm \ - info.xbm \ - key.xbm \ - more.xbm \ - no_sort.xbm \ - open.xbm \ - poll.xbm \ - search.xbm \ - sort.xbm \ - sort_reverse.xbm \ - tv.gif \ - tv.tool - -# -# Rules -# - -debug opt: - -docs: - -clean: - - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_spec: opt - $(INSTALL_DIR) "$(RELSYSDIR)/priv" - $(INSTALL_DATA) $(TOOLBAR_FILES) "$(RELSYSDIR)/priv" - -release_docs_spec: - -FORCE: diff --git a/lib/tv/priv/arrow_left.xbm b/lib/tv/priv/arrow_left.xbm deleted file mode 100644 index 58db123a00..0000000000 --- a/lib/tv/priv/arrow_left.xbm +++ /dev/null @@ -1,5 +0,0 @@ -#define arrow_left_width 16 -#define arrow_left_height 8 -static unsigned char arrow_left_bits[] = { - 0x70, 0x00, 0x38, 0x00, 0x1c, 0x00, 0xfe, 0xff, 0xfe, 0xff, 0x1c, 0x00, - 0x38, 0x00, 0x70, 0x00}; diff --git a/lib/tv/priv/arrow_right.xbm b/lib/tv/priv/arrow_right.xbm deleted file mode 100644 index 7eca80303d..0000000000 --- a/lib/tv/priv/arrow_right.xbm +++ /dev/null @@ -1,5 +0,0 @@ -#define arrow_right_width 16 -#define arrow_right_height 8 -static unsigned char arrow_right_bits[] = { - 0x00, 0x1c, 0x00, 0x38, 0x00, 0x70, 0xfc, 0xff, 0xfc, 0xff, 0x00, 0x70, - 0x00, 0x38, 0x00, 0x1c}; diff --git a/lib/tv/priv/edit1.xbm b/lib/tv/priv/edit1.xbm deleted file mode 100644 index dc13f274c0..0000000000 --- a/lib/tv/priv/edit1.xbm +++ /dev/null @@ -1,12 +0,0 @@ -#define edit1_width 25 -#define edit1_height 25 -static unsigned char edit1_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, - 0x00, 0x01, 0x14, 0x00, 0x70, 0xf9, 0x27, 0x00, 0xf8, 0x01, 0x3c, 0x00, - 0xf8, 0xf9, 0x27, 0x00, 0xf0, 0x03, 0x20, 0x00, 0xe0, 0xff, 0x27, 0x00, - 0xc0, 0x07, 0x20, 0x00, 0x80, 0xff, 0x27, 0x00, 0x00, 0x1f, 0x20, 0x00, - 0x00, 0xfd, 0x27, 0x00, 0x00, 0x79, 0x20, 0x00, 0x00, 0xf9, 0x27, 0x00, - 0x00, 0x21, 0x21, 0x00, 0x00, 0xf9, 0x27, 0x00, 0x00, 0x01, 0x20, 0x00, - 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/erlang.gif b/lib/tv/priv/erlang.gif Binary files differdeleted file mode 100644 index 8d06e98065..0000000000 --- a/lib/tv/priv/erlang.gif +++ /dev/null diff --git a/lib/tv/priv/help.xbm b/lib/tv/priv/help.xbm deleted file mode 100644 index b2cbc541e4..0000000000 --- a/lib/tv/priv/help.xbm +++ /dev/null @@ -1,8 +0,0 @@ -#define help_width 20 -#define help_height 20 -static unsigned char help_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xff, 0x00, 0x80, 0xe7, 0x01, - 0x80, 0xc3, 0x01, 0x80, 0xc3, 0x01, 0x00, 0xe3, 0x00, 0x00, 0x70, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/info.xbm b/lib/tv/priv/info.xbm deleted file mode 100644 index d5157661c2..0000000000 --- a/lib/tv/priv/info.xbm +++ /dev/null @@ -1,8 +0,0 @@ -#define info_width 20 -#define info_height 20 -static unsigned char info_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/key.xbm b/lib/tv/priv/key.xbm deleted file mode 100644 index 222be32219..0000000000 --- a/lib/tv/priv/key.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define key_width 10 -#define key_height 18 -static char key_bits[] = { - 0xfc,0x00,0xfe,0x01,0x87,0x03,0x03,0x03,0x87,0x03,0xfe,0x01,0xfc,0x00,0x30, - 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x3b,0x00,0x3b,0x00, - 0x3f,0x00,0x3f,0x00,0x37,0x00}; diff --git a/lib/tv/priv/more.xbm b/lib/tv/priv/more.xbm deleted file mode 100644 index 38ef738768..0000000000 --- a/lib/tv/priv/more.xbm +++ /dev/null @@ -1,8 +0,0 @@ -#define more_width 16 -#define more_height 26 -static unsigned char more_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, - 0xe0, 0x3f, 0xc0, 0x1f, 0x80, 0x0f, 0x00, 0x07, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/no_sort.xbm b/lib/tv/priv/no_sort.xbm deleted file mode 100644 index 90568dd828..0000000000 --- a/lib/tv/priv/no_sort.xbm +++ /dev/null @@ -1,8 +0,0 @@ -#define no_sort_width 20 -#define no_sort_height 20 -static unsigned char no_sort_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x20, 0x00, 0x02, 0x20, 0x00, 0x02, 0x20, 0x08, 0x02, 0x20, 0x08, 0x02, - 0x20, 0x48, 0x02, 0x20, 0x48, 0x02, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, - 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/open.xbm b/lib/tv/priv/open.xbm deleted file mode 100644 index fe77d2c38b..0000000000 --- a/lib/tv/priv/open.xbm +++ /dev/null @@ -1,8 +0,0 @@ -#define open_width 20 -#define open_height 20 -static unsigned char open_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x05, - 0xe0, 0x00, 0x06, 0xf0, 0x1f, 0x07, 0xf0, 0x3f, 0x00, 0xf0, 0x3f, 0x00, - 0xf0, 0x3f, 0x00, 0xf0, 0xff, 0x03, 0xf0, 0x00, 0x01, 0x70, 0x80, 0x00, - 0x30, 0x40, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/poll.xbm b/lib/tv/priv/poll.xbm deleted file mode 100644 index 6ec1dbeaf2..0000000000 --- a/lib/tv/priv/poll.xbm +++ /dev/null @@ -1,8 +0,0 @@ -#define poll2_width 20 -#define poll2_height 20 -static unsigned char poll2_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0xff, 0x00, - 0xe0, 0xf1, 0x00, 0xf0, 0xe0, 0x01, 0x70, 0xf8, 0x07, 0x70, 0xf0, 0x03, - 0x70, 0xe0, 0x01, 0xf0, 0xc0, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x7f, 0x00, - 0xc0, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/search.xbm b/lib/tv/priv/search.xbm deleted file mode 100644 index 3498e66b0d..0000000000 --- a/lib/tv/priv/search.xbm +++ /dev/null @@ -1,8 +0,0 @@ -#define search2_width 20 -#define search2_height 20 -static unsigned char search2_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0xe1, 0x00, 0xc0, 0xe1, 0x00, 0xe0, 0xf3, 0x01, 0x20, 0x93, 0x01, - 0xf0, 0xff, 0x03, 0xe8, 0xdd, 0x07, 0xe8, 0xdd, 0x07, 0xe8, 0xdd, 0x07, - 0xe8, 0xdd, 0x07, 0xe8, 0xdf, 0x07, 0xe8, 0xd3, 0x07, 0xf8, 0xf3, 0x07, - 0xe8, 0x40, 0x07, 0xe8, 0x40, 0x07, 0xf8, 0xc0, 0x07, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/sort.xbm b/lib/tv/priv/sort.xbm deleted file mode 100644 index 576564b817..0000000000 --- a/lib/tv/priv/sort.xbm +++ /dev/null @@ -1,8 +0,0 @@ -#define sort_width 20 -#define sort_height 20 -static unsigned char sort_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, - 0x00, 0x40, 0x02, 0x00, 0x40, 0x02, 0x00, 0x48, 0x02, 0x00, 0x48, 0x02, - 0x00, 0x49, 0x02, 0x00, 0x49, 0x02, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, - 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/sort_reverse.xbm b/lib/tv/priv/sort_reverse.xbm deleted file mode 100644 index b58e6308f5..0000000000 --- a/lib/tv/priv/sort_reverse.xbm +++ /dev/null @@ -1,8 +0,0 @@ -#define sort_reverse_width 20 -#define sort_reverse_height 20 -static unsigned char sort_reverse_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, - 0x20, 0x01, 0x00, 0x20, 0x01, 0x00, 0x20, 0x09, 0x00, 0x20, 0x09, 0x00, - 0x20, 0x49, 0x00, 0x20, 0x49, 0x00, 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, - 0x20, 0x49, 0x02, 0x20, 0x49, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/lib/tv/priv/tv.gif b/lib/tv/priv/tv.gif Binary files differdeleted file mode 100644 index 44daac2912..0000000000 --- a/lib/tv/priv/tv.gif +++ /dev/null diff --git a/lib/tv/priv/tv.tool b/lib/tv/priv/tv.tool deleted file mode 100644 index 770424d283..0000000000 --- a/lib/tv/priv/tv.tool +++ /dev/null @@ -1,23 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -{version,"0.1"}. -{{tool,"Table Visualizer"}, - {start,{tv,start,[]}}, - {icon,"tv.gif"}, - {message,"The Table Visualizer"}, - {html,"../doc/html/index.html"}}. diff --git a/lib/tv/src/Makefile b/lib/tv/src/Makefile deleted file mode 100644 index 3d680c1eaf..0000000000 --- a/lib/tv/src/Makefile +++ /dev/null @@ -1,135 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1997-2012. All Rights Reserved. -# -# The contents of this file are subject to the Erlang Public License, -# Version 1.1, (the "License"); you may not use this file except in -# compliance with the License. You should have received a copy of the -# Erlang Public License along with this software. If not, it can be -# retrieved online at http://www.erlang.org/. -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -# the License for the specific language governing rights and limitations -# under the License. -# -# %CopyrightEnd% -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Application version -# ---------------------------------------------------- -include ../vsn.mk -VSN=$(TV_VSN) - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/tv-$(VSN) - -# ---------------------------------------------------- -# Common Macros -# ---------------------------------------------------- - -MODULES= \ - tv \ - tv_comm_func \ - tv_db \ - tv_db_search \ - tv_db_sort \ - tv_ets_rpc \ - tv_etsread \ - tv_info \ - tv_io_lib \ - tv_io_lib_format \ - tv_io_lib_pretty \ - tv_ip \ - tv_main \ - tv_mnesia_rpc \ - tv_new_table \ - tv_nodewin \ - tv_pb \ - tv_pb_funcs \ - tv_pc \ - tv_pc_graph_ctrl \ - tv_pc_menu_handling \ - tv_pd \ - tv_pd_display \ - tv_pd_frames \ - tv_pd_scale \ - tv_pg \ - tv_pg_gridfcns \ - tv_poll_dialog \ - tv_pw \ - tv_pw_window \ - tv_rec_edit \ - tv_table_owner \ - tv_utils - - - -HRL_FILES= \ - tv_db_int_def.hrl \ - tv_int_def.hrl \ - tv_int_msg.hrl \ - tv_main.hrl \ - tv_pb_int_def.hrl \ - tv_pc_int_def.hrl \ - tv_pd_int_def.hrl \ - tv_pd_int_msg.hrl \ - tv_pg_int_def.hrl \ - tv_pw_int_def.hrl - -ERL_FILES= $(MODULES:%=%.erl) - -TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET) - -APP_FILE = tv.app -APP_SRC = $(APP_FILE).src -APP_TARGET = $(EBIN)/$(APP_FILE) - -APPUP_FILE = tv.appup -APPUP_SRC = $(APPUP_FILE).src -APPUP_TARGET = $(EBIN)/$(APPUP_FILE) -# ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- -ERL_COMPILE_FLAGS += +warn_obsolete_guard - -# ---------------------------------------------------- -# Targets -# ---------------------------------------------------- - -debug opt: $(TARGET_FILES) - -clean: - rm -f $(TARGET_FILES) - rm -f errs core *~ - -$(APP_TARGET): $(APP_SRC) ../vsn.mk - $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ - -$(APPUP_TARGET): $(APPUP_SRC) ../vsn.mk - $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ - -docs: - -# ---------------------------------------------------- -# Special Targets -# ---------------------------------------------------- - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_spec: opt - $(INSTALL_DIR) "$(RELSYSDIR)/src" - $(INSTALL_DATA) $(HRL_FILES) $(ERL_FILES) "$(RELSYSDIR)/src" - $(INSTALL_DIR) "$(RELSYSDIR)/ebin" - $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin" - -release_docs_spec: - diff --git a/lib/tv/src/tv.app.src b/lib/tv/src/tv.app.src deleted file mode 100644 index e76c587868..0000000000 --- a/lib/tv/src/tv.app.src +++ /dev/null @@ -1,56 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -{application, tv, - [{description, "tv Table Visualizer"}, - {vsn, "%VSN%"}, - {modules, [tv, - tv_comm_func, - tv_db, - tv_db_search, - tv_db_sort, - tv_ets_rpc, - tv_etsread, - tv_info, - tv_io_lib, - tv_io_lib_format, - tv_io_lib_pretty, - tv_ip, - tv_main, - tv_mnesia_rpc, - tv_new_table, - tv_nodewin, - tv_pb, - tv_pb_funcs, - tv_pc, - tv_pc_graph_ctrl, - tv_pc_menu_handling, - tv_pd, - tv_pd_display, - tv_pd_frames, - tv_pd_scale, - tv_pg, - tv_pg_gridfcns, - tv_poll_dialog, - tv_pw, - tv_pw_window, - tv_rec_edit, - tv_table_owner, - tv_utils - ]}, - {registered,[tv_table_owner]}, - {applications, [kernel, stdlib, gs]}]}. diff --git a/lib/tv/src/tv.appup.src b/lib/tv/src/tv.appup.src deleted file mode 100644 index 0d918b6081..0000000000 --- a/lib/tv/src/tv.appup.src +++ /dev/null @@ -1,18 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2001-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -{"%VSN%",[],[]}. diff --git a/lib/tv/src/tv.erl b/lib/tv/src/tv.erl deleted file mode 100644 index 70bc945c63..0000000000 --- a/lib/tv/src/tv.erl +++ /dev/null @@ -1,38 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv). - --export([start/0, - start_browser/6]). - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - -start() -> - tv_main:start(). - - -start_browser(Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode) -> - spawn_link(tv_pc, pc, [self(), Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode]). - - - - - diff --git a/lib/tv/src/tv_comm_func.erl b/lib/tv/src/tv_comm_func.erl deleted file mode 100644 index d57960e303..0000000000 --- a/lib/tv/src/tv_comm_func.erl +++ /dev/null @@ -1,77 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_comm_func). - - - - --export([max/2, - min/2 - ]). - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -max(X, Y) when X > Y -> - X; -max(_X, Y) -> - Y. - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -min(X, Y) when X < Y -> - X; -min(_X, Y) -> - Y. - - - diff --git a/lib/tv/src/tv_db.erl b/lib/tv/src/tv_db.erl deleted file mode 100644 index 75537418b3..0000000000 --- a/lib/tv/src/tv_db.erl +++ /dev/null @@ -1,1271 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Module handling the internal database in the table tool. -%%% -%%%********************************************************************* - --module(tv_db). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([dbs/2]). - - - --include("tv_int_def.hrl"). --include("tv_int_msg.hrl"). --include("tv_db_int_def.hrl"). - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -dbs(Master, ErrMsgMode) -> - process_flag(trap_exit, true), - put(error_msg_mode, ErrMsgMode), - ProcVars = #process_variables{master_pid = Master}, - blocked(ProcVars). - - - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - -blocked(ProcVars) -> - receive - Msg -> - case Msg of - - #dbs_deblock{} -> - deblock(Msg, ProcVars, false); - - {error_msg_mode, Mode} -> - put(error_msg_mode, Mode), - blocked(ProcVars); - - {'EXIT', Pid, Reason} -> - MasterPid = ProcVars#process_variables.master_pid, - exit_signals({Pid, Reason}, MasterPid), - blocked(ProcVars); - - _Other -> - blocked(ProcVars) - end - end. - - - - - - - -deblock(Msg, ProcVars, SearchWinCreated) -> - #dbs_deblock{sender = Sender, - etsread_pid = EtsreadPid, - type = Type, - keypos = KeyPos, - sublist_length = SublistLength} = Msg, - - NewDbData = #db_data{subset_size = SublistLength, - subset_pos = 1, - key_no = KeyPos, - ets_type = Type - }, - NewProcVars = ProcVars#process_variables{db_data = NewDbData, - etsread_pid = EtsreadPid}, - Sender ! #dbs_deblock_cfm{sender = self()}, - deblocked_loop(NewProcVars, SearchWinCreated, [], undefined). - - - - - - - - -deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp) -> - receive - Msg -> - case Msg of - - {gs,entry,keypress,_Data,['Return' | _T]} -> - NewSearchData = search_object(ProcVars, RegExp), - deblocked_loop(ProcVars, SearchWinCreated, NewSearchData, RegExp); - - {gs,entry,keypress,_Data,['Tab' | _T]} -> - gs:config(entry, [{select, {0,1000}}]), - deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp); - - {gs,entry,keypress,_Data,_Args} -> - deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp); - - {gs,expr_term,click,_Data,_Args} -> - deblocked_loop(ProcVars, SearchWinCreated, SearchData, false); - - {gs,expr_regexp,click,_Data,_Args} -> - deblocked_loop(ProcVars, SearchWinCreated, SearchData, true); - - {gs,search,click,_Data,_Args} -> - NewSearchData = search_object(ProcVars, RegExp), - deblocked_loop(ProcVars, SearchWinCreated, NewSearchData, RegExp); - - {gs,cancel,click,cancel,_Args} -> - tv_db_search:destroy_window(SearchWinCreated), - deblocked_loop(ProcVars, false, [], RegExp); - - {gs,listbox,click,_LbData,[Idx | _T]} when SearchData =/= [] -> - tv_db_search:mark_busy(SearchWinCreated), - {Row,_Obj} = lists:nth(Idx+1, SearchData), - DbData = ProcVars#process_variables.db_data, - %% Never allow 'subset_pos' to have zero as value! - %% No list can begin with the 0:th element!!! - %% Has to be at least 1! - NewDbData = DbData#db_data{subset_pos=?COMM_FUNC_FILE:max(1, - Row), - subset_size=?ITEMS_TO_DISPLAY}, - NewProcVars = ProcVars#process_variables{db_data=NewDbData}, - send_subset(NewProcVars, undefined, undefined), - tv_db_search:mark_nonbusy(SearchWinCreated), - deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); - - {gs,win,configure,_Data,_Args} -> - tv_db_search:resize_window(SearchWinCreated), - deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp); - - {gs,win,destroy,_Data,_Args} -> - deblocked_loop(ProcVars, false, [], RegExp); - - - #dbs_new_data{data = NewData, keys = ListOfKeys, - time_to_read_table = ElapsedTimeEtsread} -> - tv_db_search:reset_window(SearchWinCreated), - T1 = time(), - NewProcVars = update_db(NewData, ListOfKeys, ProcVars), - T2 = time(), - ElapsedTimeDbs = compute_elapsed_seconds(T1, T2), - send_subset(NewProcVars, ElapsedTimeEtsread, ElapsedTimeDbs), - deblocked_loop(NewProcVars, SearchWinCreated, [], RegExp); - - #dbs_subset_req{subset_pos = Pos,subset_length = Length} -> - DbData = ProcVars#process_variables.db_data, - %% Never allow 'subset_pos' to have zero as value! - %% No list can begin with the 0:th element!!! - %% Has to be at least 1! - NewDbData = DbData#db_data{subset_pos=?COMM_FUNC_FILE:max(1, - Pos), - subset_size=Length}, - NewProcVars = ProcVars#process_variables{db_data = NewDbData}, - send_subset(NewProcVars, undefined, undefined), - deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); - - #dbs_marked_row{row_no = RowNo} -> - DbData = ProcVars#process_variables.db_data, - NewDbData = DbData#db_data{requested_row = RowNo}, - NewProcVars = ProcVars#process_variables{db_data = NewDbData}, - deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); - - #dbs_search_req{} -> - tv_db_search:create_window(SearchWinCreated), - deblocked_loop(ProcVars, true, SearchData, false); - - #dbs_sorting_mode{} -> - {NewProcVars, NewSearchData} = - update_sorting_mode(Msg, ProcVars, - SearchWinCreated, SearchData, RegExp), - deblocked_loop(NewProcVars, SearchWinCreated, NewSearchData, RegExp); - - #dbs_deblock{} -> - tv_db_search:reset_window(SearchWinCreated), - deblock(Msg, ProcVars, SearchWinCreated); - - #dbs_updated_object{object=Obj,old_object=OldObj,old_color=Color,obj_no=ObjNo} -> - {Success, NewProcVars} = update_object(Obj, OldObj, Color, ObjNo, ProcVars), - case Success of - true -> - tv_db_search:reset_window(SearchWinCreated), - send_subset(NewProcVars, undefined, undefined); - false -> - done - end, - deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); - - #dbs_new_object{object=Obj} -> - {Success, NewProcVars} = new_object(Obj, ProcVars), - case Success of - true -> - tv_db_search:reset_window(SearchWinCreated), - send_subset(NewProcVars, undefined, undefined); - false -> - done - end, - deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); - - #dbs_delete_object{object=Obj, color=Color, obj_no=ObjNo} -> - {Success, NewProcVars} = delete_object(Obj, Color, ObjNo, ProcVars), - case Success of - true -> - tv_db_search:reset_window(SearchWinCreated), - send_subset(NewProcVars, undefined, undefined); - false -> - done - end, - deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); - - #pc_list_info{lists_as_strings=ListAsStr} -> - NewProcVars = ProcVars#process_variables{lists_as_strings=ListAsStr}, - deblocked_loop(NewProcVars, SearchWinCreated, SearchData, RegExp); - - {error_msg_mode, Mode} -> - put(error_msg_mode, Mode), - deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp); - - {'EXIT', Pid, Reason} -> - MasterPid = ProcVars#process_variables.master_pid, - exit_signals({Pid, Reason}, MasterPid), - deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp); - - _Other -> - %% io:format("Received message: ~w ~n", [_Other]), - deblocked_loop(ProcVars, SearchWinCreated, SearchData, RegExp) - end - end. - - - - - - - -search_object(ProcVars, RegExp) -> - DbData = ProcVars#process_variables.db_data, - DbList = dblist2list(DbData#db_data.db), - ListAsStr = ProcVars#process_variables.lists_as_strings, - case catch tv_db_search:get_input_and_search(DbList, RegExp, ListAsStr) of - {'EXIT', _Reason} -> - tv_db_search:reset_window(true), - []; - List -> - List - end. - - - - - - -update_sorting_mode(Msg, ProcVars, SearchWinCreated, OldSearchData, RegExp) -> - #dbs_sorting_mode{sorting = Sorting, - reverse = Reverse, - sort_key_no = SortKeyNo} = Msg, - - DbData = ProcVars#process_variables.db_data, - - #db_data{db = DbList, - sorting = OldSorting, - rev_sorting = OldReverse, - sort_key_no = OldSortKeyNo} = DbData, - - - NewDbList = sort_db_list(DbList, Sorting, OldSorting, Reverse, OldReverse, - SortKeyNo, OldSortKeyNo), - - NewDbData = DbData#db_data{db = NewDbList, - sorting = Sorting, - rev_sorting = Reverse, - sort_key_no = SortKeyNo - }, - - NewProcVars = ProcVars#process_variables{db_data = NewDbData}, - send_subset(NewProcVars, undefined, undefined), - - SearchData = - case Sorting of - false -> - OldSearchData; - OldSorting when Reverse =:= OldReverse, - SortKeyNo =:= OldSortKeyNo -> - []; - OldSorting when Reverse =:= OldReverse, - OldSortKeyNo =:= undefined-> - []; - _Other -> - ListAsStr = ProcVars#process_variables.lists_as_strings, - case catch tv_db_search:update_search(SearchWinCreated, - NewDbList, RegExp, - ListAsStr) of - {'EXIT', _Reason} -> - tv_db_search:reset_window(true), - []; - List -> - List - end - end, - - {NewProcVars, SearchData}. - - - - - - - - -sort_db_list(DbList, Sort, Sort, Rev, Rev, KeyNo, KeyNo) -> - % Already sorted! - DbList; -sort_db_list(DbList, false, _OldSort, _Rev, _OldRev, _KeyNo, _OldKeyNo) -> - % No sorting, i.e., the old list order suffices! - DbList; -sort_db_list(DbList, _Sort, _OldSort, Rev, _OldRev, KeyNo, _OldKeyNo) -> - tv_db_sort:mergesort(KeyNo, DbList, Rev). - - - - - - - -send_subset(ProcVars, EtsreadTime, DbsTime) -> - #process_variables{master_pid = MasterPid, - db_data = DbData, - list_of_keys = ListOfKeys} = ProcVars, - - #db_data{subset_size = SubsetSize, - subset_pos = SubsetPos, - requested_row = RowNo, - db_size = DbSize, - db = DbList, - max_elem_size = MaxElemSize} = DbData, - - - RowData = get_requested_row_data(RowNo, DbList), - - if - DbSize > 0 -> - Pos = ?COMM_FUNC_FILE:min(SubsetPos, DbSize), - % Requested_data may be shorter than requested, but that's OK, - % pd handles that correctly! - Subset = lists:sublist(DbList, Pos, SubsetSize), - MasterPid ! #dbs_subset{sender = self(), - data = Subset, - subset_pos = Pos, - db_length = DbSize, - list_of_keys = ListOfKeys, - max_elem_size = MaxElemSize, - requested_row = RowData, - required_time_etsread = EtsreadTime, - required_time_dbs = DbsTime - }; - true -> - MasterPid ! #dbs_subset{sender = self(), - data = [], - subset_pos = 1, - db_length = 0, - list_of_keys = ListOfKeys, - max_elem_size = MaxElemSize, - requested_row = RowData, - required_time_etsread = EtsreadTime, - required_time_dbs = DbsTime - } - end. - - - - - -get_requested_row_data(undefined, _DbList) -> - []; -get_requested_row_data(_RowNo, []) -> - []; -get_requested_row_data(RowNo, DbList) -> - case catch lists:nth(RowNo, DbList) of - {'EXIT', _Reason} -> - []; - RowData -> - [RowData] - end. - - - - -exit_signals(ExitInfo, MasterPid) -> - case ExitInfo of - {MasterPid, _Reason} -> - % When from master, just quit! - exit(normal); - _Other -> - done - end. - - - - -update_db(NewList, ListOfKeys, ProcVars) -> - DbData = ProcVars#process_variables.db_data, - #db_data{db = OldDbList, - max_elem_size = MaxElemSize, - deleted = DelList, - ets_type = EtsType, - sorting = Sorting, - rev_sorting = RevSorting, - sort_key_no = SortKeyNo, - key_no = KeyNo} = DbData, - - DbList = update_colors(OldDbList -- DelList), - OldList = dblist2list(DbList), - InsOrUpd = (NewList -- OldList), - DelOrUpd = (OldList -- NewList), - - {Inserted, Deleted, Updated} = group_difflists(basetype(EtsType), KeyNo, - InsOrUpd, - DelOrUpd), - DelMarked = mark_deleted(KeyNo, Deleted, DbList), - Replaced = replace_elements(KeyNo, Updated, DelMarked), - NewDbList = add_elements(KeyNo, Inserted, Replaced, Sorting, RevSorting, - SortKeyNo), - - NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize, - ?COMM_FUNC_FILE:max(max_size(Replaced), - max_size(Inserted))), - - NewDbData = DbData#db_data{db = NewDbList, - db_size = length(NewDbList), - max_elem_size = NewMaxSize, - deleted = list2dblist(Deleted, ?BLACK) - }, - - ProcVars#process_variables{db_data = NewDbData, - list_of_keys = ListOfKeys - }. - - - - - - -update_object(Obj, OldObj, OldColor, ObjNo, ProcVars) -> - #process_variables{db_data = DbData, - etsread_pid = EtsreadPid} = ProcVars, - - #db_data{key_no = KeyNo} = DbData, - - %% Don't update if there are no changes! - case OldObj of - Obj when OldColor =/= ?BLACK -> %% Allow deleted objects to be inserted! - gs:window(dbwin, gs:start(), []), - case get(error_msg_mode) of - normal -> - tv_utils:notify(dbwin, "TV Notification", ["The object is unchanged!"]); - haiku -> - tv_utils:notify(dbwin, "TV Notification", - ["Stay the patient course,", - "Of little worth is your ire:", - "The object's unchanged." ]) - end, - gs:destroy(dbwin), - {false, ProcVars}; - _Other -> - %% Before we try to update the internal database, we have to check to see - %% whether the ETS/Mnesia update is allowed! - Result = - case OldColor of - ?BLACK -> - EtsreadPid ! #etsread_new_object{sender = self(), - object = Obj}, - receive - #etsread_new_object_cfm{success = Success} -> - Success - after - 60000 -> - exit(etsread_not_responding) - end; - _OtherColor -> - EtsreadPid ! #etsread_update_object{sender = self(), - key_no = KeyNo, - object = Obj, - old_object = OldObj}, - receive - #etsread_update_object_cfm{success = Success} -> - Success - after - 60000 -> - exit(etsread_not_responding) - end - end, - case Result of - false -> - gs:window(dbwin, gs:start(), [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(dbwin, "TV Notification", - ["Couldn't update table!"]); - haiku -> - tv_utils:notify(dbwin, "TV Notification", - ["Three things are certain:", - "Death, taxes, and lost updates.", - "Guess which has occurred."]) - end, - gs:destroy(dbwin), - {false, ProcVars}; - true -> - {true, update_object2(Obj, OldObj, OldColor, ObjNo, ProcVars)} - end - end. - - - - - -update_object2(Obj, OldObj, OldColor, ObjNo, ProcVars) -> - #process_variables{db_data = DbData} = ProcVars, - - #db_data{db = DbList, - ets_type = EtsType, %% 'bag', 'set', 'ordered_set' or - %% 'duplicate_bag' - max_elem_size = MaxElemSize, - sorting = Sorting, - rev_sorting = RevSorting, - sort_key_no = SortKeyNo, - key_no = KeyNo} = DbData, - - %% Replace the old element... - Key = element(KeyNo, Obj), - OldKey = element(KeyNo, OldObj), - %% If Key == OldKey, the old object shall only be replaced! - %% Otherwise the updated object shall be treated as a new - %% object when inserting it in the list! - %% In that latter case, we also have to check for duplicates! - - Fun = - case basetype(EtsType) of - set -> - case Key of - OldKey -> - fun({Data,Color}, {Replaced,AccDb}) when element(KeyNo,Data) =/= Key -> - {Replaced, [{Data,Color} | AccDb]}; - ({_Data,Color}, {Replaced,AccDb}) when not Replaced, - OldColor =:= ?BLACK, - Color =:= ?BLACK -> - {true, [{Obj,?RED1} | AccDb]}; - ({_Data,Color}, {Replaced,AccDb}) when not Replaced, - OldColor =/= ?BLACK, - Color =/= ?BLACK -> - {true, [{Obj,?GREEN1} | AccDb]}; - ({_Data,_Color}, {Replaced,AccDb}) -> - {Replaced, AccDb} - end; - _NewKey -> - fun({Data,Color}, {Replaced,AccDb}) -> - ElemKey = element(KeyNo,Data), - case ElemKey of - OldKey when not Replaced, - OldColor =:= ?BLACK, - Color =:= ?BLACK -> - {true, [{Obj,?RED1} | AccDb]}; - OldKey when not Replaced, - OldColor =/= ?BLACK, - Color =/= ?BLACK -> - {true, [{Obj,?GREEN1} | AccDb]}; - OldKey -> - {Replaced, AccDb}; - Key -> - {Replaced, AccDb}; - _OtherKey -> - {Replaced, [{Data,Color} | AccDb]} - end - end - end; - - bag -> - case Key of - OldKey -> - fun({Data,_Color}, {Replaced,AccDb}) when Data =:= Obj -> - {Replaced, AccDb}; - ({Data,Color}, {Replaced,AccDb}) when Data =/= OldObj -> - {Replaced, [{Data,Color} | AccDb]}; - %% Clauses when Data =:= OldObj. - ({_Data,Color}, {Replaced,AccDb}) when not Replaced, - OldColor =:= ?BLACK, - Color =:= ?BLACK -> - {true, [{Obj,?RED1} | AccDb]}; - ({_Data,Color}, {Replaced,AccDb}) when not Replaced, - OldColor =/= ?BLACK, - Color =/= ?BLACK -> - {true, [{Obj,Color} | AccDb]}; - ({_Data,_Color}, {Replaced,AccDb}) -> - {Replaced, AccDb} - end; - _NewKey -> - fun({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj, - not Replaced, - OldColor =:= ?BLACK, - Color =:= ?BLACK -> - {true, [{Obj,?RED1} | AccDb]}; - ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj, - not Replaced, - OldColor =/= ?BLACK, - Color =/= ?BLACK -> - {true, [{Obj,?GREEN1} | AccDb]}; - ({Data,_Color}, {Replaced,AccDb}) when Data =:= OldObj -> - {Replaced, AccDb}; - ({Data,_Color}, {Replaced,AccDb}) when Data =:= Obj -> - {Replaced, AccDb}; - ({Data,Color}, {Replaced,AccDb}) -> - {Replaced, [{Data,Color} | AccDb]} - end - end; - - duplicate_bag -> - %% Multiple identical objects allowed, meaning that we shall not - %% remove anything, just replace one element. - case Key of - OldKey -> - fun({Data,Color}, {Replaced,AccDb}) when Data =:= Obj -> - {Replaced, [{Data,Color} | AccDb]}; - ({Data,Color}, {Replaced,AccDb}) when Data =/= OldObj -> - {Replaced, [{Data,Color} | AccDb]}; - ({_Data,Color}, {Replaced,AccDb}) when not Replaced, - OldColor =:= ?BLACK, - Color =:= ?BLACK -> - {true, [{Obj,?RED1} | AccDb]}; - ({_Data,Color}, {Replaced,AccDb}) when not Replaced, - OldColor =/= ?BLACK, - Color =/= ?BLACK -> - {true, [{Obj,Color} | AccDb]}; - ({Data,Color}, {Replaced,AccDb}) -> - {Replaced, [{Data,Color} | AccDb]} - end; - _NewKey -> - fun({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj, - not Replaced, - OldColor =:= ?BLACK, - Color =:= ?BLACK -> - {true, [{Obj,?RED1} | AccDb]}; - ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj, - not Replaced, - OldColor =/= ?BLACK, - Color =/= ?BLACK -> - {true, [{Obj,?GREEN1} | AccDb]}; - ({Data,Color}, {Replaced,AccDb}) when Data =:= OldObj -> - {Replaced, [{Data,Color} | AccDb]}; - ({Data,Color}, {Replaced,AccDb}) when Data =:= Obj -> - {Replaced, [{Data,Color} | AccDb]}; - ({Data,Color}, {Replaced,AccDb}) -> - {Replaced, [{Data,Color} | AccDb]} - end - end - end, - - FilterFun = fun(Acc0, L) -> - lists:foldl(Fun, Acc0, L) - end, - - - {Repl, TmpList} = - case split(ObjNo, DbList) of - {L1, [{OldObj,OldColor} | T]} when OldColor =/= ?BLACK -> - {true, - lists:reverse(element(2, FilterFun({true,[]}, L1))) ++ - [{Obj,?GREEN1} | lists:reverse(element(2, FilterFun({true,[]},T)))]}; - {L1, [{OldObj,OldColor} | T]} -> - {true, - lists:reverse(element(2, FilterFun({true,[]}, L1))) ++ - [{Obj,?RED1} | lists:reverse(element(2, FilterFun({true,[]}, T)))]}; - {L1, L2} -> - {R1, NewL1} = FilterFun({false,[]}, L1), - {R2, NewL2} = FilterFun({false,[]}, L2), - {R1 or R2, lists:reverse(NewL1) ++ lists:reverse(NewL2)} - end, - - NewDbList = - case Repl of - true when not Sorting -> - TmpList; - true -> - tv_db_sort:mergesort(SortKeyNo, TmpList, RevSorting); - false -> - TmpList2 = - case Key of - OldKey -> - lists:reverse(element(2, FilterFun({false,[]}, TmpList))); - _OtherKey -> - lists:reverse(element(2, FilterFun({true,[]}, TmpList))) ++ - [{Obj,?RED1}] - end, - case Sorting of - false -> - TmpList2; - true -> - tv_db_sort:mergesort(SortKeyNo, TmpList2, RevSorting) - end - end, - NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize, max_size([Obj])), - NewDbData = DbData#db_data{db = NewDbList, - db_size = length(NewDbList), - max_elem_size = NewMaxSize - }, - ProcVars#process_variables{db_data = NewDbData}. - - - - - -delete_object(_Obj, ?BLACK, _ObjNo, ProcVars) -> - %% Don't delete already deleted objects!!! - {false, ProcVars}; -delete_object(undefined, undefined, _ObjNo, ProcVars) -> - {false, ProcVars}; -delete_object(Obj, _ObjColor, ObjNo, ProcVars) -> - #process_variables{db_data = DbData, - etsread_pid = EtsreadPid} = ProcVars, - - #db_data{db = DbList, - deleted = OldDeleted} = DbData, - - %% Before we try to update the internal database, we have to check to see - %% whether the ETS/Mnesia update is allowed! - EtsreadPid ! #etsread_delete_object{sender = self(), - object = Obj}, - Result = - receive - #etsread_delete_object_cfm{success = Success} -> - Success - after - 60000 -> - exit(etsread_not_responding) - end, - - case Result of - false -> - gs:window(dbwin, gs:start(), [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(dbwin, "TV Notification", - ["Couldn't update table!"]); - haiku -> - tv_utils:notify(dbwin, "TV Notification", - ["Three things are certain:", - "Death, taxes, and lost updates.", - "Guess which has occurred."]) - end, - gs:destroy(dbwin), - {false, ProcVars}; - true -> - %% Replace the old element... - %% Have to beware of duplicate_bag tables, - %% i.e., the same object may occur more than - %% once, but we only want to remove it once! - {Repl, TmpList} = - case split(ObjNo, DbList) of - {L1, [{Obj,_Color} | T]} -> - {true, L1 ++ [{Obj,?BLACK} | T]}; - {L1, L2} -> - {false, L1 ++ L2} - end, - NewDbList = - case Repl of - true -> - TmpList; - false -> - Fun = fun({Data,TmpColor}, - {Removed,AccDb}) when Data =/= Obj -> - {Removed, [{Data,TmpColor} | AccDb]}; - ({_Data,TmpColor}, - {Removed,AccDb}) when not Removed, TmpColor =/= ?BLACK -> - {true, [{Obj,?BLACK} | AccDb]}; - ({Data,TmpColor}, - {Removed,AccDb}) -> - {Removed, [{Data,TmpColor} | AccDb]} - end, - lists:reverse(element(2, lists:foldl(Fun, {false,[]}, DbList))) - end, - NewDbData = DbData#db_data{db = NewDbList, - db_size = length(NewDbList), - deleted = [{Obj,?BLACK} | OldDeleted]}, - {true, ProcVars#process_variables{db_data = NewDbData}} - end. - - - - - -new_object(Obj, ProcVars) -> - #process_variables{db_data = DbData, - etsread_pid = EtsreadPid} = ProcVars, - - #db_data{db = DbList, - max_elem_size = MaxElemSize, - ets_type = EtsType, %% 'bag', 'set' or 'duplicate_bag' - sorting = Sorting, - rev_sorting = RevSorting, - sort_key_no = SortKeyNo, - key_no = KeyNo} = DbData, - - %% Before we try to update the internal database, we have to check to see - %% whether the ETS/Mnesia update is allowed! - EtsreadPid ! #etsread_new_object{sender = self(), - object = Obj}, - Result = - receive - #etsread_new_object_cfm{success = Success} -> - Success - after - 60000 -> - exit(etsread_not_responding) - end, - - case Result of - false -> - gs:window(dbwin, gs:start(), [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(dbwin, "TV Notification", - ["Couldn't update table!"]); - haiku -> - tv_utils:notify(dbwin, "TV Notification", - ["Three things are certain:", - "Death, taxes, and lost updates.", - "Guess which has occurred."]) - end, - gs:destroy(dbwin), - {false, ProcVars}; - true -> - Key = element(KeyNo, Obj), - NewDbList = insert_new_object(EtsType, Key, KeyNo, Obj, DbList, Sorting, - RevSorting, SortKeyNo), - NewMaxSize = ?COMM_FUNC_FILE:max(MaxElemSize, max_size([Obj])), - NewDbData = DbData#db_data{db = NewDbList, - db_size = length(NewDbList), - max_elem_size = NewMaxSize - }, - {true, ProcVars#process_variables{db_data = NewDbData}} - end. - - - - - -insert_new_object(EtsType,Key,KeyNo,Obj,DbList,Sorting,RevSorting,SortKeyNo) -> - %% Remove elements from the list that ought not to be there, - %% according to the table type! - - Fun = - case basetype(EtsType) of - set -> - fun({Data,Color}, {Replaced,AccDb}) when element(KeyNo,Data) =/= Key -> - {Replaced, [{Data,Color} | AccDb]}; - ({Data,Color}, {Replaced,AccDb}) when not Replaced, - Color =/= ?BLACK, - Data =/= Obj-> - {true, [{Obj,?GREEN1} | AccDb]}; - ({_Data,Color}, {Replaced,AccDb}) when not Replaced, - Color =/= ?BLACK -> - {true, [{Obj,Color} | AccDb]}; - ({_Data,Color}, {Replaced,AccDb}) when not Replaced, - Color =:= ?BLACK -> - {true, [{Obj, ?RED1} | AccDb]}; - ({_Data,Color}, {Replaced,AccDb}) when Replaced, - Color =:= ?BLACK -> - {false, AccDb}; - ({_Data,_Color}, {Replaced,AccDb}) -> - {Replaced, AccDb} - end; - bag -> - fun({Data,Color}, {Replaced,AccDb}) when Data =/= Obj -> - {Replaced, [{Data,Color} | AccDb]}; - ({_Data,Color}, {Replaced,AccDb}) when not Replaced, - Color =/= ?BLACK -> - {true, [{Obj,Color} | AccDb]}; - ({_Data,Color}, {Replaced,AccDb}) when Replaced, - Color =/= ?BLACK -> - {true, AccDb}; - ({_Data,Color}, {Replaced,AccDb}) when Replaced, - Color =:= ?BLACK -> - {true, AccDb}; - ({_Data,Color}, {Replaced,AccDb}) when not Replaced, - Color =:= ?BLACK -> - {true, [{Obj, ?RED1} | AccDb]}; - ({_Data,_Color}, {Replaced,AccDb}) -> - {Replaced, AccDb} - end; - duplicate_bag -> - %% The fun is never called if the type is duplicate_bag, - %% because all we have to do with new elements is to insert - %% them (multiple identical objects allowed). - not_used - end, - - FilterFun = fun(Acc0, L) -> - lists:foldl(Fun, Acc0, L) - end, - - {_Replaced, TmpDbList} = - case EtsType of - duplicate_bag -> - {false, DbList}; - _OtherType -> - {R,L} = FilterFun({false,[]}, DbList), - {R, lists:reverse(L)} - end, - - case Sorting of - false -> - TmpDbList ++ [{Obj,?RED1}]; - true -> - %% The original list is already sorted! - %% Just merge the two lists together! - tv_db_sort:merge(SortKeyNo, TmpDbList, [{Obj,?RED1}], RevSorting) - end. - - - - - - -max_size([]) -> - 0; -max_size(L) -> - max_size(L, 0). - - - -max_size([], CurrMax) -> - CurrMax; -max_size([H | T], CurrMax) when is_tuple(H) -> - Size = size(H), - if - Size >= CurrMax -> - max_size(T, Size); - true -> - max_size(T, CurrMax) - end; -max_size([_H | T], CurrMax) -> - Size = 1, - if - Size >= CurrMax -> - max_size(T, Size); - true -> - max_size(T, CurrMax) - end. - - - - - -add_elements(_KeyNo, Inserted, List, false, _RevSorting, _SortKeyNo) -> - % Remember that the order of the original list has to be preserved! - List ++ list2dblist(Inserted, ?RED1); -add_elements(_KeyNo, Inserted, List, _Sorting, RevSorting, SortKeyNo) -> - % The original list is already sorted - sort the new elements, and - % just merge the two lists together! - SortedInsertedList = tv_db_sort:mergesort(SortKeyNo, - list2dblist(Inserted, ?RED1), - RevSorting), - tv_db_sort:merge(SortKeyNo, List, SortedInsertedList, RevSorting). - - - - - - %% We assume the list already has been sorted, i.e., since the order won't - %% be changed by marking an element deleted, we DON'T have to sort the list - %% once again! - -mark_deleted(_KeyNo, [], List) -> - List; -mark_deleted(KeyNo, [Data | T], List) -> - KeyValue = tv_db_sort:get_compare_value(KeyNo, Data), - NewList = mark_one_element_deleted(KeyNo, KeyValue, Data, List, []), - mark_deleted(KeyNo, T, NewList). - - - - - - - - -mark_one_element_deleted(_KeyNo, _KeyValue, _Data, [], Acc) -> - Acc; -mark_one_element_deleted(KeyNo, {tuple, KeyValue}, - Data, [{DataTuple, Color} | Tail], Acc) -> - OldKeyValue = tv_db_sort:get_compare_value(KeyNo, DataTuple), - % Remember that the order of the original list has to be preserved! - if - OldKeyValue =:= {tuple, KeyValue} -> - Acc ++ [{Data, ?BLACK}] ++ Tail; - true -> - mark_one_element_deleted(KeyNo, {tuple, KeyValue}, Data, Tail, - Acc ++ [{DataTuple, Color}]) - end; -mark_one_element_deleted(KeyNo, _KeyValue, Data, [{DataTuple, Color} | Tail], Acc) -> - if - Data =:= DataTuple -> - Acc ++ [{Data, ?BLACK}] ++ Tail; - true -> - mark_one_element_deleted(KeyNo, _KeyValue, Data, Tail, - Acc ++ [{DataTuple, Color}]) - end. - - - - - - - - %% We assume the list already has been sorted, i.e., since the order won't - %% be changed by marking an element updated, we DON'T have to sort the list - %% once again! - -replace_elements(_KeyNo, [], List) -> - List; -replace_elements(KeyNo, [Data | T], List) -> - KeyValue = tv_db_sort:get_compare_value(KeyNo, Data), - NewList = replace_one_element(KeyNo, KeyValue, Data, List, []), - replace_elements(KeyNo, T, NewList). - - - - - - - -replace_one_element(_KeyNo, _Key, _Data, [], Acc) -> - Acc; -replace_one_element(KeyNo, {tuple, Key1}, Data, [{DataTuple, Color} | Tail], Acc) -> - Key2 = tv_db_sort:get_compare_value(KeyNo, DataTuple), - % Remember that the order of the original list has to be preserved! - if - Key2 =:= {tuple, Key1} -> - Acc ++ [{Data, ?GREEN1}] ++ Tail; - true -> - replace_one_element(KeyNo, {tuple, Key1}, Data, Tail, - Acc ++ [{DataTuple, Color}]) - end; -replace_one_element(_KeyNo, _KeyValue, _Data, [{DataTuple, Color} | Tail], Acc) -> - % Can't replace an element with no key! - Acc ++ [{DataTuple, Color} | Tail]. - - - - - - - - -group_difflists(bag, _KeyNo, Inserted, Deleted) -> - %% Since the ETS table is of bag type, no element can be updated, i.e., - %% it can only be deleted and re-inserted, otherwise a new element will be added. - {Inserted, Deleted, []}; -group_difflists(duplicate_bag, _KeyNo, Inserted, Deleted) -> - %% Since the ETS table is of duplicate_bag type, no element can be updated, i.e., - %% it can only be deleted and re-inserted, otherwise a new element will be added. - {Inserted, Deleted, []}; -group_difflists(set, _KeyNo, [], Deleted) -> - %% Updated elements have to be present in both lists, i.e., if one list is empty, - %% the other contains no updated elements - they are either inserted or deleted! - {[], Deleted, []}; -group_difflists(set, _KeyNo, Inserted, []) -> - {Inserted, [], []}; -group_difflists(set, KeyNo, InsOrUpd, DelOrUpd) -> - match_difflists(KeyNo, InsOrUpd, DelOrUpd, [], []). - - - - - - -match_difflists(_KeyNo, [], Deleted, Inserted, Updated) -> - {Inserted, Deleted, Updated}; -match_difflists(KeyNo, [Data | T], DelOrUpd, InsAcc, UpdAcc) -> - % This function is only called in case of a 'set' ETS table. - % 'Set' type of ETS table means there are unique keys. If two elements in - % InsOrUpd and DelOrUpd have the same key, that element has been updated, - % and is added to the Updated list, and removed from the original two lists. - % After the two lists have been traversed in this way, the remaining elements - % in DelOrUpd forms the new Deleted list (analogous for InsOrUpd). - % If we want to improve the performance, we could check which list is the - % shortest, since the traversing time depends on this. - Key = element(KeyNo, Data), - case searchdelete(Key, KeyNo, DelOrUpd) of - {true, NewDelOrUpd} -> - match_difflists(KeyNo, T, NewDelOrUpd, InsAcc, [Data | UpdAcc]); - {false, SameDelOrUpd} -> - match_difflists(KeyNo, T, SameDelOrUpd, [Data | InsAcc], UpdAcc) - end. - - - - -searchdelete(_Key, _ElemNo, []) -> - {false, []}; -searchdelete(Key, ElemNo, List) -> - searchdelete(Key, ElemNo, List, []). - - - - - -searchdelete(_Key, _ElemNo, [], Acc) -> - {false, Acc}; -searchdelete(Key, ElemNo, [Tuple | Tail], Acc) -> - % We don't use standard libraries, 'cause we want to make an 'atomic' - % operation, i.e., we will not search the list two times... - case (element(ElemNo, Tuple) =:= Key) of - true -> - {true, Acc ++ Tail}; % Return the list without the matching element - _Other -> - searchdelete(Key, ElemNo, Tail, [Tuple | Acc]) - end. - - - - - - - -dblist2list([]) -> - []; -dblist2list([{Data, _Color} | T]) -> - [Data | dblist2list(T)]. - - - - - - - -list2dblist([], _Color) -> - []; -list2dblist([Data | T], Color) -> - [{Data, Color} | list2dblist(T, Color)]. - - - - - - - - -update_colors([]) -> - []; -update_colors([{Data, Color} | T]) -> - [{Data, new_color(Color)} | update_colors(T)]. - - - - - - - - -new_color(?GREEN1) -> - ?GREEN2; -new_color(?GREEN2) -> - ?GREEN3; -new_color(?GREEN3) -> - ?GREEN4; -new_color(?GREEN4) -> - ?GREEN5; -new_color(?GREEN5) -> - ?DEFAULT_BTN_COLOR; -new_color(?RED1) -> - ?RED2; -new_color(?RED2) -> - ?RED3; -new_color(?RED3) -> - ?RED4; -new_color(?RED4) -> - ?RED5; -new_color(?RED5) -> - ?DEFAULT_BTN_COLOR; -new_color(_Other) -> - ?DEFAULT_BTN_COLOR. % Default shall be gray. - - - - - - - - -compute_elapsed_seconds({H1, M1, S1}, {H2, M2, S2}) -> - ElapsedHours = get_time_diff(hours, H1, H2), - ElapsedMinutes = get_time_diff(minutes, M1, M2), - ElapsedSeconds = get_time_diff(seconds, S1, S2), - (ElapsedHours * 3600) + (ElapsedMinutes * 60) + ElapsedSeconds + 1. - - - - - - - -get_time_diff(_Type, T1, T2) when T1 =< T2 -> - T2 - T1; -get_time_diff(hours, T1, T2) -> - T2 + 24 - T1; -get_time_diff(minutes, T1, T2) -> - T2 + 60 - T1; -get_time_diff(seconds, T1, T2) -> - T2 + 60 - T1. - - - - -split(_N, []) -> - {[], []}; -split(0, List) -> - {[], List}; -split(N, List) -> - split2(0, N - 1, [], List). - - - -split2(Ctr, N, Acc, [H | T]) when Ctr < N -> - split2(Ctr + 1, N, [H | Acc], T); -split2(_Ctr, _N, Acc, []) -> - {lists:reverse(Acc), []}; -split2(_Ctr, _N, Acc, List) -> - {lists:reverse(Acc), List}. - -basetype(ordered_set) -> - set; -basetype(Any) -> - Any. diff --git a/lib/tv/src/tv_db_int_def.hrl b/lib/tv/src/tv_db_int_def.hrl deleted file mode 100644 index d2cb8adee5..0000000000 --- a/lib/tv/src/tv_db_int_def.hrl +++ /dev/null @@ -1,80 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Internal definitions for the database part of the table -%%% tool. -%%% -%%%********************************************************************* - --define(WHITE, {255, 255, 255}). --define(MEDIUM_GRAY, {170, 170, 170}). - - --define(LIGHT_GREEN, { 0, 255, 0}). --define(GREEN, { 50, 215, 50}). --define(DARK_GREEN, { 50, 170, 50}). --define(FOREST_GREEN, { 34, 139, 34}). --define(DARK_FOREST_GREEN, { 15, 100, 15}). - - - --define(RED, {255, 0, 0}). --define(PINK, {255, 130, 170}). --define(LIGHT_VIOLET, {220, 150, 225}). --define(VIOLET, {160, 70, 180}). --define(DARK_VIOLET, {100, 10, 130}). - - - - - - --record(db_data, {db = [], % List containing all elements - db_size = 0, % Number of elements in 'db' - max_elem_size = 0, % Size of largest element in db. - hidden = [], % Elements (i.e., keys) not to be shown - deleted = [], % Elements just deleted - subset_size, % Size of the subset to be extracted and - % shown - subset_pos, % Position in list where subset starts - sorting = false, % Tells whether sorting is used ('true' - % or 'false') - requested_row = 0, - rev_sorting = false, % Tells whether the sorting (if any) is - % in reversed order or not ('true' or - % 'false') - sort_key_no, % Element in each tuple to use as sorting - % element - key_no, % Element in each tuple to use as key - % (this element is used when updating the - % dblist, i.e., inserting, deleting a.s.o) - ets_type % 'bag' or 'set' - }). - - --record(process_variables, {master_pid, - etsread_pid, - db_data = #db_data{}, - list_of_keys = [], - lists_as_strings = true - }). - - - - diff --git a/lib/tv/src/tv_db_search.erl b/lib/tv/src/tv_db_search.erl deleted file mode 100644 index edfa57df04..0000000000 --- a/lib/tv/src/tv_db_search.erl +++ /dev/null @@ -1,475 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Code for the search window. -%%% -%%%********************************************************************* --module(tv_db_search). --compile([{nowarn_deprecated_function,{gs,button,3}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,entry,3}}, - {nowarn_deprecated_function,{gs,frame,2}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,label,3}}, - {nowarn_deprecated_function,{gs,listbox,3}}, - {nowarn_deprecated_function,{gs,radiobutton,3}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([create_window/1, - resize_window/1, - reset_window/1, - destroy_window/1, - mark_busy/1, - mark_nonbusy/1, - get_input_and_search/3, - update_search/4, - string_to_term/1 - ]). - - - - --include("tv_int_def.hrl"). --include("tv_int_msg.hrl"). --include("tv_db_int_def.hrl"). - - - - --define(WIN_WIDTH, 445). --define(SMALL_WIN_HEIGHT, 117). --define(BIG_WIN_HEIGHT, 335). --define(FRAME_WIDTH, 429). % 334 --define(OLD_FRAME_WIDTH, 334). --define(FRAME_HEIGHT, 105). --define(FRAME_XPOS, (10-2)). --define(FRAME_YPOS, 10). --define(ENTRY_XPOS, 9). --define(ENTRY_YPOS, 31). --define(ENTRY_WIDTH, (?OLD_FRAME_WIDTH-10-2*?ENTRY_XPOS-5)). --define(LISTBOX_WIDTH, ?WIN_WIDTH-2*?FRAME_XPOS+1). --define(LISTBOX_HEIGHT, 162). --define(LISTBOX_XPOS, ?FRAME_XPOS-2). --define(LISTBOX_YPOS, ?SMALL_WIN_HEIGHT+8). --define(BTN_WIDTH, 80). --define(BTN_HEIGHT, 30). --define(BTN_XPOS, ?OLD_FRAME_WIDTH-6). --define(BG_COLOUR, {217,217,217}). - - - - - - -create_window(true) -> - gs:config(win, [raise]); -create_window(false) -> - gs:window(win, gs:start(), [{width,?WIN_WIDTH}, - {height,?SMALL_WIN_HEIGHT}, - {data,small}, - {bg,?BG_COLOUR}, - {title,"[TV] Search Object"}, - {destroy,true}, - {configure,true}, - {cursor,arrow} - ]), - - F = gs:frame(win, [{width,?FRAME_WIDTH}, - {height,?FRAME_HEIGHT}, - {x,?FRAME_XPOS}, - {y,?FRAME_YPOS}, - {bw,2}, - {bg,?BG_COLOUR} - ]), - - gs:label(F, [{width,80}, - {height,25}, - {x,?ENTRY_XPOS+2}, - {y,8}, - {align,w}, - {bg,?BG_COLOUR}, - {fg, {0,0,0}}, - {label, {text,"Search for:"}} - ]), - - gs:entry(entry, F, [{width,?ENTRY_WIDTH}, - {height,30}, - {x,?ENTRY_XPOS}, - {y,?ENTRY_YPOS}, - {insert, {0,"<Search expression>"}}, - {bg, {255,255,255}}, - {fg, {0,0,0}}, - {cursor,text}, - {justify,left}, - {keypress,true}, - {setfocus,true} - ]), - - Group = list_to_atom("expr" ++ pid_to_list(self())), - RadioWidth = round(?ENTRY_WIDTH / 2), - gs:radiobutton(expr_term, F, [{width,RadioWidth - 45}, - {height,25}, - {x,?ENTRY_XPOS}, - {y,?ENTRY_YPOS+40}, - {group,Group}, - {align, c}, - {label,{text,"as term"}}, - {select,true} - ]), - gs:radiobutton(expr_regexp, F, [{width,RadioWidth + 45}, - {height,25}, - {x,?ENTRY_XPOS+RadioWidth-20-26}, - {y,?ENTRY_YPOS+40}, - {group,Group}, - {align,c}, - {label,{text,"as regular expression"}} - ]), - - gs:button(search, F, [{width,?BTN_WIDTH}, - {height,?BTN_HEIGHT}, - {x,?BTN_XPOS}, - {y,11}, - {label, {text,"Search"}}, - {bg,?BG_COLOUR}, - {fg, {0,0,0}} - ]), - gs:button(cancel, F, [{width,?BTN_WIDTH}, - {height,?BTN_HEIGHT}, - {x,?BTN_XPOS}, - {y,?BTN_HEIGHT+11+10}, - {label, {text,"Cancel"}}, - {data,cancel}, - {bg,?BG_COLOUR}, - {fg, {0,0,0}} - ]), - expand_window(), - gs:config(entry, [{select, {0,1000}}]), - gs:config(win, [{map,true}]). - - - - -resize_window(false) -> - done; -resize_window(true) -> - gs:config(win, [{width,?WIN_WIDTH}, - {height,?BIG_WIN_HEIGHT} - ]). - - - - -reset_window(false) -> - done; -reset_window(true) -> - gs:config(listbox, [clear]), - gs:config(objects_found, [{label, {text,""}}]). - - - - -destroy_window(false) -> - done; -destroy_window(true) -> - gs:destroy(win). - - - -mark_busy(false) -> - done; -mark_busy(true) -> - gs:config(win, [{cursor,busy}]), - gs:config(entry, [{cursor,busy}]). - - - - -mark_nonbusy(false) -> - done; -mark_nonbusy(true) -> - gs:config(win, [{cursor,arrow}]), - gs:config(entry, [{cursor,text}]). - - - - -get_input_and_search(DbList, IsRegExp, ListAsStr) -> - get_input_and_search(DbList, IsRegExp, true, ListAsStr). - - - - -get_input_and_search(DbList, IsRegExp, Notify, ListAsStr) -> - Str = get_entry_text(), - StrConvRes = case IsRegExp of - true -> - string_to_regexp(Str); - false -> - string_to_term(Str) - end, - - case StrConvRes of - {ok, TermOrRE} -> - search(IsRegExp, TermOrRE, DbList, ListAsStr); - {error, {_Reason, Msg}} when Notify -> - gs:config(win, [beep]), - tv_utils:notify(win, "TV Notification", Msg); - {error, {_Reason, _Msg}} -> - done - end. - - - -update_search(false, _DbList, _IsRegExp, _ListAsStr) -> - done; -update_search(true, DbList, true, ListAsStr) -> - get_input_and_search(DbList, false, false, ListAsStr); -update_search(true, DbList, false, ListAsStr) -> - get_input_and_search(DbList, true, false, ListAsStr). - - - -get_entry_text() -> - gs:read(entry,text). - - - -string_to_regexp(Str) -> - case re:compile(Str) of - {ok, RegExp} -> - {ok, RegExp}; - {error, _Error} -> - case get(error_msg_mode) of - normal -> - {error, {not_a_regexp, "Please enter a regular expression!"}}; - haiku -> - {error, {not_a_regexp, ["Being incorrect", - "The regular expression", - "Must now be retyped."]}} - end - end. - - - -string_to_term(Str) -> - case catch erl_scan:string(Str ++ ". ") of - {ok, ScannedStr, _No} -> - case erl_parse:parse_term(ScannedStr) of - {ok, Term} -> - {ok, Term}; - _Other -> - %% May be a PID, have to check this, since erl_scan - %% currently cannot handle this case... :-( - case catch list_to_pid(Str) of - Pid when is_pid(Pid) -> - {ok, Pid}; - _Error -> - case get(error_msg_mode) of - normal -> - {error, {not_a_term, "Please enter a valid term!"}}; - haiku -> - {error, {not_a_term, ["Aborted effort.", - "Reflect, repent and retype:", - "Enter valid term."]}} - end - end - end; - _Error -> - case get(error_msg_mode) of - normal -> - {error, {not_a_term, "Please enter a valid term!"}}; - haiku -> - {error, {not_a_term, ["Aborted effort.", - "Reflect, repent and retype:", - "Enter valid term."]}} - end - end. - - - -search(IsRegExp, SearchValue, DbList, ListAsStr) -> - gs:config(cancel, [{label, {text,"Stop"}}]), - mark_busy(true), - reset_window(true), - SearchRes = traverse(SearchValue, DbList, 1, length(DbList), [], IsRegExp, ListAsStr), - gs:config(cancel, [{label, {text,"Cancel"}}]), - mark_nonbusy(true), - SearchRes. - - - - - -expand_window() -> - gs:listbox(listbox, win, [{width,?LISTBOX_WIDTH}, - {height,?LISTBOX_HEIGHT}, - {x,?LISTBOX_XPOS}, - {y,?LISTBOX_YPOS}, - {bg, {255,255,255}}, - {fg, {0,0,0}}, - {scrollbg,?BG_COLOUR}, - {scrollfg,?BG_COLOUR}, - {hscroll,bottom}, - {vscroll,right}, - {click,true}, - {doubleclick,false}, - {selectmode,single} - ]), - gs:label(objects_found, win, [{width,?LISTBOX_WIDTH}, - {height,25}, - {x,?LISTBOX_XPOS}, - {y,?LISTBOX_YPOS+?LISTBOX_HEIGHT+13}, - {align,w}, - {bg,?BG_COLOUR}, - {fg, {0,0,0}} - ]), - gs:config(win, [{width,?WIN_WIDTH}, - {height,?BIG_WIN_HEIGHT} - ]). - - - - - - - -traverse(Pattern, [Object | T], Row, Length, Acc, IsRegExp, ListAsStr) -> - SearchRes = - case IsRegExp of - true -> - search_for_regexp(Pattern, Object, ListAsStr); - false -> - compare_terms(Pattern, Object) - end, - - NewAcc - = case SearchRes of - found -> - RowStr = integer_to_list(Row), - LengthStr = integer_to_list(Length), - ObjectStr = case ListAsStr of - true -> - lists:flatten(tv_io_lib:format("~p", [Object])); - false -> - lists:flatten(tv_io_lib:write(Object)) - end, - - gs:config(listbox, - [{add, - " Row " ++ RowStr ++ ":" ++ - lists:duplicate(length(LengthStr)-length(RowStr), " ") ++ - " " ++ ObjectStr} - ]), - gs:config(objects_found, - [{label, - {text,integer_to_list(length(Acc)+1) ++ - " object(s) found"}} - ]), - [{Row,Object} | Acc]; - not_found -> - Acc - end, - receive - {gs,cancel,click,_Data,_Args} -> - gs:config(objects_found, - [{label, - {text,integer_to_list(gs:read(listbox,size)) ++ - " object(s) found"}} - ]), - lists:reverse(NewAcc) - after - 0 -> - traverse(Pattern, T, Row+1, Length, NewAcc, IsRegExp, ListAsStr) - end; -traverse(_Pattern, [], _N, _Length, Acc, _IsRegExp, _ListAsStr) -> - gs:config(objects_found, - [{label, - {text,integer_to_list(gs:read(listbox,size)) ++ - " object(s) found"}} - ]), - lists:reverse(Acc). - - - - -search_for_regexp(Pattern, Elem, ListAsStr) -> - ListToSearch = - case ListAsStr of - true -> - lists:flatten(tv_io_lib:format("~p", [Elem])); - false -> - lists:flatten(tv_io_lib:write(Elem)) - end, - - case re:run(ListToSearch, Pattern, [{capture,none}]) of - match -> - found; - nomatch -> - not_found - end. - - - - - -compare_terms(Term, Elem) when not is_tuple(Elem), not is_list(Elem), Term =/= Elem -> - not_found; -compare_terms(Term, Term) -> - %% Even the case Term = "{}" or "[]"!!! - found; -compare_terms(Term, Elem) when is_list(Elem) -> - traverse_list(Term, Elem); -compare_terms(Term, Elem) when is_tuple(Elem) -> - traverse_tuple(Term, Elem, 1, size(Elem)). - - - - - -traverse_tuple(Pattern, Tuple, N, Stop) when N =< Stop -> - Elem = element(N,Tuple), - case compare_terms(Pattern, Elem) of - found -> - found; - not_found -> - traverse_tuple(Pattern, Tuple, N+1, Stop) - end; -traverse_tuple(_Pattern, _Tuple, N, Stop) when N > Stop -> - not_found. - - - - - - -traverse_list(Pattern, [H | T]) -> - case compare_terms(Pattern, H) of - found -> - found; - not_found -> - traverse_list(Pattern, T) - end; -traverse_list(_Pattern, []) -> - not_found. - diff --git a/lib/tv/src/tv_db_sort.erl b/lib/tv/src/tv_db_sort.erl deleted file mode 100644 index 3675c7b413..0000000000 --- a/lib/tv/src/tv_db_sort.erl +++ /dev/null @@ -1,141 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_db_sort). - - - --export([mergesort/3, merge/4, get_compare_value/2]). - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - - -mergesort(_KeyNo, [X], _ReverseOrder) -> - [X]; -mergesort(_KeyNo, [], _ReverseOrder) -> - []; -mergesort(KeyNo, X, ReverseOrder) -> - split(KeyNo, X, [], [], ReverseOrder). - - - - - - - - - %% If we want reverse order when just merging two lists, - %% each of them has to be in reverse order first! - -merge(KeyNo, [{E1, C1} | T1], [{E2, C2} | T2], Reverse) when not Reverse -> - K1 = get_compare_value(KeyNo, E1), - K2 = get_compare_value(KeyNo, E2), - case get_correct_order(K1, E1, K2, E2) of - {1, 2} -> - [{E1, C1} | merge(KeyNo, T1, [{E2, C2} | T2], Reverse)]; - {2, 1} -> - [{E2, C2} | merge(KeyNo, [{E1, C1} | T1], T2, Reverse)] - end; -merge(KeyNo, [{E1, C1} | T1], [{E2, C2} | T2], Reverse) -> - K1 = get_compare_value(KeyNo, E1), - K2 = get_compare_value(KeyNo, E2), - case get_correct_order(K1, E1, K2, E2) of - {1, 2} -> - [{E2, C2} | merge(KeyNo, [{E1, C1} | T1], T2, Reverse)]; - {2, 1} -> - [{E1, C1} | merge(KeyNo, T1, [{E2, C2} | T2], Reverse)] - end; -merge(_KeyNo, [], L2, _Reverse) -> % L2 may be the empty list also! - L2; -merge(_KeyNo, L1, [], _Reverse) -> % L1 may be the empty list also! - L1. - - - - - - -get_compare_value(KeyNo, E) when is_tuple(E) -> - case catch element(KeyNo, E) of - {'EXIT', {badarg, {?MODULE, get_compare_value, [KeyNo, E]}}} -> - short_tuple; - V -> - {tuple, V} - end; -get_compare_value(_KeyNo, _E) -> - no_tuple. - - - - - - - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - - -split(KeyNo, [A,B|T], X, Y, Reverse) -> - split(KeyNo, T, [A|X], [B|Y], Reverse); -split(KeyNo, [H], X, Y, Reverse) -> - split(KeyNo, [], [H|X], Y, Reverse); -split(KeyNo, [], X, Y, Reverse) -> - merge(KeyNo, - mergesort(KeyNo, X, Reverse), - mergesort(KeyNo, Y, Reverse), - Reverse). - - - - - - -get_correct_order({tuple, V1}, _E1, {tuple, V2}, _E2) when V1 < V2 -> - {1, 2}; -get_correct_order({tuple, _V1}, _E1, {tuple, _V2}, _E2) -> - {2, 1}; -get_correct_order(short_tuple, _E1, {tuple, _V2}, _E2) -> - {1, 2}; -get_correct_order({tuple, _V1}, _E1, short_tuple, _E2) -> - {2, 1}; -get_correct_order(short_tuple, E1, short_tuple, E2) when E1 < E2 -> - {1, 2}; -get_correct_order(short_tuple, _E1, short_tuple, _E2) -> - {2, 1}; -get_correct_order(no_tuple, E1, no_tuple, E2) when E1 < E2 -> - {1, 2}; -get_correct_order(no_tuple, _E1, no_tuple, _E2) -> - {2, 1}; -get_correct_order(_Anything, _E1, no_tuple, _E2) -> % Tuples first, then other - {1, 2}; % terms in correct order! -get_correct_order(no_tuple, _E1, _Anything, _E2) -> - {2, 1}. diff --git a/lib/tv/src/tv_ets_rpc.erl b/lib/tv/src/tv_ets_rpc.erl deleted file mode 100644 index ec2fde30ac..0000000000 --- a/lib/tv/src/tv_ets_rpc.erl +++ /dev/null @@ -1,140 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_ets_rpc). - - - --export([all/2, - info/4, - new/4, - tab2list/3, - insert/4, - lookup/4, - delete/4 - ]). - - - - -all(_Node, true) -> - chk(catch ets:all()); -all(Node, false) -> - chk(catch rpc:block_call(Node, ets, all, [])). - - - - -info(_Node, true, TabId, What) -> - chk(catch ets:info(TabId, What)); -info(Node, false, TabId, What) -> - chk(catch rpc:block_call(Node, ets, info, [TabId, What])). - - - - -new(_Node, true, TabName, Options) -> - case catch ets:new(TabName, Options) of - {TabName, Pid} when is_pid(Pid) -> - {TabName,Pid}; - {TabNo, Pid} when is_pid(Pid) -> - {TabNo,Pid}; - OtherResult -> - chk(OtherResult) - end; -new(Node, false, TabName, Options) -> - case catch rpc:block_call(Node, ets, new, [TabName, Options]) of - {TabName, Pid} when is_pid(Pid) -> - {TabName,Pid}; - {TabNo, Pid} when is_pid(Pid) -> - {TabNo, Pid}; - OtherResult -> - chk(OtherResult) - end. - - - - -tab2list(_Node, true, TabId) -> - chk(catch ets:tab2list(TabId)); -tab2list(Node, false, TabId) -> - chk(catch rpc:call(Node, ets, tab2list, [TabId])). - - - - -insert(_Node, true, TabId, Object) -> - chk(catch ets:insert(TabId, Object)); -insert(Node, false, TabId, Object) -> - chk(catch rpc:call(Node, ets, insert, [TabId, Object])). - - - - -lookup(_Node, true, TabId, Key) -> - chk(catch ets:lookup(TabId, Key)); -lookup(Node, false, TabId, Key) -> - chk(catch rpc:call(Node, ets, lookup, [TabId, Key])). - - - - -delete(_Node, true, TabId, Key) -> - chk(catch ets:delete(TabId, Key)); -delete(Node, false, TabId, Key) -> - chk(catch rpc:call(Node, ets, delete, [TabId, Key])). - - - - -chk(Result) -> - case Result of - undefined -> - throw(no_table); - _Anything when is_list(Result) -> - Result; - _Anything when is_atom(Result) -> - Result; - _Anything when is_integer(Result) -> - Result; - _Anything when is_pid(Result) -> - Result; - - %% Messages received when node is down. - {badrpc, nodedown} -> - throw(nodedown); - {'EXIT', nodedown} -> - throw(nodedown); - {'EXIT', {{badarg, {gen, set_monitor_node, _Args}}, _Reason}} -> - throw(nodedown); - - %% Messages received when table doesn't exist. - {'EXIT', {badarg, {ets,local_info,_Args}}} -> - %% Due to inconsistencies in R2D and earlier versions: - %% ets:info/1 returned 'undefined' when table didn't - %% exist, while ets:info/2 returned the exit-signal - %% above. This was corrected in R3A - now both functions - %% return 'undefined' :-) - throw(no_table); - {badrpc, {'EXIT', {badarg,_Reason}}} -> - throw(no_table); - {'EXIT', {badarg,_Reason}} -> - throw(no_table); - Error when is_tuple(Error) -> - throw({unexpected_error,Error}) - end. - diff --git a/lib/tv/src/tv_etsread.erl b/lib/tv/src/tv_etsread.erl deleted file mode 100644 index 32f111c9a1..0000000000 --- a/lib/tv/src/tv_etsread.erl +++ /dev/null @@ -1,770 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Module containing the interface towards ETS tables, -%%% i.e., handling the polling and thereafter sending the -%%% result to the database part of the table tool. -%%% -%%%********************************************************************* - - --module(tv_etsread). --compile([{nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([etsread/2]). - - - --include("tv_int_def.hrl"). --include("tv_int_msg.hrl"). - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -etsread(MasterPid, ErrorMsgMode) -> - process_flag(trap_exit, true), - put(error_msg_mode, ErrorMsgMode), - blocked(MasterPid). - - - - - -%%%********************************************************************* -%%% INTERNAL FUNCTIONS -%%%********************************************************************* - - - -blocked(MasterPid) -> - receive - Msg -> - case Msg of - - #etsread_deblock{} -> - deblock(Msg, MasterPid); - - {'EXIT', Pid, Reason} -> - exit_signals({Pid, Reason}, MasterPid), - blocked(MasterPid); - - {error_msg_mode, Mode} -> - put(error_msg_mode, Mode), - blocked(MasterPid); - - _Other -> - %% io:format("Received signal ~p~n", [_Other]), - blocked(MasterPid) - end - end. - - - - - - - -deblock(Msg, MasterPid) -> - #etsread_deblock{dbs_pid = DbsPid, - table_type = KindOfTable, - node = Node, - local_node = LocalNode, - table_id = TableId, - poll_interval = PollInt} = Msg, - PollInterval = case PollInt of - infinity -> - PollInt; - _Other -> - PollInt * 1000 - end, - %% Get table info! - case catch get_table_info(Node, LocalNode, TableId, KindOfTable) of - nodedown -> - MasterPid ! #pc_nodedown{sender = self(), - automatic_polling = false}, - blocked(MasterPid); - no_table -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = false}, - blocked(MasterPid); - mnesia_not_started -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = false}, - blocked(MasterPid); - {unexpected_error,_Reason} -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = false}, - blocked(MasterPid); - {Type, Pos, Protection} -> - MasterPid ! #etsread_deblock_cfm{sender = self(), - type = Type, - keypos = Pos, - protection = Protection - }, - - timer:sleep(500), - case catch read_table(Node, LocalNode, TableId, KindOfTable, DbsPid) of - nodedown -> - MasterPid ! #pc_nodedown{sender = self(), - automatic_polling = false}, - blocked(MasterPid); - no_table -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = false}, - blocked(MasterPid); - mnesia_not_started -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = false}, - blocked(MasterPid); - {unexpected_error,_Reason} -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = false}, - blocked(MasterPid); - _ElapsedTime -> - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, - KindOfTable, PollInterval) - end - end. - - - - - - -get_table_info(Node, LocalNode, TableId, KindOfTable) -> - case KindOfTable of - ets -> - % Check whether table is 'bag' or 'set' type. - Type = tv_ets_rpc:info(Node, LocalNode, TableId, type), - % Get position for the key. - Pos = tv_ets_rpc:info(Node, LocalNode, TableId, keypos), - Protection = tv_ets_rpc:info(Node, LocalNode, TableId, protection), - {Type, Pos, Protection}; - mnesia -> - Type = tv_mnesia_rpc:table_info(Node, LocalNode, TableId, type), - Pos = 2, - %% All Mnesia tables are regarded as being public! - {Type, Pos, public} - end. - - - - - - -deblocked_loop(MasterPid,DbsPid,Node,LocalNode,TableId,KindOfTable,PollInterval) -> - receive - Msg -> - - case Msg of - - #etsread_poll_table{} -> - case catch read_table(Node, LocalNode, TableId, KindOfTable, DbsPid) of - %% No automatic polling here! - nodedown -> - MasterPid ! #pc_nodedown{sender = self(), - automatic_polling = false}; - no_table -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = false}; - mnesia_not_started -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = false}; - {unexpected_error,_Reason} -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = false}; - _ElapsedTime -> - done - end, - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, - TableId, KindOfTable, PollInterval); - - - #etsread_set_poll_interval{interval = PollInt} -> - NewPollInterval = case PollInt of - infinity -> - PollInt; - _Other -> - PollInt * 1000 - end, - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, - TableId, KindOfTable, NewPollInterval); - - - #etsread_deblock{} -> - deblock(Msg, MasterPid); - - - #etsread_update_object{key_no=KeyNo, object=Obj, old_object=OldObj} -> - update_object(KindOfTable, Node, LocalNode, TableId, DbsPid, - KeyNo, Obj, OldObj, MasterPid, PollInterval), - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable, - PollInterval); - - - #etsread_new_object{object=Obj} -> - new_object(KindOfTable, Node, LocalNode, TableId, DbsPid, - Obj, MasterPid, PollInterval), - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable, - PollInterval); - - - #etsread_delete_object{object=Obj} -> - delete_object(KindOfTable, Node, LocalNode, TableId, DbsPid, - Obj, MasterPid, PollInterval), - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable, - PollInterval); - - - #ip_dead_table{} -> - AutoPoll = case PollInterval of - infinity -> - false; - _Other -> - true - end, - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = AutoPoll}, - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, - KindOfTable, infinity); - - - #etsread_nodedown{} -> - AutoPoll = case PollInterval of - infinity -> - false; - _Other -> - true - end, - MasterPid ! #pc_nodedown{sender = self(), - automatic_polling = AutoPoll}, - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, - KindOfTable, infinity); - - - {error_msg_mode, Mode} -> - put(error_msg_mode, Mode), - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, TableId, KindOfTable, - PollInterval); - - - {'EXIT', Pid, Reason} -> - exit_signals({Pid, Reason}, MasterPid), - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, - TableId, KindOfTable, PollInterval) - end - - after PollInterval -> - %% Automatic polling must be on, otherwise these - %% lines would never be executed! - NewPollInterval = - case catch read_table(Node,LocalNode,TableId,KindOfTable,DbsPid) of - nodedown -> - MasterPid ! #pc_nodedown{sender = self(), - automatic_polling = true}, - infinity; - no_table -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = true}, - infinity; - mnesia_not_started -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = true}, - infinity; - {unexpected_error,_Reason} -> - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = true}, - infinity; - ElapsedMilliseconds -> - if - (ElapsedMilliseconds * 1000) >= PollInterval -> - infinity; - true -> - PollInterval - end - end, - deblocked_loop(MasterPid, DbsPid, Node, LocalNode, - TableId, KindOfTable, NewPollInterval) - end. - - - - - -exit_signals(ExitInfo, MasterPid) -> - case ExitInfo of - {MasterPid, _Reason} -> - exit(normal); - _Other -> - done - end. - - - - -update_object(KindOfTable, Node, LocalNode, TableId, DbsPid, KeyNo, Obj, OldObj, MasterPid, PollInterval) -> - AutoPoll = - case PollInterval of - infinity -> - false; - _Other -> - true - end, - case check_record_format(KindOfTable, Node, LocalNode, TableId, Obj) of - bad_format -> - DbsPid ! #etsread_update_object_cfm{sender = self(), - success = false}; - ok -> - %% Check that we are allowed to edit the table! - case catch update_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, KeyNo, - Obj, OldObj) of - - nodedown -> - DbsPid ! #etsread_update_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_nodedown{sender = self(), - automatic_polling = AutoPoll}; - - no_table -> - DbsPid ! #etsread_update_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = AutoPoll}; - - mnesia_not_started -> - DbsPid ! #etsread_update_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = AutoPoll}; - - - {unexpected_error,_Reason} -> - DbsPid ! #etsread_update_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = AutoPoll}; - - ok -> - DbsPid ! #etsread_update_object_cfm{sender = self(), - success = true} - end - end. - - - - - -update_object2(ets, Node, LocalNode, Tab, _DbsPid, KeyNo, Obj, OldObj) -> - %% We shall update a specific object! If the table is a 'set' table, - %% it is just to insert the altered object. However, if the table - %% is a 'bag', or a 'duplicate_bag', we first have to remove the - %% old object, and then insert the altered one. - %% But, we aren't finished with that... we also want to preserve - %% the time order, meaning we have to delete *ALL* objects having the - %% very same key, and then insert them again! (Actually we would have - %% to do this anyhow, due to limitations in the interface functions, - %% but this remark has to be noted!) - OldKey = element(KeyNo, OldObj), - InsertList = - case tv_ets_rpc:info(Node, LocalNode, Tab, type) of - set -> - %% Have to remove old object, because the key may be what's changed. - tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey), - [Obj]; - ordered_set -> - %% Have to remove old object, because the key may be what's changed. - tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey), - [Obj]; - _Other -> %% 'bag' or 'duplicate_bag' - OldList = tv_ets_rpc:lookup(Node, LocalNode, Tab, OldKey), - tv_ets_rpc:delete(Node, LocalNode, Tab, OldKey), - %% Have to beware of duplicate_bag tables, - %% i.e., the same object may occur more than - %% once, but we only want to replace it once! - {_Replaced, TmpList} = - lists:foldl( - fun(Data, {Replaced,Acc}) when Data =/= OldObj -> - {Replaced, [Data | Acc]}; - (_Data, {Replaced,Acc}) when not Replaced -> - {true, [Obj | Acc]}; - (Data, {Replaced,Acc}) -> - {Replaced, [Data | Acc]} - end, - {false, []}, - OldList), - lists:reverse(TmpList) - end, - lists:foreach(fun(H) -> - tv_ets_rpc:insert(Node, LocalNode, Tab, H) - end, - InsertList), - ok; -update_object2(mnesia, Node, LocalNode, Tab, _DbsPid, KeyNo, Obj, OldObj) -> - OldKey = element(KeyNo, OldObj), - InsertList = - case tv_mnesia_rpc:table_info(Node, LocalNode, Tab, type) of - set -> - tv_mnesia_rpc:transaction( - Node, - LocalNode, - fun() -> - mnesia:delete(Tab,OldKey,write) - end), - [Obj]; - ordered_set -> - tv_mnesia_rpc:transaction( - Node, - LocalNode, - fun() -> - mnesia:delete(Tab,OldKey,write) - end), - [Obj]; - _Other -> %% 'bag' or 'duplicate_bag' - {atomic, OldList} = - tv_mnesia_rpc:transaction( - Node, - LocalNode, - fun() -> - mnesia:read(Tab,OldKey,read) - end), - %% We can't use mnesia:delete_object here, because - %% time order wouldn't be preserved then!!! - tv_mnesia_rpc:transaction( - Node, - LocalNode, - fun() -> - mnesia:delete(Tab,OldKey,write) - end), - ChangeFun = - fun(H) when H =:= OldObj -> - Obj; - (H) -> - H - end, - [ChangeFun(X) || X <- OldList] - end, - lists:foreach(fun(H) -> - tv_mnesia_rpc:transaction( - Node, - LocalNode, - fun() -> - %% This mnesia call shall not be distributed, - %% since the transaction sees to that it is - %% executed on the right node!!! - mnesia:write(Tab,H,write) - end) - end, - InsertList), - ok. - - - - - - -delete_object(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj, MasterPid, PollInterval) -> - AutoPoll = - case PollInterval of - infinity -> - false; - _Other -> - true - end, - case catch delete_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj) of - - nodedown -> - DbsPid ! #etsread_delete_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_nodedown{sender = self(), - automatic_polling = AutoPoll}; - - no_table -> - DbsPid ! #etsread_delete_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = AutoPoll}; - - mnesia_not_started -> - DbsPid ! #etsread_delete_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = AutoPoll}; - - {unexpected_error,_Reason} -> - DbsPid ! #etsread_delete_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = AutoPoll}; - - ok -> - DbsPid ! #etsread_delete_object_cfm{sender = self(), - success = true} - end. - - - - -delete_object2(ets, Node, LocalNode, Tab, _DbsPid, Obj) -> - KeyNo = tv_ets_rpc:info(Node, LocalNode, Tab, keypos), - Key = element(KeyNo, Obj), - InsertList = - case tv_ets_rpc:info(Node, LocalNode, Tab, type) of - set -> - %% Have to remove old object, because the key may be what's changed. - tv_ets_rpc:delete(Node, LocalNode, Tab, Key), - []; - ordered_set -> - %% Have to remove old object, because the key may be what's changed. - tv_ets_rpc:delete(Node, LocalNode, Tab, Key), - []; - _Other -> %% 'bag' or 'duplicate_bag' - OldList = tv_ets_rpc:lookup(Node, LocalNode, Tab, Key), - tv_ets_rpc:delete(Node, LocalNode, Tab, Key), - OldList -- [Obj] - end, - - lists:foreach(fun(H) -> - tv_ets_rpc:insert(Node, LocalNode, Tab, H) - end, - InsertList), - ok; -delete_object2(mnesia, Node, LocalNode, Tab, _DbsPid, Obj) -> - tv_mnesia_rpc:transaction( - Node, - LocalNode, - fun() -> - %% This mnesia call shall not be distributed, - %% since the transaction sees to that it is - %% executed on the right node!!! - mnesia:delete_object(Tab,Obj,write) - end), - ok. - - - - - -new_object(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj, MasterPid, PollInterval) -> - AutoPoll = - case PollInterval of - infinity -> - false; - _Other -> - true - end, - case check_record_format(KindOfTable, Node, LocalNode, TableId, Obj) of - bad_format -> - DbsPid ! #etsread_new_object_cfm{sender = self(), - success = false}; - ok -> - %% Check that we are allowed to edit the table! - case catch new_object2(KindOfTable, Node, LocalNode, TableId, DbsPid, Obj) of - - nodedown -> - DbsPid ! #etsread_new_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_nodedown{sender = self(), - automatic_polling = AutoPoll}; - - no_table -> - DbsPid ! #etsread_new_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = AutoPoll}; - - mnesia_not_started -> - DbsPid ! #etsread_new_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = AutoPoll}; - - {unexpected_error,_Reason} -> - DbsPid ! #etsread_new_object_cfm{sender = self(), - success = false}, - MasterPid ! #pc_dead_table{sender = self(), - automatic_polling = AutoPoll}; - - ok -> - DbsPid ! #etsread_new_object_cfm{sender = self(), - success = true} - end - end. - - - - - -new_object2(ets, Node, LocalNode, Tab, _DbsPid, Obj) -> - tv_ets_rpc:insert(Node, LocalNode, Tab, Obj), - ok; -new_object2(mnesia, Node, LocalNode, Tab, _DbsPid, Obj) -> - tv_mnesia_rpc:transaction( - Node, - LocalNode, - fun() -> - %% This mnesia call shall not be distributed, - %% since the transaction sees to that it is - %% executed on the right node!!! - mnesia:write(Tab,Obj,write) - end), - ok. - - - - - -check_record_format(mnesia, Node, LocalNode, Tab, Obj) -> - Arity = tv_mnesia_rpc:table_info(Node, LocalNode, Tab, arity), - case size(Obj) of - Arity -> - ok; - _Other -> - gs:window(etsreadwin, gs:start(), []), - case get(error_msg_mode) of - normal -> - tv_utils:notify(etsreadwin, "TV Notification", - ["The record is not complete,", - "too few fields are specified!"]); - haiku -> - tv_utils:notify(etsreadwin, "TV Notification", - ["The attempt to change", - "The specified record size", - "Is simply ignored."]) - end, - gs:destroy(etsreadwin), - bad_format - end; -check_record_format(ets, _Node, _LocalNode, _Tab, _Obj) -> - ok. - - - - - - - -read_table(Node, LocalNode, Tab, KindOfTable, DbsPid) -> - T1 = time(), - - {TableContent, ListOfKeys} = - case KindOfTable of - ets -> - {tv_ets_rpc:tab2list(Node, LocalNode, Tab), - [tv_ets_rpc:info(Node, LocalNode, Tab, keypos)] - }; - mnesia -> - %% It may be tempting to use Mnesia event subscription, - %% but will this really save the day? The main drawback - %% is that we will then have to update the table copy we - %% store internally in two different ways: one for the - %% Mnesia tables, and one for the ETS tables. Also, if - %% the Mnesia tables are frequently updated, this will - %% cause TV to work all the time too (either updating the - %% table copy for each inserted/deleted object, or storing - %% these objects until polling is ordered). To make this - %% work smoothly requires a bit of work... - %% The second drawback is that it doesn't seem clear in all - %% circumstances how the subscription actually works - i.e., - %% if we only use subscriptions, can we actually be sure that - %% the *real* state of the table is the same as the one kept - %% in TV? For example, imagine the scenario that Mnesia is - %% stopped, all Mnesia directories are removed (from the UNIX - %% shell), and then Mnesia once again is started. The first - %% problem is that we have to check for start/stop of Mnesia, - %% the second is that we then have to rescan the actual table. - %% The logic for this may require som effort to write! - %% Also, what will happen if the table is killed/dies? - %% Will we get messages for each element in the table? - %% (I havent't checked this last issue, this is just som thoughts.) - %% And generally, there is always a risk that a message is lost, - %% which will result in TV showing an erroneous table content. - %% - %% All in all, using Mnesia subscriptions *may* be a sub-optimization. - %% The current solution works fine, is also easy to control, and is - %% mainly the same for both ETS and Mnesia tables. - %% My suggestion is that it is used until someone actually complains - %% about the polling time being too long for huge tables! :-) - %% (However, it shall be emphasized that it is this module that - %% actually polls the Mnesia/ETS tables, meaning that it is - %% mainly this module that has to be modified, should the usage of - %% subscriptions be desired. The other module that has to be modified - %% is the one maintaining the internal copy of the table.) - WildPattern = tv_mnesia_rpc:table_info(Node,LocalNode,Tab,wild_pattern), - {atomic, Content} = - tv_mnesia_rpc:transaction( - Node, - LocalNode, - fun() -> - %% This mnesia call shall not be distributed, - %% since the transaction sees to that it is - %% executed on the right node!!! - mnesia:match_object(Tab, WildPattern, read) - end), - {Content, [2 | tv_mnesia_rpc:table_info(Node, LocalNode,Tab, index)]} - end, - - T2 = time(), - - ElapsedTime = compute_elapsed_seconds(T1, T2), - - DbsPid ! #dbs_new_data{sender = self(), - data = TableContent, - keys = ListOfKeys, - time_to_read_table = ElapsedTime - }, - - ElapsedTime. - - - - - - - -compute_elapsed_seconds({H1, M1, S1}, {H2, M2, S2}) -> - ElapsedHours = get_time_diff(hours, H1, H2), - ElapsedMinutes = get_time_diff(minutes, M1, M2), - ElapsedSeconds = get_time_diff(seconds, S1, S2), - (ElapsedHours * 3600) + (ElapsedMinutes * 60) + ElapsedSeconds + 1. - - - - - -get_time_diff(_Type, T1, T2) when T1 =< T2 -> - T2 - T1; -get_time_diff(hours, T1, T2) -> - T2 + 24 - T1; -get_time_diff(minutes, T1, T2) -> - T2 + 60 - T1; -get_time_diff(seconds, T1, T2) -> - T2 + 60 - T1. diff --git a/lib/tv/src/tv_info.erl b/lib/tv/src/tv_info.erl deleted file mode 100644 index c744888c38..0000000000 --- a/lib/tv/src/tv_info.erl +++ /dev/null @@ -1,884 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_info). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,frame,2}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,listbox,2}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([info/6 - ]). - - --include("tv_int_def.hrl"). --include("tv_int_msg.hrl"). - - - - --define(DEFAULT_BG_COLOR, {217, 217, 217}). - - --record(card_field_ids, {parent_pid, - window_id, - window_frame, - table_id, - table_type, - table_name, - named_table, - owner_pid, - owner_name, - bag_or_set, - arity, - attributes, - wild_pattern, - keypos, - index, - snmp, - protection, - size, - memory, - storage_type, - disc_copies, - where_to_read, - ram_copies, - disc_only_copies, - where_to_write, - checkpoints, - node - }). - - - --define(WINDOW_WIDTH, 580). --define(WINDOW_HEIGHT, 430). - - - --define(MNESIA_INFO_ITEMS, [type, - arity, - attributes, - index, - size, - memory, - storage_type, - where_to_read, - disc_copies, - disc_only_copies, - ram_copies, - where_to_write, - checkpoints - ]). - - - - -info(Master, Node, LocalNode, TabId, TabType, ErrMsgMode) -> - process_flag(trap_exit,true), - WinId = create_window(), - {CardIds, MaskLabel} = init(Master, Node, LocalNode, TabId, TabType, WinId), - put(error_msg_mode, ErrMsgMode), - gs:config(WinId, [{map, true}]), - loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType). - - - - - - -create_window() -> - WinWidth = ?WINDOW_WIDTH, - WinHeight = ?WINDOW_HEIGHT, - Win = gs:window(win, gs:start(), [{width, WinWidth}, - {height, WinHeight}, - {bg, ?DEFAULT_BG_COLOR}, - {destroy, true}, - {configure, true}, - {keypress, true} - ]), - - MenubarId = gs:create(menubar, Win, [{bg, ?DEFAULT_BG_COLOR} - ]), - Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}, % firebrick - {label, {text, " File "}}, - {underline, 1} - ]), - Obutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}, % firebrick - {label, {text, " Options "}}, - {underline, 1} - ]), - - % Create the actual menu! - FMenu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}]), - OMenu = gs:create(menu, Obutt, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}]), - gs:create(menuitem, FMenu, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}, - {label, {text, " Close Ctrl-C "}}, - {data, close_menu}, - {underline, 1} - ]), - gs:create(menuitem, OMenu, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}, - {label, {text, " Refresh Ctrl-R "}}, - {data, update}, - {underline, 1} - ]), - Win. - - - - - - - - -init(Master, Node, LocalNode, TabId, TabType, WinId) -> - WinWidth = ?WINDOW_WIDTH, - WinHeight = ?WINDOW_HEIGHT, - - WinFrame = gs:frame(WinId, [{width, WinWidth}, - {height, WinHeight}, - {x, 0}, - {y, 30}, - {bg, ?DEFAULT_BG_COLOR}, - {bw, 0} - ]), - - TableIdFlap = create_flap(1, "Table Id", WinFrame), - BasicSettingsFlap = create_flap(2, "Basic Settings", WinFrame), - SizeFlap = create_flap(3, "Size", WinFrame), - StorageFlap = create_flap(4, "Storage", WinFrame), - - TableIdCard = create_card(WinFrame, TableIdFlap), - BasicSettingsCard = create_card(WinFrame, BasicSettingsFlap), - SizeCard = create_card(WinFrame, SizeFlap), - StorageCard = create_card(WinFrame, StorageFlap), - - - set_flap_label(TableIdFlap, "Table Id"), - set_flap_label(BasicSettingsFlap, "Basic Settings"), - set_flap_label(SizeFlap, "Size"), - set_flap_label(StorageFlap, "Storage"), - - - gs:config(TableIdCard, [raise]), - - CardIds = print_cards(TabType, TableIdCard, BasicSettingsCard, SizeCard, StorageCard), - - {_CardId, FirstMaskXpos} = gs:read(TableIdFlap, data), - Mask = gs:label(WinFrame, [{width, gs:read(TableIdFlap, width) - 2 * gs:read(TableIdFlap, bw) + 1}, - {height, gs:read(TableIdCard, bw)}, - {x, FirstMaskXpos}, - {y, gs:read(TableIdCard, y)}, - {bg, ?DEFAULT_BG_COLOR} - ]), - - update_info_flaps(TabType, Node, LocalNode, TabId, CardIds, Master), - {CardIds#card_field_ids{parent_pid = Master, - window_id = WinId, - window_frame = WinFrame}, Mask}. - - - - - -check_node(OldNode, LocalNode) -> - HomeNode = node(), - case net_adm:ping(OldNode) of - pong -> - OldNode; - pang when LocalNode -> - %% The system has gone either distributed or undistributed. - %% No matter which, HomeNode tells the current correct node. - HomeNode; - pang -> - OldNode - end. - - - - - - -update_data_field(notext, {label, Id}) -> - gs:config(Id, [{label, {text, "" }}]); -update_data_field(notext, {listbox, Id}) -> - gs:config(Id, [{items, []}]); -update_data_field({Data}, {label, Id}) -> - gs:config(Id, [{label, {text, " " ++ lists:flatten(io_lib:write(Data))}}]); -update_data_field({Data}, {listbox, Id}) -> - gs:config(Id, [{items, lists:map(fun(E) -> " " ++ lists:flatten(io_lib:write(E)) - end, Data)}]). - - - - -print_info(mnesia, Node, LocalNode, TabId, CardIds) -> - update_data_field({mnesia}, - CardIds#card_field_ids.table_type), - update_data_field({TabId}, - CardIds#card_field_ids.table_name), - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, type)}, - CardIds#card_field_ids.bag_or_set), - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, arity) - 1}, - CardIds#card_field_ids.arity), - - AttributesList = tv_mnesia_rpc:table_info(Node, LocalNode, TabId, attributes), - update_data_field({AttributesList}, - CardIds#card_field_ids.attributes), - update_data_field({lists:map(fun(N) -> - lists:nth(N - 1, AttributesList) - end, - [2] ++ tv_mnesia_rpc:table_info(Node, - LocalNode, - TabId, - index) - ) - }, - CardIds#card_field_ids.index), - - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, size)}, - CardIds#card_field_ids.size), - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, memory)}, - CardIds#card_field_ids.memory), - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, storage_type)}, - CardIds#card_field_ids.storage_type), - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, where_to_read)}, - CardIds#card_field_ids.where_to_read), - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, disc_copies)}, - CardIds#card_field_ids.disc_copies), - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, disc_only_copies)}, - CardIds#card_field_ids.disc_only_copies), - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, ram_copies)}, - CardIds#card_field_ids.ram_copies), - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, where_to_write)}, - CardIds#card_field_ids.where_to_write), - update_data_field({tv_mnesia_rpc:table_info(Node, LocalNode, TabId, checkpoints)}, - CardIds#card_field_ids.checkpoints), - {ok, TabId}; -print_info(ets, Node, LocalNode, TabId, CardIds) -> - update_data_field({ets}, - CardIds#card_field_ids.table_type), - update_data_field({TabId}, - CardIds#card_field_ids.table_id), - TabName = tv_ets_rpc:info(Node, LocalNode, TabId, name), - update_data_field({TabName}, - CardIds#card_field_ids.table_name), - update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, named_table)}, - CardIds#card_field_ids.named_table), - - OwnerPid = tv_ets_rpc:info(Node, LocalNode, TabId, owner), - OwnerNameSearchResult = lists:keysearch(registered_name, - 1, - rpc:block_call(Node, - erlang, - process_info, - [OwnerPid])), - OwnerName = case OwnerNameSearchResult of - false -> - notext; - {value, {registered_name, WantedName}} -> - {WantedName} - end, - update_data_field({OwnerPid}, - CardIds#card_field_ids.owner_pid), - update_data_field(OwnerName, - CardIds#card_field_ids.owner_name), - - update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, keypos)}, - CardIds#card_field_ids.keypos), - update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, type)}, - CardIds#card_field_ids.bag_or_set), - update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, protection)}, - CardIds#card_field_ids.protection), - update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, size)}, - CardIds#card_field_ids.size), - update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, memory)}, - CardIds#card_field_ids.memory), - update_data_field({tv_ets_rpc:info(Node, LocalNode, TabId, node)}, - CardIds#card_field_ids.node), - {ok, TabName}. - - - - - - -print_cards(mnesia, Card1, Card2, Card3, Card4) -> - create_card_text(1, "Table Type:", Card1), - create_card_text(2, "Table Name:", Card1), - - create_card_text(1, "Table Type:", Card2), - create_card_text(2, "Number of Attributes:", Card2), -% create_card_text(3, "Attribute Names:", Card2), -% create_card_text(4, "Index Positions:", Card2), - - create_card_text(1, "Number of Elements Stored:", Card3), - create_card_text(2, "Number of Words Allocated:", Card3), - - create_card_text(1, "Local Storage Type:", Card4), - create_card_text(2, "Table Readable at Node:", Card4), -% create_card_text(3, "Disc Copy Nodes:", Card4), -% create_card_text(4, "Disc Copy Only Nodes:", Card4), -% create_card_text(5, "RAM Copy Nodes:", Card4), -% create_card_text(6, "Active Table Replica Nodes:", Card4), -% create_card_text(7, "Active Checkpoints:", Card4), - - {AttributesId, IndexId} = create_special_fields(mnesia, size_card, Card2), - - - {DiscCopiesId, DiscOnlyCopiesId, RamCopiesId, WhereToWriteId, CheckpointsId} = - create_special_fields(mnesia, storage_card, Card4), - - #card_field_ids{table_name = {label, create_card_data_field(2, Card1)}, - table_type = {label, create_card_data_field(1, Card1)}, - bag_or_set = {label, create_card_data_field(1, Card2)}, - arity = {label, create_card_data_field(2, Card2)}, - attributes = AttributesId, - index = IndexId, - size = {label, create_card_data_field(1, Card3)}, - memory = {label, create_card_data_field(2, Card3)}, - storage_type = {label, create_card_data_field(1, Card4)}, - where_to_read = {label, create_card_data_field(2, Card4)}, - disc_copies = DiscCopiesId, - disc_only_copies = DiscOnlyCopiesId, - ram_copies = RamCopiesId, - where_to_write = WhereToWriteId, - checkpoints = CheckpointsId - }; -print_cards(ets, Card1, Card2, Card3, Card4) -> - create_card_text(1, "Table Type:", Card1), - create_card_text(2, "Table Id:", Card1), - create_card_text(3, "Table Name:", Card1), - create_card_text(4, "Table Name Registered:", Card1), - create_card_text(5, "Process Owning the Table:", Card1), - create_card_text(6, "Name of Owning Process:", Card1), - - create_card_text(1, "Index Position:", Card2), - create_card_text(2, "Table Type:", Card2), - create_card_text(3, "Protection Mode:", Card2), - - create_card_text(1, "Number of Elements Stored:", Card3), - create_card_text(2, "Number of Words Allocated:", Card3), - - create_card_text(1, "Table Stored at Node:", Card4), - - #card_field_ids{table_id = {label, create_card_data_field(2, Card1)}, - table_type = {label, create_card_data_field(1, Card1)}, - table_name = {label, create_card_data_field(3, Card1)}, - named_table = {label, create_card_data_field(4, Card1)}, - owner_pid = {label, create_card_data_field(5, Card1)}, - owner_name = {label, create_card_data_field(6, Card1)}, - - keypos = {label, create_card_data_field(1, Card2)}, - bag_or_set = {label, create_card_data_field(2, Card2)}, - protection = {label, create_card_data_field(3, Card2)}, - - size = {label, create_card_data_field(1, Card3)}, - memory = {label, create_card_data_field(2, Card3)}, - - node = {label, create_card_data_field(1, Card4)} - }. - - - - - - -create_special_fields(mnesia, size_card, CardId) -> - LabelWidth = 195, - LabelHeight = 24, - ListboxWidth = 210, - ListboxHeight = 160, - VerticalSpacing = 20, - LXpos = 30, - RXpos = 330, - Ypos = 40 + (LabelHeight + VerticalSpacing) * 2 + 25, - gs:label(CardId, [{width, LabelWidth}, - {height, LabelHeight}, - {x, LXpos}, - {y, Ypos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, center}, - {label, {text, "Attribute Names:"}} - ]), - - gs:label(CardId, [{width, LabelWidth}, - {height, LabelHeight}, - {x, RXpos}, - {y, Ypos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, center}, - {label, {text, "Attributes Used as Indices:"}} - ]), - - AttributesId = gs:listbox(CardId, [{width, ListboxWidth}, - {height, ListboxHeight}, - {x, LXpos}, - {y, Ypos + LabelHeight - 3}, - {bg, {255, 255, 255}}, - {fg, {0, 0, 0}}, - {hscroll, bottom}, - {vscroll, right}, - {selectmode, single}, - {click, true}, - {doubleclick, true}, - {data, listbox} - ]), - - IndexId = gs:listbox(CardId, [{width, ListboxWidth}, - {height, ListboxHeight}, - {x, RXpos}, - {y, Ypos + LabelHeight - 3}, - {bg, {255, 255, 255}}, - {fg, {0, 0, 0}}, - {hscroll, bottom}, - {vscroll, right}, - {selectmode, single}, - {click, true}, - {doubleclick, true}, - {data, listbox} - ]), - - {{listbox, AttributesId}, - {listbox, IndexId} - }; -create_special_fields(mnesia, storage_card, CardId) -> - LabelWidth = 155, - LabelHeight = 24, - ListboxHeight = 80, - ListboxWidth = 170, - VerticalSpacing = 20, - LXpos = 10, - MXpos = 197, - RXpos = 385, - % Y-positions for upper and lower row. - UYpos = 40 + (LabelHeight + VerticalSpacing) * 2, - LYpos = UYpos + ListboxHeight + 37, - gs:label(CardId, [{width, LabelWidth}, - {height, LabelHeight}, - {x, LXpos}, - {y, UYpos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, center}, - {label, {text, "Disc Copy Nodes:"}} - ]), - - gs:label(CardId, [{width, LabelWidth}, - {height, LabelHeight}, - {x, MXpos}, - {y, UYpos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, center}, - {label, {text, "Disc Only Copy Nodes:"}} - ]), - - gs:label(CardId, [{width, LabelWidth}, - {height, LabelHeight}, - {x, RXpos}, - {y, UYpos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, center}, - {label, {text, "RAM Copy Nodes:"}} - ]), - - - gs:label(CardId, [{width, LabelWidth}, - {height, LabelHeight}, - {x, LXpos}, - {y, LYpos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, center}, - {label, {text, "Table Replica Nodes:"}} - ]), - - gs:label(CardId, [{width, LabelWidth}, - {height, LabelHeight}, - {x, MXpos}, - {y, LYpos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, center}, - {label, {text, "Active Checkpoints:"}} - ]), - - - DiscCopiesId = gs:listbox(CardId, [{width, ListboxWidth}, - {height, ListboxHeight}, - {x, LXpos}, - {y, UYpos + LabelHeight - 3}, - {bg, {255, 255, 255}}, - {fg, {0, 0, 0}}, - {hscroll, bottom}, - {vscroll, right}, - {selectmode, single}, - {click, true}, - {doubleclick, true}, - {data, listbox} - ]), - - DiscCopiesOnlyId = gs:listbox(CardId, [{width, ListboxWidth}, - {height, ListboxHeight}, - {x, MXpos}, - {y, UYpos + LabelHeight - 3}, - {bg, {255, 255, 255}}, - {fg, {0, 0, 0}}, - {hscroll, bottom}, - {vscroll, right}, - {selectmode, single}, - {click, true}, - {doubleclick, true}, - {data, listbox} - ]), - - RamCopiesId = gs:listbox(CardId, [{width, ListboxWidth}, - {height, ListboxHeight}, - {x, RXpos}, - {y, UYpos + LabelHeight - 3}, - {bg, {255, 255, 255}}, - {fg, {0, 0, 0}}, - {hscroll, bottom}, - {vscroll, right}, - {selectmode, single}, - {click, true}, - {doubleclick, true}, - {data, listbox} - ]), - - - - WhereToWriteId = gs:listbox(CardId, [{width, ListboxWidth}, - {height, ListboxHeight}, - {x, LXpos}, - {y, LYpos + LabelHeight - 3}, - {bg, {255, 255, 255}}, - {fg, {0, 0, 0}}, - {hscroll, bottom}, - {vscroll, right}, - {selectmode, single}, - {click, true}, - {doubleclick, true}, - {data, listbox} - ]), - - CheckpointsId = gs:listbox(CardId, [{width, ListboxWidth}, - {height, ListboxHeight}, - {x, MXpos}, - {y, LYpos + LabelHeight - 3}, - {bg, {255, 255, 255}}, - {fg, {0, 0, 0}}, - {hscroll, bottom}, - {vscroll, right}, - {selectmode, single}, - {click, true}, - {doubleclick, true}, - {data, listbox} - ]), - - {{listbox, DiscCopiesId}, - {listbox, DiscCopiesOnlyId}, - {listbox, RamCopiesId}, - {listbox, WhereToWriteId}, - {listbox, CheckpointsId} - }. - - - - - - - -create_card_data_field(N, ParentId) -> - Width = 345, - Height = 24, - VerticalSpacing = 20, - Xpos = 210, - Ypos = 40 + (Height + VerticalSpacing) * (N - 1), - - BgFrame = gs:frame(ParentId, [{width, Width}, - {height, Height}, - {x, Xpos}, - {y, Ypos}, - {bg, {0, 0, 0}}, - {bw, 0} - ]), - gs:label(BgFrame, [{width, Width - 2}, - {height, Height - 2}, - {x, 1}, - {y, 1}, - {bg, {255, 255, 255}}, - {fg, {0, 0, 0}}, - {align, w} - ]). - - - - - - -create_card_text(N, Text, ParentId) -> - LabelWidth = 205, - LabelHeight = 24, - VerticalSpacing = 20, - Xpos = 10, - Ypos = 40 + (LabelHeight + VerticalSpacing) * (N - 1), - gs:label(ParentId, [{width, LabelWidth}, - {height, LabelHeight}, - {x, Xpos}, - {y, Ypos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, w}, - {label, {text, Text}} - ]). - - - - -create_card(ParentId, FlapId) -> - CardId = gs:frame(ParentId, [{width, 570}, - {height, 360}, - {x, 5}, - {y, 35}, - {bg, ?DEFAULT_BG_COLOR}, - {bw, 2} - ]), - FlapXpos = gs:read(FlapId, data), - gs:config(FlapId, [{data, {CardId, FlapXpos}} - ]), - CardId. - - - - - -set_flap_label(ParentId, Text) -> - Bw = gs:read(ParentId, bw), % It is assumed that the parent is a frame! :-) - Width = gs:read(ParentId, width) - 2 * Bw - 2, - Height = gs:read(ParentId, height) - 2 * Bw - 6, - Xpos = 0, - Ypos = 0, - Data = gs:read(ParentId, data), - - gs:label(ParentId, [{width, Width}, - {height, Height}, - {x, Xpos}, - {y, Ypos}, - % {fg, {178, 34, 34}}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {label, {text, Text}}, - {align, center}, - {buttonpress, true}, - {data, Data} - ]). - - - -create_flap(N, _Text, ParentId) -> - Width = 120, - Height = 40, - Spacing = 2, - FirstXpos = 5, - Xpos = FirstXpos + ((Width + Spacing) * (N - 1)), - Ypos = 5, - BorderWidth = 2, - - gs:frame(ParentId, [{width, Width}, - {height, Height}, - {x, Xpos}, - {y, Ypos}, - {bg, ?DEFAULT_BG_COLOR}, - {bw, BorderWidth}, - {cursor, hand}, - {buttonpress, true}, - {data, Xpos + BorderWidth} - ]). - - - -update_info_flaps(TabType, Node, LocalNode, TabId, CardIds, MasterPid) -> - case catch print_info(TabType, Node, LocalNode, TabId, CardIds) of - {ok, TabName} -> - WinTitle = tv_pc_menu_handling:get_window_title(TabType,Node,TabId,TabName), - gs:config(win, [{title, "[TV] " ++ WinTitle}]), - done; - nodedown -> - nodedown; - no_table -> - gs:config(win, [beep]), - case get(error_msg_mode) of - normal -> - Msg = ["The table " ++ lists:flatten(io_lib:write(TabId)) ++ " on node", - lists:flatten(io_lib:write(Node)) ++ " no longer exists!"], - tv_utils:notify(win, "TV Notification", Msg); - haiku -> - Msg = ["Three things are certain:", - "Death, taxes, and lost tables.", - "Guess which has occurred."], - tv_utils:notify(win, "TV Notification", Msg) - end, - MasterPid ! #ip_dead_table{sender = self()}; - mnesia_not_started -> - gs:config(win, [beep]), - case get(error_msg_mode) of - normal -> - Msg = ["The table " ++ lists:flatten(io_lib:write(TabId)) ++ " on node", - lists:flatten(io_lib:write(Node)) ++ " no longer exists!"], - tv_utils:notify(win, "TV Notification", Msg); - haiku -> - Msg = ["A table that big?", - "It might be very useful.", - "But now it is gone."], - tv_utils:notify(win, "TV Notification", Msg) - end, - MasterPid ! #ip_dead_table{sender = self()}; - {unexpected_error,Reason} -> - io:format("Unexpected error: ~p~n", [Reason]); - _Other -> - io:format("Unexpected return value: ~p~n", [_Other]), - done - end. - - - - -loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType) -> - receive - #info_update_table_info{sender = Sender} -> - NewNode = check_node(Node, LocalNode), - update_info_flaps(TabType, NewNode, LocalNode, TabId, CardIds, Sender), - loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType); - - - #info_raise_window{sender = Sender} -> - gs:config(CardIds#card_field_ids.window_id, [raise]), - NewNode = check_node(Node, LocalNode), - chk(update_info_flaps(TabType, NewNode, LocalNode, TabId, CardIds, Sender)), - loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType); - - - #info_quit{} -> - exit(normal); - - {gs, _FlapId, buttonpress, {CardId, Xpos}, [1 | _]} -> - gs:config(CardId, [raise - ]), - gs:config(MaskLabel, [raise, - {x, Xpos} - ]), - loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); - - {gs, _Id, buttonpress, {_CardId, _Xpos}, _Args} -> - loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); - - {gs, _LblId, enter, _Data, _Args} -> - loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); - - {gs, WinId, configure, _Data, _Args} -> - gs:config(WinId, [{width, ?WINDOW_WIDTH}, - {height, ?WINDOW_HEIGHT} - ]), - loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); - - {gs, ListboxId, click, listbox, _Args} -> - gs:config(ListboxId, [{selection, clear}]), - loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); - - {gs, ListboxId, doubleclick, listbox, _Args} -> - gs:config(ListboxId, [{selection, clear}]), - loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); - - {gs, _Id, click, update, _Args} -> - NewNode = check_node(Node, LocalNode), - chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds, - CardIds#card_field_ids.parent_pid)), - loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType); - - {gs, _Id, keypress, _, [r, _, 0, 1 | _]} -> - NewNode = check_node(Node, LocalNode), - chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds, - CardIds#card_field_ids.parent_pid)), - loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType); - - {gs, _Id, keypress, _, ['R', _, 1, 1 | _]} -> - NewNode = check_node(Node, LocalNode), - chk(update_info_flaps(TabType,NewNode,LocalNode,TabId,CardIds, - CardIds#card_field_ids.parent_pid)), - loop(CardIds, MaskLabel, NewNode, LocalNode, TabId, TabType); - - {gs, _Id, click, close_menu, _Args} -> - exit(normal); - - {gs, _Id, keypress, _, [c, _, 0, 1 | _]} -> - exit(normal); - - {gs, _Id, keypress, _, ['C', _, 1, 1 | _]} -> - exit(normal); - - {gs, _Id, destroy, _Data, _Args} -> - exit(normal); - - {'EXIT', _Pid, _Reason} -> - exit(normal); - - {error_msg_mode, Mode} -> - put(error_msg_mode, Mode), - loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType); - - _Other -> - loop(CardIds, MaskLabel, Node, LocalNode, TabId, TabType) - end. - - - - - - -chk(nodedown) -> - gs:config(win, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(win, "TV Notification", - ["The node is down, and the", - "table cannot be reached."]); - haiku -> - ErrMsg1 = ["With searching comes loss", - "And the presence of absence:", - "Node is down."], - tv_utils:notify(win, "TV Notification", ErrMsg1) - end; -chk(_Other) -> - done. - diff --git a/lib/tv/src/tv_int_def.hrl b/lib/tv/src/tv_int_def.hrl deleted file mode 100644 index 6d4263c51b..0000000000 --- a/lib/tv/src/tv_int_def.hrl +++ /dev/null @@ -1,56 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Internal definitions for the table tool as a whole. -%%% -%%%********************************************************************* - --define(COMM_FUNC_FILE, tv_comm_func). - --define(ITEMS_TO_DISPLAY, 35). - - --define(DEFAULT_BACKGROUND_COLOR, {255, 255, 255}). % white - - -% Colors used for marking updates. - --define(BLACK, { 0, 0, 0}). - --define(RED1, {255, 0, 0}). --define(RED2, {255, 100, 100}). --define(RED3, {255, 150, 150}). --define(RED4, {255, 200, 200}). --define(RED5, {235, 217, 217}). - - --define(GREEN1, { 0, 255, 0}). --define(GREEN2, {115, 255, 135}). --define(GREEN3, {125, 225, 150}). --define(GREEN4, {170, 225, 185}). --define(GREEN5, {195, 219, 202}). - --define(DEFAULT_BTN_COLOR, {217, 217, 217}). - - - - - - - diff --git a/lib/tv/src/tv_int_msg.hrl b/lib/tv/src/tv_int_msg.hrl deleted file mode 100644 index 75ce8eca3b..0000000000 --- a/lib/tv/src/tv_int_msg.hrl +++ /dev/null @@ -1,504 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: File containing all messages used internally -%%% between the various table tool components. -%%% -%%%********************************************************************* - - -%%%********************************************************************* -%%% MESSAGES OWNED BY PC -%%%********************************************************************* - - - --record(pc_raise_window, {sender}). - - - --record(pc_menu_msg, {sender, - data}). - - - --record(pc_win_conf, {sender, - width, - height}). - - - --record(pc_show_table_info, {sender}). - - - --record(pc_poll_table, {sender}). - - - --record(pc_select, {sender}). - - - --record(pc_help, {sender}). - - - --record(pc_set_sorting_mode, {sender, - sorting, % 'true' or 'false' - reverse, % 'true' or 'false', - sort_key_no = 1 - }). - - - --record(pc_set_sorting_mode_cfm, {sender, - sort_key_no - }). - - - --record(pc_marked_row, {sender, - row_no, - object, - color - }). - - - --record(pc_data_req, {sender, - element, - nof_elements - }). - - - --record(pc_resend_data, {sender}). - - - - --record(pc_data, {sender, - scale_pos, % vertical scale - scale_range, % vertical scale - max_elem_size, - list_range, - elementlist, - marked_row, - list_of_keys, - color}). - - - - --record(pc_list_info, {sender, - lists_as_strings}). - - - --record(pc_dead_table, {sender, - automatic_polling}). - - - --record(pc_nodedown, {sender, - automatic_polling}). - - - --record(pc_search_req, {sender - }). - - - - -%%%********************************************************************* -%%% MESSAGES OWNED BY PD -%%%********************************************************************* - - - --record(pd_win_conf, {sender, - width, - height}). - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: sender: Pid of the sender of the message. -%% win: Id of window to create canvas and scale in. -%% win_width: width of the window to create the canvas in. -%% win_height: height of the window to create the canvas in. -%% scale: whether a scale shall be shown or not. -%% Possible values: true -- scale is shown. -%% false -- scale is not shown. -%%====================================================================== - --record(pd_deblock, {sender, - win, - win_width, - win_height, - scale = false, - range}). - - - - --record(pd_deblock_cfm, {sender}). - - - --record(pd_new_table, {sender, - table_type, - table_name, - record_name, %% Only valid for Mnesia tables. - writable - }). - - - --record(pd_get_sort_settings, {sender, - sorting, - reverse - }). - - - --record(pd_no_sorting, {sender - }). - - - - --record(pd_ignore, {sender - }). - - - - --record(pd_updated_object, {sender, - object, - old_object, - old_color, %% Tells status of the object, if deleted or present. - obj_no - }). - - - --record(pd_new_object, {sender, %% Used when no row is marked. - object %% Note: may still be an updated object! - }). - - - --record(pd_delete_object, {sender, - object, - color - }). - - - --record(pd_rec_edit, {sender, - attributes - }). - - - -%%%********************************************************************* -%%% MESSAGES OWNED BY PW -%%%********************************************************************* - - - - --record(pw_deblock, {sender, - win_title, - win_width, - win_height, - min_win_width, - min_win_height}). - - - --record(pw_set_window_title, {sender, - win_title}). - - - --record(pw_deblock_cfm, {sender, - win_id}). - - - - -%%====================================================================== -%% Message: pw_create_menu. -%% -%% Function: Order to pw to create a menu according to the content of the message. -%% -%% Data: menutitle: string containing the name of the menu, e.g., "File". -%% menulist: list of tuples having the following format: -%% {Text, Data}, where Text is the string that shall be -%% written in each menulist item, and Data is optional data, -%% presumably the name of a function that is to be called -%% when the corresponding menulist message is received. -%%====================================================================== - --record(pw_create_menu, {sender, - menutitle, - title_acc_pos, - menulist}). - - - --record(pw_create_menu_cfm, {sender}). - - - --record(pw_select_menu, {sender, - menu, - old_menus}). - - - - - -%%%********************************************************************* -%%% MESSAGES OWNED BY DBS -%%%********************************************************************* - - - --record(dbs_deblock, {sender, - etsread_pid, - type, - keypos, - sublist_length}). - - - --record(dbs_deblock_cfm, {sender}). - - - - --record(dbs_new_data, {sender, - data, - keys, - time_to_read_table - }). - - - --record(dbs_new_mnesia_data, {sender, - new_or_changed, - deleted, - keys - }). - - - --record(dbs_subset, {sender, - data, - requested_row, - subset_pos, - db_length, - max_elem_size, - list_of_keys, - required_time_etsread, - required_time_dbs}). - - - - - --record(dbs_subset_req, {sender, - subset_pos, - subset_length - }). - - - - --record(dbs_sorting_mode, {sender, - sorting, % 'true' or 'false' - reverse, % 'true' or 'false' - sort_key_no - }). - - - --record(dbs_marked_row, {sender, - row_no - }). - - - - --record(dbs_search_req, {sender - }). - - - --record(dbs_updated_object, {sender, - object, - old_object, - old_color, - obj_no - }). - - --record(dbs_new_object, {sender, - object - }). - - --record(dbs_delete_object, {sender, - object, - color, - obj_no - }). - - - -%%%********************************************************************* -%%% MESSAGES OWNED BY ETSREAD -%%%********************************************************************* - - - --record(etsread_update_object, {sender, - object, - old_object, - key_no - }). - --record(etsread_update_object_cfm, {sender, - success - }). - - - --record(etsread_new_object, {sender, - object - }). - - --record(etsread_new_object_cfm, {sender, - success - }). - - - --record(etsread_delete_object, {sender, - object, - key_no - }). - - --record(etsread_delete_object_cfm, {sender, - success - }). - - - --record(etsread_deblock, {sender, - dbs_pid, - node, - local_node, - table_id, - table_type, % One of 'ets' or 'mnesia' - poll_interval - }). - - - --record(etsread_deblock_cfm, {sender, - type, - keypos, - protection - }). - - - --record(etsread_set_poll_interval, {sender, - interval}). - - - --record(etsread_poll_table, {sender}). - - - --record(etsread_nodedown, {sender}). - - - -%%%********************************************************************* -%%% MESSAGES OWNED BY IP -%%%********************************************************************* - - - - --record(ip_dead_table, {sender}). - - --record(ip_register_parent, {sender}). - - - --record(ip_update, {sender, - nof_elements_to_mark, - text}). - - - --record(ip_quit, {sender}). - - - - -%%%********************************************************************* -%%% MESSAGES OWNED BY INFO -%%%********************************************************************* - - --record(info_update_table_info, {sender}). - - - --record(info_raise_window, {sender}). - - - --record(info_restart, {sender, - node, - table_id, - table_type}). - - - --record(info_quit, {sender}). - - diff --git a/lib/tv/src/tv_io_lib.erl b/lib/tv/src/tv_io_lib.erl deleted file mode 100644 index 5457575b7d..0000000000 --- a/lib/tv/src/tv_io_lib.erl +++ /dev/null @@ -1,223 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2010. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: This file contains io functions adapted to the -%%% TV requirements. -%%% -%%%********************************************************************* - --module(tv_io_lib). - - --export([format/2]). - --export([write/1,write/2]). --export([write_atom/1,write_string/2]). - --export([char_list/1,deep_char_list/1,printable_list/1]). - - - -%% Interface calls to sub-modules. - -format(Format, Args) -> - tv_io_lib_format:fwrite(Format, Args). - - -%% write(Term) -%% write(Term, Depth) -%% write(Term, Depth, Pretty) -%% Return a (non-flattened) list of characters giving a printed -%% representation of the term. - -write(Term) -> write(Term, -1). - -write(_Term, 0) -> "..."; -write(Term, _D) when is_integer(Term) -> integer_to_list(Term); -write(Term, _D) when is_float(Term) -> tv_io_lib_format:fwrite_g(Term); -write(Atom, _D) when is_atom(Atom) -> write_atom(Atom); -write(Term, _D) when is_port(Term) -> lists:flatten(io_lib:write(Term)); -write(Term, _D) when is_pid(Term) -> pid_to_list(Term); -write(Term, _D) when is_reference(Term) -> io_lib:write(Term); -write(Term, _D) when is_binary(Term), byte_size(Term) > 100 -> "#Bin"; -write(Term, _D) when is_binary(Term) -> "<<\"" ++ binary_to_list(Term) ++ "\">>"; -write(Term, _D) when is_bitstring(Term) -> "#Bitstr"; -write([], _D) -> "[]"; -write({}, _D) -> "{}"; -write([H|T], D) -> - if - D =:= 1 -> "[...]"; - true -> - [$[,[write(H, D-1)|write_tail(T, D-1)],$]] - end; -write(F, _D) when is_function(F) -> - {module,M} = erlang:fun_info(F, module), - ["#Fun<",atom_to_list(M),">"]; -write(T, D) when is_tuple(T) -> - if - D =:= 1 -> "{...}"; - true -> - [${, - [write(element(1, T), D-1)|write_tail(tl(tuple_to_list(T)), D-1)], - $}] - end. - -%% write_tail(List, Depth) -%% Test the terminating case first as this looks better with depth. - -write_tail([], _D) -> ""; -write_tail(_List, 1) -> "|..."; -write_tail([H|T], D) -> - [$,,write(H, D-1)|write_tail(T, D-1)]; -write_tail(Other, D) -> - [$|,write(Other, D-1)]. - -%% write_atom(Atom) -> [Char] -%% Generate the list of characters needed to print an atom. - -write_atom(Atom) -> - Chars = atom_to_list(Atom), - case quote_atom(Atom, Chars) of - true -> - write_string(Chars, $'); - false -> - Chars - end. - - -write_string(S, Q) -> - [Q|write_string1(S, Q)]. - -write_string1([], Q) -> - [Q]; -write_string1([C|Cs], Q) -> - write_char(C, Q, write_string1(Cs, Q)). - - -write_char(Q, Q, Tail) -> %Must check this first - [$\\,Q|Tail]; -write_char($\\, _, Tail) -> %In printable character range - [$\\,$\\|Tail]; -write_char(C, _, Tail) when C >= $ , C =< $~ -> - [C|Tail]; -write_char(C, _, Tail) when C >= 128+$ , C =< 255 -> - [C|Tail]; -write_char($\n, _Q, Tail) -> %\n = LF - [$\\,$n|Tail]; -write_char($\r, _, Tail) -> %\r = CR - [$\\,$r|Tail]; -write_char($\t, _, Tail) -> %\t = TAB - [$\\,$t|Tail]; -write_char($\v, _, Tail) -> %\v = VT - [$\\,$v|Tail]; -write_char($\b, _, Tail) -> %\b = BS - [$\\,$b|Tail]; -write_char($\f, _, Tail) -> %\f = FF - [$\\,$f|Tail]; -write_char($\e, _, Tail) -> %\e = ESC - [$\\,$e|Tail]; -write_char($\d, _, Tail) -> %\d = DEL - [$\\,$d|Tail]; -write_char(C, _, Tail) when C < $ -> - C1 = (C bsr 3) + $0, - C2 = (C band 7) + $0, - [$\\,$0,C1,C2|Tail]; -write_char(C, _, Tail) when C > $~ -> - C1 = (C bsr 6) + $0, - C2 = ((C bsr 3) band 7) + $0, - C3 = (C band 7) + $0, - [$\\,C1,C2,C3|Tail]. - -%% quote_atom(Atom, CharList) -%% Return 'true' if atom with chars in CharList needs to be quoted, else -%% return 'false'. - -quote_atom(Atom, Cs0) -> - case erl_scan:reserved_word(Atom) of - true -> true; - false -> - case Cs0 of - [C|Cs] when C >= $a, C =< $z -> - quote_atom(Cs); - _ -> true - end - end. - -quote_atom([C|Cs]) when C >= $a, C =< $z -> - quote_atom(Cs); -quote_atom([C|Cs]) when C >= $A, C =< $Z -> - quote_atom(Cs); -quote_atom([C|Cs]) when C >= $0, C =< $9 -> - quote_atom(Cs); -quote_atom([$_|Cs]) -> - quote_atom(Cs); -quote_atom([$@|Cs]) -> - quote_atom(Cs); -quote_atom([_|_]) -> - true; -quote_atom([]) -> - false. - -%% char_list(CharList) -%% deep_char_list(CharList) -%% Return true if CharList is a (possibly deep) list of characters, else -%% false. - -char_list([C|Cs]) when is_integer(C), C >= 0, C =< 255 -> - char_list(Cs); -char_list([]) -> true; -char_list(_Other) -> false. %Everything else is false - -deep_char_list(Cs) -> - deep_char_list(Cs, []). - -deep_char_list([C|Cs], More) when is_list(C) -> - deep_char_list(C, [Cs|More]); -deep_char_list([C|Cs], More) when is_integer(C), C >= 0, C =< 255 -> - deep_char_list(Cs, More); -deep_char_list([], [Cs|More]) -> - deep_char_list(Cs, More); -deep_char_list([], []) -> true; -deep_char_list(_Other, _More) -> %Everything else is false - false. - -%% printable_list([Char]) -> bool() -%% Return true if CharList is a list of printable characters, else -%% false. - -printable_list([C|Cs]) when is_integer(C), C >= $ , C =< 255 -> - printable_list(Cs); -printable_list([$\n|Cs]) -> - printable_list(Cs); -printable_list([$\r|Cs]) -> - printable_list(Cs); -printable_list([$\t|Cs]) -> - printable_list(Cs); -printable_list([$\v|Cs]) -> - printable_list(Cs); -printable_list([$\b|Cs]) -> - printable_list(Cs); -printable_list([$\f|Cs]) -> - printable_list(Cs); -printable_list([$\e|Cs]) -> - printable_list(Cs); -printable_list([]) -> true; -printable_list(_Other) -> false. %Everything else is false - - diff --git a/lib/tv/src/tv_io_lib_format.erl b/lib/tv/src/tv_io_lib_format.erl deleted file mode 100644 index e043d9296e..0000000000 --- a/lib/tv/src/tv_io_lib_format.erl +++ /dev/null @@ -1,386 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2010. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_io_lib_format). - - --export([fwrite/2,fwrite_g/1,indentation/2]). - - -%% fwrite(Format, ArgList) -> [Char]. -%% Format the arguments in ArgList after string Format. Just generate -%% an error if there is an error in the arguments. -%% -%% To do the printing command correctly we need to calculate the -%% current indentation for everything before it. This may be very -%% expensive, especially when it is not needed, so we first determine -%% if, and for how long, we need to calculate the indentations. We do -%% this by first collecting all the control sequences and -%% corresponding arguments, then counting the print sequences and -%% then building the output. This method has some drawbacks, it does -%% two passes over the format string and creates more temporary data, -%% and it also splits the handling of the control characters into two -%% parts. - -fwrite(Format, Args) when is_atom(Format) -> - fwrite(atom_to_list(Format), Args); -fwrite(Format, Args) -> - Cs = collect(Format, Args), - Pc = pcount(Cs), - build(Cs, Pc, 0). - -collect([$~|Fmt0], Args0) -> - {C,Fmt1,Args1} = collect_cseq(Fmt0, Args0), - [C|collect(Fmt1, Args1)]; -collect([C|Fmt], Args) -> - [C|collect(Fmt, Args)]; -collect([], []) -> []. - -collect_cseq(Fmt0, Args0) -> - {F,Ad,Fmt1,Args1} = field_width(Fmt0, Args0), - {P,Fmt2,Args2} = precision(Fmt1, Args1), - {Pad,Fmt3,Args3} = pad_char(Fmt2, Args2), - {C,As,Fmt4,Args4} = collect_cc(Fmt3, Args3), - {{C,As,F,Ad,P,Pad},Fmt4,Args4}. - -field_width([$-|Fmt0], Args0) -> - {F,Fmt,Args} = field_value(Fmt0, Args0), - field_width(-F, Fmt, Args); -field_width(Fmt0, Args0) -> - {F,Fmt,Args} = field_value(Fmt0, Args0), - field_width(F, Fmt, Args). - -field_width(F, Fmt, Args) when F < 0 -> - {-F,left,Fmt,Args}; -field_width(F, Fmt, Args) when F >= 0 -> - {F,right,Fmt,Args}. - -precision([$.|Fmt], Args) -> - field_value(Fmt, Args); -precision(Fmt, Args) -> - {none,Fmt,Args}. - -field_value([$*|Fmt], [A|Args]) when is_integer(A) -> - {A,Fmt,Args}; -field_value([C|Fmt], Args) when C >= $0, C =< $9 -> - field_value([C|Fmt], Args, 0); -field_value(Fmt, Args) -> - {none,Fmt,Args}. - -field_value([C|Fmt], Args, F) when C >= $0, C =< $9 -> - field_value(Fmt, Args, 10*F + (C - $0)); -field_value(Fmt, Args, F) -> %Default case - {F,Fmt,Args}. - -pad_char([$.,$*|Fmt], [Pad|Args]) -> {Pad,Fmt,Args}; -pad_char([$.,Pad|Fmt], Args) -> {Pad,Fmt,Args}; -pad_char(Fmt, Args) -> {$ ,Fmt,Args}. - -%% collect_cc([FormatChar], [Argument]) -> -%% {Control,[ControlArg],[FormatChar],[Arg]}. -%% Here we collect the argments for each control character. -%% Be explicit to cause failure early. - -collect_cc([$w|Fmt], [A|Args]) -> {$w,[A],Fmt,Args}; -collect_cc([$p|Fmt], [A|Args]) -> {$p,[A],Fmt,Args}; -collect_cc([$W|Fmt], [A,Depth|Args]) -> {$W,[A,Depth],Fmt,Args}; -collect_cc([$P|Fmt], [A,Depth|Args]) -> {$P,[A,Depth],Fmt,Args}; -collect_cc([$s|Fmt], [A|Args]) -> {$s,[A],Fmt,Args}; -collect_cc([$e|Fmt], [A|Args]) -> {$e,[A],Fmt,Args}; -collect_cc([$f|Fmt], [A|Args]) -> {$f,[A],Fmt,Args}; -collect_cc([$g|Fmt], [A|Args]) -> {$g,[A],Fmt,Args}; -collect_cc([$c|Fmt], [A|Args]) -> {$c,[A],Fmt,Args}; -collect_cc([$~|Fmt], Args) -> {$~,[],Fmt,Args}; -collect_cc([$n|Fmt], Args) -> {$n,[],Fmt,Args}; -collect_cc([$i|Fmt], [A|Args]) -> {$i,[A],Fmt,Args}. - -%% pcount([ControlC]) -> Count. -%% Count the number of print requests. - -pcount(Cs) -> pcount(Cs, 0). - -pcount([{$p,_As,_F,_Ad,_P,_Pad}|Cs], Acc) -> pcount(Cs, Acc+1); -pcount([{$P,_As,_F,_Ad,_P,_Pad}|Cs], Acc) -> pcount(Cs, Acc+1); -pcount([_|Cs], Acc) -> pcount(Cs, Acc); -pcount([], Acc) -> Acc. - -%% build([Control], Pc, Indentation) -> [Char]. -%% Interpret the control structures. Count the number of print -%% remaining and only calculate indentation when necessary. Must also -%% be smart when calculating indentation for characters in format. - -build([{C,As,F,Ad,P,Pad}|Cs], Pc0, I) -> - S = control(C, As, F, Ad, P, Pad, I), - Pc1 = decr_pc(C, Pc0), - if - Pc1 > 0 -> [S|build(Cs, Pc1, indentation(S, I))]; - true -> [S|build(Cs, Pc1, I)] - end; -build([$\n|Cs], Pc, _I) -> [$\n|build(Cs, Pc, 0)]; -build([$\t|Cs], Pc, I) -> [$\t|build(Cs, Pc, ((I + 8) div 8) * 8)]; -build([C|Cs], Pc, I) -> [C|build(Cs, Pc, I+1)]; -build([], _, _) -> []. - -decr_pc($p, Pc) -> Pc - 1; -decr_pc($P, Pc) -> Pc - 1; -decr_pc(_C, Pc) -> Pc. - -%% control(FormatChar, [Argument], FieldWidth, Adjust, Precision, PadChar, - -%% Indentation) -> -%% [Char] -%% This is the main dispatch function for the various formatting commands. -%% Field widths and precisions have already been calculated. - -control($w, [A], F, Adj, P, Pad, _I) -> - term(tv_io_lib:write(A, -1), F, Adj, P, Pad); -control($p, [A], F, Adj, P, Pad, I) -> - print(A, -1, F, Adj, P, Pad, I); -control($W, [A,Depth], F, Adj, P, Pad, _I) when is_integer(Depth) -> - term(tv_io_lib:write(A, Depth), F, Adj, P, Pad); -control($P, [A,Depth], F, Adj, P, Pad, I) when is_integer(Depth) -> - print(A, Depth, F, Adj, P, Pad, I); -control($s, [A], F, Adj, P, Pad, _I) when is_atom(A) -> - string(atom_to_list(A), F, Adj, P, Pad); -control($s, [L], F, Adj, P, Pad, _I) -> - true = tv_io_lib:deep_char_list(L), %Check if L a character list - string(L, F, Adj, P, Pad); -control($e, [A], F, Adj, P, Pad, _I) when is_float(A) -> - fwrite_e(A, F, Adj, P, Pad); -control($f, [A], F, Adj, P, Pad, _I) when is_float(A) -> - fwrite_f(A, F, Adj, P, Pad); -control($g, [A], F, Adj, P, Pad, _I) when is_float(A) -> - fwrite_g(A, F, Adj, P, Pad); -control($c, [A], F, Adj, P, Pad, _I) when is_integer(A) -> - char(A band 255, F, Adj, P, Pad); -control($~, [], F, Adj, P, Pad, _I) -> char($~, F, Adj, P, Pad); -control($n, [], F, Adj, P, Pad, _I) -> newline(F, Adj, P, Pad); -control($i, [_A], _F, _Adj, _P, _Pad, _I) -> []. - -%% indentation([Char], Indentation) -> Indentation. -%% Calculate the indentation of the end of a string given its start -%% indentation. We assume tabs at 8 cols. - -indentation([$\n|Cs], _I) -> indentation(Cs, 0); -indentation([$\t|Cs], I) -> indentation(Cs, ((I + 8) div 8) * 8); -indentation([C|Cs], I) when is_integer(C) -> - indentation(Cs, I+1); -indentation([C|Cs], I) -> - indentation(Cs, indentation(C, I)); -indentation([], I) -> I. - -%% term(TermList, Field, Adjust, Precision, PadChar) -%% Output the characters in a term. - -term(T, none, _Adj, none, _Pad) -> T; -term(T, none, Adj, P, Pad) -> term(T, P, Adj, P, Pad); -term(T, F, Adj, none, Pad) -> term(T, F, Adj, erlang:min(flat_length(T), F), Pad); -term(T, F, Adj, P, Pad) when F >= P -> - adjust_error(T, F, Adj, P, Pad). - -%% print(Term, Depth, Field, Adjust, Precision, PadChar, Indentation) -%% Print a term. - -print(T, D, none, Adj, P, Pad, I) -> print(T, D, 80, Adj, P, Pad, I); -print(T, D, F, Adj, none, Pad, I) -> print(T, D, F, Adj, I+1, Pad, I); -print(T, D, F, right, P, _Pad, _I) -> - tv_io_lib_pretty:pretty_print(T, P, F, D). - -%% fwrite_e(Float, Field, Adjust, Precision, PadChar) - -fwrite_e(Fl, none, Adj, none, Pad) -> %Default values - fwrite_e(Fl, none, Adj, 6, Pad); -fwrite_e(Fl, none, _Adj, P, _Pad) when P >= 2 -> - float_e(Fl, float_data(Fl), P); -fwrite_e(Fl, F, Adj, none, Pad) -> - fwrite_e(Fl, F, Adj, 6, Pad); -fwrite_e(Fl, F, Adj, P, Pad) when P >= 2 -> - adjust_error(float_e(Fl, float_data(Fl), P), F, Adj, F, Pad). - -float_e(Fl, Fd, P) when Fl < 0.0 -> %Negative numbers - [$-|float_e(-Fl, Fd, P)]; -float_e(_Fl, {Ds,E}, P) -> - case float_man(Ds, 1, P-1) of - {[$0|Fs],true} -> [[$1|Fs]|float_exp(E)]; - {Fs,false} -> [Fs|float_exp(E-1)] - end. - -%% float_man([Digit], Icount, Dcount) -> {[Chars],CarryFlag}. -%% Generate the characters in the mantissa from the digits with Icount -%% characters before the '.' and Dcount decimals. Handle carry and let -%% caller decide what to do at top. - -float_man(Ds, 0, Dc) -> - {Cs,C} = float_man(Ds, Dc), - {[$.|Cs],C}; -float_man([D|Ds], I, Dc) -> - case float_man(Ds, I-1, Dc) of - {Cs,true} when D =:= $9 -> {[$0|Cs],true}; - {Cs,true} -> {[D+1|Cs],false}; - {Cs,false} -> {[D|Cs],false} - end; -float_man([], I, Dc) -> %Pad with 0's - {string:chars($0, I, [$.|string:chars($0, Dc)]),false}. - -float_man([D|_Ds], 0) when D >= $5 -> {[],true}; -float_man([_|_], 0) -> {[],false}; -float_man([D|Ds], Dc) -> - case float_man(Ds, Dc-1) of - {Cs,true} when D =:= $9 -> {[$0|Cs],true}; - {Cs,true} -> {[D+1|Cs],false}; - {Cs,false} -> {[D|Cs],false} - end; -float_man([], Dc) -> {string:chars($0, Dc),false}. %Pad with 0's - -%% float_exp(Exponent) -> [Char]. -%% Generate the exponent of a floating point number. Alwayd include sign. - -float_exp(E) when E >= 0 -> - [$e,$+|integer_to_list(E)]; -float_exp(E) -> - [$e|integer_to_list(E)]. - -%% fwrite_f(FloatData, Field, Adjust, Precision, PadChar) - -fwrite_f(Fl, none, Adj, none, Pad) -> %Default values - fwrite_f(Fl, none, Adj, 6, Pad); -fwrite_f(Fl, none, _Adj, P, _Pad) when P >= 1 -> - float_f(Fl, float_data(Fl), P); -fwrite_f(Fl, F, Adj, none, Pad) -> - fwrite_f(Fl, F, Adj, 6, Pad); -fwrite_f(Fl, F, Adj, P, Pad) when P >= 1 -> - adjust_error(float_f(Fl, float_data(Fl), P), F, Adj, F, Pad). - -float_f(Fl, Fd, P) when Fl < 0.0 -> - [$-|float_f(-Fl, Fd, P)]; -float_f(Fl, {Ds,E}, P) when E =< 0 -> - float_f(Fl, {string:chars($0, -E+1, Ds),1}, P); %Prepend enough 0's -float_f(_Fl, {Ds,E}, P) -> - case float_man(Ds, E, P) of - {Fs,true} -> "1" ++ Fs; %Handle carry - {Fs,false} -> Fs - end. - -%% float_data([FloatChar]) -> {[Digit],Exponent} - -float_data(Fl) -> - float_data(float_to_list(Fl), []). - -float_data([$e|E], Ds) -> - {reverse(Ds),list_to_integer(E)+1}; -float_data([D|Cs], Ds) when D >= $0, D =< $9 -> - float_data(Cs, [D|Ds]); -float_data([_D|Cs], Ds) -> - float_data(Cs, Ds). - - -%% fwrite_g(Float, Field, Adjust, Precision, PadChar) -%% Use the f form if Float is > 0.1 and < 10^4, else the e form. -%% Precision always means the # of significant digits. - -fwrite_g(Fl) -> - fwrite_g(Fl, none, right, none, $\s). - -fwrite_g(Fl, F, Adj, none, Pad) -> - fwrite_g(Fl, F, Adj, 6, Pad); -fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 0.1 -> - fwrite_e(Fl, F, Adj, P, Pad); -fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 1.0 -> - fwrite_f(Fl, F, Adj, P, Pad); -fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 10.0 -> - fwrite_f(Fl, F, Adj, P-1, Pad); -fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 100.0 -> - fwrite_f(Fl, F, Adj, P-2, Pad); -fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 1000.0 -> - fwrite_f(Fl, F, Adj, P-3, Pad); -fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 10000.0 -> - fwrite_f(Fl, F, Adj, P-4, Pad); -fwrite_g(Fl, F, Adj, P, Pad) -> - fwrite_e(Fl, F, Adj, P, Pad). - -%% string(String, Field, Adjust, Precision, PadChar) - -string(S, none, _Adj, none, _Pad) -> S; -string(S, F, Adj, none, Pad) -> - string(S, F, Adj, erlang:min(flat_length(S), F), Pad); -string(S, none, _Adj, P, Pad) -> - string:left(flatten(S), P, Pad); -string(S, F, Adj, P, Pad) when F >= P -> - adjust(string:left(flatten(S), P, Pad), string:chars(Pad, F - P), Adj). - -%% char(Char, Field, Adjust, Precision, PadChar) -> [Char]. - -char(C, none, _Adj, none, _Pad) -> [C]; -char(C, F, _Adj, none, _Pad) -> string:chars(C, F); -char(C, none, _Adj, P, _Pad) -> string:chars(C, P); -char(C, F, Adj, P, Pad) when F >= P -> - adjust(string:chars(C, P), string:chars(Pad, F - P), Adj). - -%% newline(Field, Adjust, Precision, PadChar) -> [Char]. - -newline(none, _Adj, _P, _Pad) -> "\n"; -newline(F, right, _P, _Pad) -> string:chars($\n, F). - -%% adjust_error([Char], Field, Adjust, Max, PadChar) -> [Char]. -%% Adjust the characters within the field if length less than Max padding -%% with PadChar. - -adjust_error(Cs, F, Adj, M, Pad) -> - L = flat_length(Cs), - if - L > M -> - adjust(string:chars($*, M), string:chars(Pad, F - M), Adj); - true -> - adjust(Cs, string:chars(Pad, F - L), Adj) - end. - -adjust(Data, Pad, left) -> [Data,Pad]; -adjust(Data, Pad, right) -> [Pad,Data]. - -%% -%% Utilities -%% - -reverse(List) -> - reverse(List, []). - -reverse([H|T], Stack) -> - reverse(T, [H|Stack]); -reverse([], Stack) -> Stack. - -%% flatten(List) -%% Flatten a list. - -flatten(List) -> flatten(List, []). - -flatten([H|T], Cont) when is_list(H) -> - flatten(H, [T|Cont]); -flatten([H|T], Cont) -> - [H|flatten(T, Cont)]; -flatten([], [H|Cont]) -> flatten(H, Cont); -flatten([], []) -> []. - -%% flat_length(List) -%% Calculate the length of a list of lists. - -flat_length(List) -> flat_length(List, 0). - -flat_length([H|T], L) when is_list(H) -> - flat_length(H, flat_length(T, L)); -flat_length([_|T], L) -> - flat_length(T, L + 1); -flat_length([], L) -> L. diff --git a/lib/tv/src/tv_io_lib_pretty.erl b/lib/tv/src/tv_io_lib_pretty.erl deleted file mode 100644 index c19277d006..0000000000 --- a/lib/tv/src/tv_io_lib_pretty.erl +++ /dev/null @@ -1,171 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_io_lib_pretty). - - - --export([pretty_print/4]). - -%% pretty_print(Term, Column, LineLength, Depth) -> [Chars] -%% Depth = -1 gives unlimited print depth. Use tv_io_lib:write for atomic terms. - -pretty_print(_, _, _, 0) -> "..."; -pretty_print([], _, _, _) -> "[]"; -pretty_print({}, _, _, _) -> "{}"; -pretty_print(List, Col, Ll, D) when is_list(List) -> - case tv_io_lib:printable_list(List) of - true -> - tv_io_lib:write_string(List, $"); - false -> - Len = write_length(List, D, 0, Ll - Col), - if - D =:= 1 -> "[...]"; - Len + Col < Ll -> - write(List, D); - true -> - [$[, - [pretty_print(hd(List), Col + 1, Ll, D - 1)| - pretty_print_tail(tl(List), Col + 1, Ll, D - 1)], - $]] - end - end; -pretty_print(Fun, _Col, _Ll, _D) when is_function(Fun) -> - tv_io_lib:write(Fun); -pretty_print(Tuple, Col, Ll, D) when is_tuple(Tuple) -> - Len = write_length(Tuple, D, 0, Ll - Col), - if - D =:= 1 -> "{...}"; - Len + Col < Ll -> - write(Tuple, D); - is_atom(element(1, Tuple)), size(Tuple) > 1 -> - print_tag_tuple(Tuple, Col, Ll, D); - true -> - [${, - [pretty_print(element(1, Tuple), Col + 1, Ll, D - 1)| - pretty_print_tail(tl(tuple_to_list(Tuple)), Col + 1, Ll, D - 1)], - $}] - end; -pretty_print(Term, _Col, _Ll, D) -> tv_io_lib:write(Term, D). - -%% print_tag_tuple(Tuple, Column, LineLength, Depth) -> [Char] -%% Print a tagged tuple by indenting the rest of the elements differently -%% to the tag. Start beside the tag if start column not too far to -%% the right. Tuple has size >= 2. - -print_tag_tuple(Tuple, Col, Ll, D) -> - Tag = tv_io_lib:write_atom(element(1, Tuple)), - Tlen = length(Tag), - Tcol = Col + Tlen + 2, - if - Tcol >= Ll div 2, Tlen > 2 -> - [${,Tag, - pretty_print_tail(tl(tuple_to_list(Tuple)), Col + 4, Ll, D - 2), - $}]; - true -> - [${,Tag,$,, - [pretty_print(element(2, Tuple), Col + Tlen + 2, Ll, D - 2)| - pretty_print_tail(tl(tl(tuple_to_list(Tuple))), Tcol, Ll, D - 3)], - $}] - end. - -%% pretty_print_tail([Element], Column, LineLength, D) -> [Char] -%% Pretty print the elements of a list or tuple. - -pretty_print_tail([], _Col, _Ll, _D) -> ""; -pretty_print_tail(_Es, _Col, _Ll, 1) -> "|..."; -pretty_print_tail([E|Es], Col, Ll, D) -> - [$,,nl_indent(Col-1), - pretty_print(E, Col, Ll, D-1)| - pretty_print_tail(Es, Col, Ll, D-1)]; -pretty_print_tail(E, Col, Ll, D) -> - [$|,nl_indent(Col-1),pretty_print(E, Col, Ll, D-1)]. - -%% write(Term, Depth) -> [Char] -%% Write a term down to Depth on one line. Use tv_io_lib:write/2 for -%% atomic terms. - -write(_, 0) -> "..."; -write([], _) -> "[]"; -write({}, _) -> "{}"; -write(List, D) when is_list(List) -> - case tv_io_lib:printable_list(List) of - true -> - tv_io_lib:write_string(List, $"); - false -> - if - D =:= 1 -> "[...]"; - true -> - [$[, - [write(hd(List), D-1)|write_tail(tl(List), D-1)], - $]] - end - end; -write(Fun, _D) when is_function(Fun) -> tv_io_lib:write(Fun); %Must catch this first -write(T, D) when is_tuple(T) -> - if - D =:= 1 -> "{...}"; - true -> - [${, - [write(element(1, T), D-1)|write_tail(tl(tuple_to_list(T)), D-1)], - $}] - end; -write(Term, D) -> tv_io_lib:write(Term, D). - -write_tail([], _D) -> ""; -write_tail(_Es, 1) -> "|..."; -write_tail([E|Es], D) -> - [$,,write(E, D - 1)|write_tail(Es, D - 1)]; -write_tail(E, D) -> - [$|,write(E, D - 1)]. - -%% write_length(Term, Depth, Accumulator, MaxLength) -> integer() -%% Calculate the print length of a term, but exit when length becomes -%% greater than MaxLength. - -write_length(_T, _D, Acc, Max) when Acc > Max -> Acc; -write_length(_T, 0, Acc, _Max) -> Acc + 3; -write_length([], _, Acc, _) -> Acc + 2; -write_length({}, _, Acc, _) -> Acc + 2; -write_length(List, D, Acc, Max) when is_list(List) -> - case tv_io_lib:printable_list(List) of - true -> - Acc + length(tv_io_lib:write_string(List, $")); - false -> - write_length_list(List, D, Acc, Max) - end; -write_length(Fun, _D, Acc, _Max) when is_function(Fun) -> - Acc + length(tv_io_lib:write(Fun)); -write_length(Tuple, D, Acc, Max) when is_tuple(Tuple) -> - write_length_list(tuple_to_list(Tuple), D, Acc, Max); -write_length(Term, _D, Acc, _Max) -> - Acc + length(tv_io_lib:write(Term)). - -write_length_list(_, _, Acc, Max) when Acc > Max -> Acc; -write_length_list([], _, Acc, _) -> Acc + 1; %] -write_length_list(_Es, 1, Acc, _) -> Acc + 5; %|...] -write_length_list([E|Es], D, Acc, Max) -> - write_length_list(Es, - D - 1, - write_length(E, D - 1, Acc + 1, Max), - Max); -write_length_list(E, D, Acc, Max) -> - write_length(E, D - 1, Acc + 2, Max). %| ] - - - -nl_indent(_) -> "". diff --git a/lib/tv/src/tv_ip.erl b/lib/tv/src/tv_ip.erl deleted file mode 100644 index 9f66917362..0000000000 --- a/lib/tv/src/tv_ip.erl +++ /dev/null @@ -1,242 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_ip). --compile([{nowarn_deprecated_function,{gs,canvas,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([ip/1]). - - - --include("tv_int_msg.hrl"). - - --define(NOF_LABELS, 25). - --define(DEFAULT_BG_COLOR, {217, 217, 217}). - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -ip(_Master) -> - W = gs:window(win, gs:start(), [{width, 302}, - {height, 38}, - {bg, ?DEFAULT_BG_COLOR}, - {title, "Launching..."} - ]), - C = gs:canvas(W, [{width, 40}, - {height, 35}, - {x, 0}, - {bg, {255, 255, 255}} - ]), - gs:create(image, C, [{load_gif, code:priv_dir(tv) ++ "/erlang.gif"}]), - gs:label(W, [{width, 252}, - {height, 12}, - {x, 47}, - {y, 23}, - {bg, {0, 0, 0}}, - {cursor, arrow} - ]), - - LabelList = create_labels(?NOF_LABELS, W, 48), - - L = gs:label(W, [{width, 250}, - {height, 18}, - {x, 47}, - {y, 0}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, w} - ]), - gs:config(win, [{map, true}]), - loop(1, LabelList, L). - - - - - - - - - -%%%********************************************************************* -%%% INTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_labels(0, _WinId, _Xpos) -> - []; -create_labels(N, WinId, Xpos) -> - Width = 10, - Xdiff = Width, - LabelId = gs:label(WinId, [{width, Width}, - {height, 10}, - {x, Xpos}, - {y, 24}, - {bg, {235, 235, 235}}, - {cursor, arrow} - ]), - - [LabelId | create_labels(N - 1, WinId, Xpos + Xdiff)]. - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -loop(N, LabelList, L) -> - receive - Msg -> - case Msg of - - #ip_update{nof_elements_to_mark = X, text = Text} -> - update_window(LabelList, N, N + X, L, Text), - loop(N + X, LabelList, L); - - #ip_quit{} -> - update_labels(LabelList, N, ?NOF_LABELS), - receive - after 1000 -> - done - end, - done; - - _Other -> - loop(N, LabelList, L) - end - end. - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_window(LabelList, N, Hi, LblId, Text) -> - gs:config(win, [raise]), - gs:config(LblId, [{label, {text, Text}}]), - update_labels(LabelList, N, Hi). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_labels(_LabelList, N, _Hi) when N > ?NOF_LABELS -> - done; -update_labels(_LabelList, N, Hi) when N >= Hi -> - done; -update_labels(LabelList, N, Hi) -> - LabelId = lists:nth(N, LabelList), - gs:config(LabelId, [{bg, {0, 0, 255}}]), - update_labels(LabelList, N + 1, Hi). - - - - - - - - - - - - diff --git a/lib/tv/src/tv_main.erl b/lib/tv/src/tv_main.erl deleted file mode 100644 index b6ffbd7c49..0000000000 --- a/lib/tv/src/tv_main.erl +++ /dev/null @@ -1,1821 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_main). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,frame,3}}, - {nowarn_deprecated_function,{gs,grid,3}}, - {nowarn_deprecated_function,{gs,gridline,2}}, - {nowarn_deprecated_function,{gs,label,3}}, - {nowarn_deprecated_function,{gs,menu,2}}, - {nowarn_deprecated_function,{gs,menubar,3}}, - {nowarn_deprecated_function,{gs,menubutton,2}}, - {nowarn_deprecated_function,{gs,menuitem,2}}, - {nowarn_deprecated_function,{gs,menuitem,3}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([start/0, - init/0 - ]). - - --export([get_ets_tables/1, - get_mnesia_tables/1 - ]). - - - --include("tv_main.hrl"). --include("tv_int_msg.hrl"). --include("tv_pd_int_msg.hrl"). --include("tv_pd_int_def.hrl"). - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - -start() -> - spawn(?MODULE, init, []). - - - -init() -> - process_flag(trap_exit,true), - %% OK, so it's *BAD* to use the process dictionary... - %% So why have I used it? Because it is simple to remove the haiku-functionality, - %% if that is desired. Otherwise a lot of functions (the parameters) would have - %% to be changed. - put(error_msg_mode, ?ERROR_MSG_MODE), - KindOfTable = ets, - SysTabHidden = true, - UnreadHidden = true, - SortKey = ?NAME_COL, - CurrNode = node(), - Children = start_tv_nodewin(CurrNode), - {MarkedCell, TempGridLines, WinSize, ShortcutList} = create_window([]), - Tables = get_tables(CurrNode, KindOfTable, UnreadHidden, SysTabHidden,SortKey), - gs:config(grid, [{rows, {1, get_nof_rows(length(Tables), - gs:read(grid, height))}}]), - GridLines = update_gridlines(Tables, TempGridLines, 1), - gs:config(win, [{map, true}, {cursor,arrow}]), - %% To avoid unpleasant error/exit messages, we surround the loop with a catch. - catch loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, ShortcutList, - UnreadHidden, SysTabHidden, SortKey, Children). - - - -start_tv_nodewin(CurrNode) -> - NodewinPid = tv_nodewin:start(CurrNode, get(error_msg_mode)), - [{NodewinPid, tv_nodewin, CurrNode}]. - - - - - -get_ets_tables(SysTabHidden) -> - Tables = ets:all(), - get_ets_table_info(Tables, - hidden_tables(ets, SysTabHidden) ++ - current_mnesia_tables(SysTabHidden), - owners_to_hide(ets, SysTabHidden), - []). - - - -get_mnesia_tables(SysTabHidden) -> - Tables = mnesia:system_info(tables), - get_mnesia_table_info(Tables -- hidden_tables(mnesia, SysTabHidden), - owners_to_hide(mnesia, SysTabHidden), - []). - - - - - -owners_to_hide(ets, true) -> - ?SYSTEM_OWNERS; -owners_to_hide(ets, false) -> - []; -owners_to_hide(mnesia, true) -> - []; -owners_to_hide(mnesia, false) -> - []. - - - - -get_mnesia_table_info([], _OwnersToHide, Acc) -> - lists:keysort(?NAME_ELEM, Acc); -get_mnesia_table_info([TabId | Tail], OwnersToHide, Acc) -> - case catch get_mnesia_owner_size(TabId) of - {'EXIT', _Reason} -> - %% Ignore tables ceasing to exist. - %% Nodedown errors caught above! - get_mnesia_table_info(Tail, OwnersToHide, Acc); - {OwnerPid, OwnerName, Size} -> - case lists:member(OwnerName, OwnersToHide) of - true -> - get_mnesia_table_info(Tail, OwnersToHide, Acc); - false -> - Readable = not(lists:member(TabId, ?UNREADABLE_MNESIA_TABLES)), - get_mnesia_table_info(Tail, - OwnersToHide, - [{TabId, {notext}, {notext}, Readable, - OwnerPid, OwnerName, Size} | Acc]) - end - end. - - - - -get_mnesia_owner_size(TabId) -> - {OwnerPid, OwnerName} = - case catch mnesia:table_info(TabId, owner) of - Pid when is_pid(Pid) -> - case lists:keysearch(registered_name, 1, process_info(Pid)) of - false -> - {Pid, {notext}}; - {value, {registered_name, ProcName}} -> - {Pid, ProcName} - end; - _Other -> - {{notext}, {notext}} - end, - Size = mnesia:table_info(TabId, size), - {OwnerPid, OwnerName, Size}. - - - - - - - -hidden_tables(_Any, true) -> - ?SYSTEM_TABLES ++ ?MNESIA_TABLES; -hidden_tables(ets, _SysTabHidden) -> - ?MNESIA_TABLES; -hidden_tables(mnesia, _SysTabHidden) -> - []. - - - - -get_tables(Node, KindOfTable, UnreadHidden, SysTabHidden,SortKey) -> - LocalNode = (Node =:= node()), - Tables = - case catch get_table_list(Node,LocalNode,KindOfTable,SysTabHidden) of - Result when is_list(Result) -> - case UnreadHidden of - true -> - lists:filter(fun(H) -> - element(?READABLE_ELEM, H) - end, - Result); - _Other -> - Result - end; - Error -> - analyze_error(Error, Node, undefined), - [] - end, - case SortKey of - ?PROCNAME_ELEM -> - lists:keysort(SortKey, - lists:keysort(?PID_ELEM, Tables)); - _OtherCol -> - lists:keysort(SortKey, - lists:keysort(?NAME_ELEM, Tables)) - end. - - - - - -get_ets_table_info([], _TablesToHide, _OwnersToHide, Acc) -> - lists:keysort(?ID_ELEM, Acc); -get_ets_table_info([TabId | Tail], TablesToHide, OwnersToHide, Acc) -> - case catch get_ets_name_owner_protection(TabId) of - {'EXIT', _Reason} -> - %% Ignore tables ceasing to exist. - %% Nodedown errors caught above! - get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc); - {Name, NamedTable, Id, Readable, OwnerPid, OwnerName, Size} -> - case lists:member(Name, TablesToHide) of - true -> - get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc); - false -> - case lists:member(OwnerName, OwnersToHide) of - true -> - get_ets_table_info(Tail, TablesToHide, OwnersToHide, Acc); - false -> - get_ets_table_info(Tail, TablesToHide, OwnersToHide, - [{Name,NamedTable,Id,Readable, - OwnerPid,OwnerName,Size} | Acc]) - end - end - end. - - - -get_ets_name_owner_protection(TabId) -> - Name = ets:info(TabId, name), - OwnerPid = ets:info(TabId, owner), - Readable = case ets:info(TabId, protection) of - private -> - false; - _Other -> - true - end, - Size = ets:info(TabId, size), - {NamedTable,Id} = case ets:info(TabId, named_table) of - true -> - {true,{notext}}; - false -> - {false, TabId} - end, - PName = case lists:keysearch(registered_name, 1, process_info(OwnerPid)) of - false -> - {notext}; - {value, {registered_name, ProcName}} -> - ProcName - end, - {Name, NamedTable, Id, Readable, OwnerPid, PName, Size}. - - - - - - -current_mnesia_tables(SysTabHidden) -> - case catch get_table_list(node(), true, mnesia, SysTabHidden) of - Result when is_list(Result) -> - lists:map(fun(H) -> - element(?NAME_ELEM, H) - end, - Result); - nodedown -> - handle_error(nodedown, node(), undefined), - []; - _Other -> - [] - end. - - - - -get_table_list(_Node, true, ets, SysTabHidden) -> - get_ets_tables(SysTabHidden); -get_table_list(Node, false, ets, SysTabHidden) -> - case rpc:block_call(Node, ?MODULE, get_ets_tables, [SysTabHidden]) of - {badrpc, Reason} -> - throw({badrpc,Reason}); - Result -> - Result - end; -get_table_list(_Node, true, mnesia, SysTabHidden) -> - get_mnesia_tables(SysTabHidden); -get_table_list(Node, false, mnesia, SysTabHidden) -> - case rpc:block_call(Node, ?MODULE, get_mnesia_tables, [SysTabHidden]) of - {badrpc,Reason} -> - throw({badrpc,Reason}); - Result -> - Result - end. - - - - -analyze_error(Cause, Node, Table) -> - case Cause of - {badrpc, {'EXIT', {badarg,_Reason}}} -> - done; %% Table has ceased to exist. - {'EXIT', {badarg, {ets,local_info,_Args}}} -> - done; - - {badrpc, nodedown} -> - handle_error(nodedown, Node, Table); - {'EXIT', nodedown} -> - handle_error(nodedown, Node, Table); - - {'EXIT', {aborted, {node_not_running,_ErrNode}}} -> - handle_error(mnesia_not_started, Node, Table); - {'EXIT', {'EXIT', {aborted, {node_not_running,_ErrNode}}}} -> - handle_error(mnesia_not_started, Node, Table); - {badrpc, {'EXIT', {aborted, {node_not_running,_ErrNode}}}} -> - handle_error(mnesia_not_started, Node, Table); - {'EXIT', {undef, {mnesia,_Fcn,_Args,_}}} -> - handle_error(mnesia_not_started, Node, Table); - - {'EXIT', Reason} -> - handle_error({unexpected_error,Reason}, Node, Table); - Error when is_tuple(Error) -> - handle_error({unexpected_error,Error}, Node, Table) - end. - - - -handle_error(mnesia_not_started, _Node, _Table) -> - gs:config(win, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(win, "TV Notification", ["Mnesia not started!"]); - haiku -> - tv_utils:notify(win, "TV Notification", ["Mnesia is stopped.", - "We wish to reach all data", - "But we never will."]) - end; -handle_error(nodedown, _Node, _Table) -> - gs:config(win, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(win, "TV Notification", ["The selected node is down!"]); - haiku -> - Msg = ["With searching comes loss", - "And the presence of absence:", - "Node is down."], - tv_utils:notify(win, "TV Notification", Msg) - end, - self() ! nodedown; -handle_error({unexpected_error,Cause}, _Node, _Table) -> - io:format("Unexpected error: ~p~n", [Cause]), - gs:config(win, [beep]). - - - - -loop(KindOfTable,CurrNode,MarkedCell,GridLines, - WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> - receive - - {gs, Gridline, click, {grid,Readable}, [Col,Row,Text | _]} when Text =/= "" -> - unmark_cell(MarkedCell, Tables), - NewMarkedCell = mark_cell({Gridline, Col, Row}, MarkedCell, Readable), - loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, _Gridline, click, {grid,_Readable}, [_Col,_Row,"" | _]} -> - NewMarkedCell = unmark_cell(MarkedCell, Tables), - loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, Gridline, doubleclick, {grid,Data}, [?NAME_COL,Row,Text | _]} when Text =/= "" -> - unmark_cell(MarkedCell, Tables), - NewMarkedCell = mark_cell({Gridline, ?NAME_COL, Row}, undefined, Data), - {Table, Name, Readable} = get_table_id(KindOfTable, Row, Tables), - case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of - Children -> - {FinalMarkedCell, NewTables, NewGridLines} = - refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines, - UnreadHidden,SysTabHidden,SortKey, Children), - loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables, - Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - NewChildren -> - loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren) - end; - - - {gs, Gridline, doubleclick, {grid,Data}, [?ID_COL,Row,Text | _]} when Text =/= "" -> - unmark_cell(MarkedCell, Tables), - NewMarkedCell = mark_cell({Gridline, ?ID_COL, Row}, undefined, Data), - {Table, Name, Readable} = get_table_id(KindOfTable, Row, Tables), - case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of - Children -> - {FinalMarkedCell, NewTables, NewGridLines} = - refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines, - UnreadHidden,SysTabHidden,SortKey, Children), - loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables, - Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - NewChildren -> - loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren) - end; - - - {gs, Gridline, doubleclick, {grid,Data}, [?INFO_COL,Row,Text | _]} when Text =/= "" -> - unmark_cell(MarkedCell, Tables), - NewMarkedCell = mark_cell({Gridline, ?INFO_COL, Row}, undefined, Data), - {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables), - case start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children) of - Children -> - {FinalMarkedCell, NewTables, NewGridLines} = - refresh_window(NewMarkedCell,Tables,KindOfTable,CurrNode,GridLines, - UnreadHidden,SysTabHidden,SortKey, Children), - loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize,NewTables, - Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - NewChildren -> - loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren) - end; - - - {gs, Gridline, doubleclick, {grid,Data}, [?PID_COL,Row,Text | _]} when Text =/= "" -> - unmark_cell(MarkedCell, Tables), - NewMarkedCell = mark_cell({Gridline, ?PID_COL, Row}, undefined, Data), - OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)), - NewChildren = start_pman(OwnerPid, Children), - loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey, NewChildren); - - - {gs, Gridline, doubleclick, {grid,Data}, [?PROCNAME_COL,Row,Text | _]} when Text =/= "" -> - unmark_cell(MarkedCell, Tables), - NewMarkedCell = mark_cell({Gridline, ?PROCNAME_COL, Row}, undefined, Data), - OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)), - NewChildren = start_pman(OwnerPid, Children), - loop(KindOfTable,CurrNode,NewMarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey, NewChildren); - - -%% {gs, win, configure, _Data, [Width, Height | _]} when {Width,Height} /= WinSize -> - Msg0 = {gs, win, configure, _Data, [Width0, Height0 | _]} - when {Width0,Height0} =/= WinSize -> - {gs, win, configure, _, [Width,Height|_]} = flush_msgs(Msg0), - - NewSize = resize_window(Width, Height, length(Tables)), - loop(KindOfTable,CurrNode,MarkedCell,GridLines,NewSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, _Id, click, update, _Args} -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} = - update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey), - update_tv_info(Children), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, _Id, click, open_table, _Args} -> - {Table, Name, Readable} = get_table_id(KindOfTable, element(3, MarkedCell), - Tables), - case start_tv_browser(Table,CurrNode,Name,KindOfTable,Readable,Children) of - Children -> - {NewMarkedCell, NewTables, NewGridLines} = - refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines, - UnreadHidden,SysTabHidden,SortKey, Children), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables, - Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - NewChildren -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren) - end; - - - {gs, _Id, click, new_table, _Args} -> - NewChildren = start_tv_new_table(CurrNode, Children), - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren); - - - {gs, _Id, click, select_node, _Args} -> - show_tv_nodewin(Children), - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, _Id, click, show_mnesia, _Args} when KindOfTable =:= ets -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - gs:config(label2, [{fg, ?DISABLED_COLOR}]), - gs:config(sort_table_id, [{enable, false}]), - NewSortKey = - case SortKey of - ?ID_ELEM -> - gs:config(sort_table_name, [{select,true}]), - ?NAME_ELEM; - _Other -> - SortKey - end, - {NewTables, NewGridLines} = - update_grid(mnesia, CurrNode, GridLines, UnreadHidden, SysTabHidden, NewSortKey), - gs:config(win, [{cursor,arrow}]), - loop(mnesia,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,SysTabHidden,NewSortKey,Children); - - - {gs, _Id, click, show_ets, _Args} when KindOfTable =:= mnesia -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - gs:config(label2, [{fg, ?NORMAL_FG_COLOR}]), - gs:config(label3, [{fg, ?NORMAL_FG_COLOR}]), - gs:config(label4, [{fg, ?NORMAL_FG_COLOR}]), - {NewTables, NewGridLines} = - update_grid(ets, CurrNode, GridLines, UnreadHidden, SysTabHidden,SortKey), - %% gs:config(show_unreadable, [{enable, true}, - %% {select, not(UnreadHidden)}]), - gs:config(sort_table_id, [{enable, true}]), - gs:config(win, [{cursor,arrow}]), - loop(ets,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, _Id, click, show_system, _Args} when SysTabHidden -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} - = update_grid(KindOfTable, CurrNode, GridLines, UnreadHidden, false, SortKey), - gs:config(show_system, [{data, hide_system}]), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,false,SortKey,Children); - - - {gs, _Id, click, hide_system, _Args} when not SysTabHidden -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} = - update_grid(KindOfTable, CurrNode, GridLines, UnreadHidden, true, SortKey), - gs:config(show_system, [{label, {text, " System Tables "}}, - {data, show_system}]), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,true,SortKey,Children); - - - {gs, _Id, click, show_unreadable, _Args} when UnreadHidden -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} - = update_grid(KindOfTable, CurrNode, GridLines, false, SysTabHidden, SortKey), - gs:config(show_unreadable, [{data, hide_unreadable}]), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - false,SysTabHidden,SortKey,Children); - - - {gs, _Id, click, hide_unreadable, _Args} when not UnreadHidden -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} = - update_grid(KindOfTable, CurrNode, GridLines, true, SysTabHidden, SortKey), - gs:config(show_unreadable, [{label, {text, " Unreadable Tables "}}, - {data, show_unreadable}]), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - true,SysTabHidden,SortKey,Children); - - - {gs, _Id, click, show_info, _Args} -> - {Table, _Name, _Readable} = get_table_id(KindOfTable, element(3,MarkedCell), - Tables), - case start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children) of - Children -> - {NewMarkedCell, NewTables, NewGridLines} = - refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines, - UnreadHidden,SysTabHidden,SortKey, Children), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables, - Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - NewChildren -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren) - end; - - - {gs, _Id, click, sort_table_name, _Args} when SortKey =/= ?NAME_ELEM -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} = - update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?NAME_ELEM), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,SysTabHidden,?NAME_ELEM,Children); - - - {gs, _Id, click, sort_table_id, _Args} when SortKey =/= ?ID_ELEM -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} = - update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?ID_ELEM), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,SysTabHidden,?ID_ELEM,Children); - - - {gs, _Id, click, sort_owner_name, _Args} when SortKey =/= ?PROCNAME_ELEM -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} = - update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden, - ?PROCNAME_ELEM), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,SysTabHidden,?PROCNAME_ELEM,Children); - - - {gs, _Id, click, sort_owner_pid, _Args} when SortKey =/= ?PID_ELEM -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} = - update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,?PID_ELEM), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,SysTabHidden,?PID_ELEM,Children); - - - {gs, _Id, click, trace_process, _Args} -> - OwnerPid = element(?PID_ELEM, lists:nth(element(3,MarkedCell), Tables)), - NewChildren = start_pman(OwnerPid, Children), - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren); - - - {gs, _Id, click, help_button, _Args} -> - HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]), - tool_utils:open_help(win, HelpFile), - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, _Id, click, otp_help_button, _Args} -> - IndexFile = filename:join([code:root_dir(), "doc", "index.html"]), - tool_utils:open_help(win, IndexFile), - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, win, configure, _Data, _Args} -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, _Id, click, exit_button, _Args} -> - lists:foreach( - fun({Pid,pman,_OP}) -> - exit(Pid,kill); - (_) -> - done - end, - Children), - exit(normal); - - - {gs, _Id, click, show_haiku, _Args} -> - gs:config(win, [{cursor,busy}]), - gs:config(show_haiku, [{data, hide_haiku}]), - lists:foreach( - fun({Pid,tv_info,_Data}) -> - Pid ! {error_msg_mode,haiku}; - ({Pid,tv_browser,_Data}) -> - Pid ! {error_msg_mode,haiku}; - ({Pid,tv_nodewin,_Data}) -> - Pid ! {error_msg_mode,haiku}; - ({Pid,tv_new_table,_Data}) -> - Pid ! {error_msg_mode,haiku}; - (_Other) -> - done - end, - Children), - put(error_msg_mode, haiku), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, _Id, click, hide_haiku, _Args} -> - gs:config(win, [{cursor,busy}]), - gs:config(show_haiku, [{data, show_haiku}]), - lists:foreach( - fun({Pid,tv_info,_Data}) -> - Pid ! {error_msg_mode,normal}; - ({Pid,tv_browser,_Data}) -> - Pid ! {error_msg_mode,normal}; - ({Pid,tv_nodewin,_Data}) -> - Pid ! {error_msg_mode,normal}; - ({Pid,tv_new_table,_Data}) -> - Pid ! {error_msg_mode,normal}; - (_Other) -> - done - end, - Children), - put(error_msg_mode, normal), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {gs, win, destroy, _Data, _Args} -> - lists:foreach( - fun({Pid,pman,_OP}) -> - exit(Pid,kill); - (_) -> - done - end, - Children), - exit(normal); - - - {gs, win, keypress, _Data, [Key, _, _, 1 | _]} -> - case lists:keysearch(Key, 1, Shortcuts) of - {value, {Key, Value}} -> - handle_keypress(Value,KindOfTable,CurrNode,MarkedCell, - GridLines,WinSize,Tables, Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - false -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children) - end; - - - {gs, win, keypress, _Data, _Args} -> - loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - - {tv_new_node, _Sender, NewCurrNode} -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} = - update_grid(KindOfTable,NewCurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey), - update_tv_info(Children), - update_tv_browser(Children), - NewChildren = - case replace_node_name(NewCurrNode, CurrNode) of - false -> - Children; - true -> - update_node_name(Children) - end, - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,NewCurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren); - - - {tv_start_infowin, Table, Node, LocalNode, TableType} -> - case start_tv_info(Table, Node, LocalNode, TableType, Children) of - Children -> - {NewMarkedCell, NewTables, NewGridLines} = - refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines, - UnreadHidden,SysTabHidden,SortKey, Children), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables, - Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - NewChildren -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren) - end; - - - {tv_update_infowin, Table, Node, _Type} -> - case get_tv_info_pid(Table, Node, Children) of - undefined -> - done; - Pid -> - Pid ! #info_update_table_info{sender=self()} - end, - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize, - Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - - - {tv_new_table, NewTabWinPid, Node, Name, Options, KindOfTableToCreate, _Readable, false} -> - case create_table(KindOfTableToCreate, Node, Node =:= node(), Name, Options, - NewTabWinPid) of - error -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize, - Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - _TabId -> - case KindOfTable of - mnesia -> - done; - ets -> - self() ! {gs, tv_main, click, update, []} - end, - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables, - Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) - end; - - - - {tv_new_table, NewTabWinPid, Node, Name, Options, KindOfTableToCreate, Readable, true} -> - case create_table(KindOfTableToCreate, Node, Node =:= node(), Name, Options, - NewTabWinPid) of - error -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize, - Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - TabId -> - case start_tv_browser(TabId,Node,Name,KindOfTableToCreate,Readable,Children) of - Children -> - {FinalMarkedCell, NewTables, NewGridLines} = - case KindOfTable of - mnesia -> - {MarkedCell, Tables, GridLines}; - ets -> - refresh_window(MarkedCell,Tables,KindOfTable, - CurrNode,GridLines,UnreadHidden, - SysTabHidden,SortKey, Children) - end, - loop(KindOfTable,CurrNode,FinalMarkedCell,NewGridLines,WinSize, - NewTables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - NewChildren -> - case KindOfTable of - mnesia -> - done; - ets -> - self() ! {gs, tv_main, click, update, []} - end, - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables, - Shortcuts,UnreadHidden,SysTabHidden,SortKey,NewChildren) - end - end; - - - - {'EXIT', Pid, _Reason} -> - case lists:keysearch(Pid, 1, Children) of - false -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize, - Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - {value, {Pid,Prog,_Data}} -> - NewChildren = - case Prog of - tv_nodewin -> - lists:keydelete(Pid, 1, Children) ++ start_tv_nodewin(CurrNode); - _Other -> - lists:keydelete(Pid, 1, Children) - end, - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize, - Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,NewChildren) - end; - - - _Other -> - loop(KindOfTable, CurrNode, MarkedCell, GridLines, WinSize, Tables, Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children) - end. - - -flush_msgs(Msg0 = {gs, Win, Op, _, _}) -> - receive Msg = {gs, Win,Op,_,_} -> - flush_msgs(Msg) - after 100 -> - Msg0 - end. - -handle_keypress(open_table,KindOfTable,CurrNode,MarkedCell,GridLines, - WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> - NewChildren = - case MarkedCell of - {undefined,_,_} -> - case get(error_msg_mode) of - normal -> - gs:config(win, [beep]), - tv_utils:notify(win, "TV Notification", "No table selected!"); - haiku -> - Msg = ["Rather than a beep", - "Or a rude error message", - "These words: make a choice."], - tv_utils:notify(win, "TV Notification", Msg) - end, - Children; - _OtherCell -> - {Table, Name, Readable} = get_table_id(KindOfTable, element(3, MarkedCell), - Tables), - start_tv_browser(Table, CurrNode, Name, KindOfTable, Readable, Children) - end, - case NewChildren of - Children -> - {NewMarkedCell, NewTables, NewGridLines} = - refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,UnreadHidden, - SysTabHidden, SortKey, Children), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables, - Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - _Other -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren) - end; - - -handle_keypress(update,KindOfTable,CurrNode,MarkedCell,GridLines, - WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTabs, NewGrLines} = - update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey), - update_tv_info(Children), - gs:config(win, [{cursor,arrow}]), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGrLines,WinSize,NewTabs,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - -handle_keypress(show_mnesia,ets,CurrNode,MarkedCell,GridLines, - WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - gs:config(label2, [{fg, ?DISABLED_COLOR}]), - gs:config(label3, [{fg, ?DISABLED_COLOR}]), - gs:config(label4, [{fg, ?DISABLED_COLOR}]), - gs:config(show_unreadable, [{label, {text, " Unreadable Tables "}}, - {data, show_unreadable}]), - %% gs:config(show_unreadable, [{enable, false}, - %% {select, false}]), - gs:config(sort_table_id, [{enable, false}]), - NewSortKey = - case SortKey of - ?ID_ELEM -> - gs:config(sort_table_name, [{select,true}]), - ?NAME_ELEM; - _Other -> - SortKey - end, - {NewTables, NewGridLines} = - update_grid(mnesia,CurrNode,GridLines,UnreadHidden,SysTabHidden,NewSortKey), - gs:config(win, [{cursor,arrow}]), - loop(mnesia,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,SysTabHidden,NewSortKey,Children); - - - -handle_keypress(show_ets,mnesia,CurrNode,MarkedCell,GridLines, - WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - gs:config(label2, [{fg, ?NORMAL_FG_COLOR}]), - gs:config(label3, [{fg, ?NORMAL_FG_COLOR}]), - gs:config(label4, [{fg, ?NORMAL_FG_COLOR}]), - {NewTables, NewGridLines} = - update_grid(ets,CurrNode,GridLines,UnreadHidden,SysTabHidden,SortKey), - %% gs:config(show_unreadable, [{enable, true}, - %% {select, not(UnreadHidden)}]), - gs:config(sort_table_id, [{enable, true}]), - gs:config(win, [{cursor,arrow}]), - loop(ets,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - -handle_keypress(trace_process,KindOfTable,CurrNode,MarkedCell,GridLines, - WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> - NewChildren = - case MarkedCell of - {_Id, ?PID_COL, Row} -> - OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)), - start_pman(OwnerPid, Children); - {_Id, ?PROCNAME_COL, Row} -> - OwnerPid = element(?PID_ELEM, lists:nth(Row, Tables)), - start_pman(OwnerPid, Children); - _Other -> - Children - end, - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey, NewChildren); - - -handle_keypress(select_node,KindOfTable,CurrNode,MarkedCell,GridLines, - WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> - show_tv_nodewin(Children), - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - - -handle_keypress(show_info,KindOfTable,CurrNode,MarkedCell,GridLines, - WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> - NewChildren = - case MarkedCell of - {_Id, ?NAME_COL, Row} -> - {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables), - start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children); - {_Id, ?ID_COL, Row} -> - {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables), - start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children); - {_Id, ?INFO_COL, Row} -> - {Table, _Name, _Readable} = get_table_id(KindOfTable, Row, Tables), - start_tv_info(Table, CurrNode, CurrNode =:= node(), KindOfTable, Children); - _OtherCell -> - Children - end, - case NewChildren of - Children -> - {NewMarkedCell, NewTables, NewGridLines} = - refresh_window(MarkedCell,Tables,KindOfTable,CurrNode,GridLines,UnreadHidden, - SysTabHidden, SortKey, Children), - loop(KindOfTable,CurrNode,NewMarkedCell,NewGridLines,WinSize,NewTables, - Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children); - _Other -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,NewChildren) - end; - - -handle_keypress(help_button,KindOfTable,CurrNode,MarkedCell,GridLines, - WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> - HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]), - tool_utils:open_help(win, HelpFile), - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children); - -handle_keypress(exit_button,_KindOfTable,_CurrNode,_MarkedCell,_GridLines, - _WinSize,_Tables,_Shortcuts,_UnreadHidden,_SysTabHidden,_SortKey,Children) -> - lists:foreach( - fun({Pid,pman,_OP}) -> - exit(Pid,kill); - (_) -> - done - end, - Children), - exit(normal); - - -handle_keypress(_Any,KindOfTable,CurrNode,MarkedCell,GridLines, - WinSize,Tables,Shortcuts,UnreadHidden,SysTabHidden,SortKey,Children) -> - loop(KindOfTable,CurrNode,MarkedCell,GridLines,WinSize,Tables,Shortcuts, - UnreadHidden,SysTabHidden,SortKey,Children). - - - - -refresh_window(MarkedCell,Tables,KindOfTable, - CurrNode,GridLines,UnreadHidden,SysTabHidden, SortKey, Children) -> - gs:config(win, [{cursor,busy}]), - NewMarkedCell = unmark_cell(MarkedCell, Tables), - {NewTables, NewGridLines} = - update_grid(KindOfTable,CurrNode,GridLines,UnreadHidden,SysTabHidden, - SortKey), - update_tv_info(Children), - gs:config(win, [{cursor,arrow}]), - {NewMarkedCell, NewTables, NewGridLines}. - - - - - -get_table_id(mnesia, Row, Tables) -> - TabTuple = lists:nth(Row, Tables), - Readable = element(?READABLE_ELEM, TabTuple), - Id = element(?NAME_ELEM, TabTuple), - {Id, Id, Readable}; -get_table_id(ets, Row, Tables) -> - TabTuple = lists:nth(Row, Tables), - Readable = element(?READABLE_ELEM, TabTuple), - Name = element(?NAME_ELEM, TabTuple), - case element(?NAMED_TABLE_ELEM, TabTuple) of - false -> - {element(?ID_ELEM, TabTuple), Name, Readable}; - _Other -> - {Name, Name, Readable} - end. - - - -replace_node_name('nonode@nohost', 'nonode@nohost') -> - %% Still undistributed... - false; -replace_node_name(_Node, _OldNode) when node() =:= 'nonode@nohost' -> - %% No longer distributed, but previously was! - true; -replace_node_name(_Node, 'nonode@nohost') -> - %% The system has been distributed! - true; -replace_node_name(_Node, _OldNode) -> - false. - - - -update_node_name(Children) when node() =:= 'nonode@nohost' -> - %% We have been distributed, but no longer are! - %% We change all node names stored to 'nonode@nohost'! - %% This works because we *will* receive exit signals - %% for those processes that have died on other nodes, - %% whereupon these processes will be removed from the - %% 'Children' list. - lists:map(fun({Pid, Prog, {Table,_Node}}) -> - {Pid, Prog, {Table,'nonode@nohost'}}; - (H) -> - H - end, - Children); -update_node_name(Children) -> - %% We have become distributed! - %% Change all occurrences of 'nonode@nohost' - %% to the new current node name! - HomeNode = node(), - lists:map(fun({Pid, Prog, {Table,'nonode@nohost'}}) -> - {Pid, Prog, {Table,HomeNode}}; - (H) -> - H - end, - Children). - - - - -show_tv_nodewin(Children) -> - {value, {Pid,tv_nodewin,_Node}} = lists:keysearch(tv_nodewin, 2, Children), - Pid ! show_window. - - - -update_tv_info(Children) -> - Sender = self(), - lists:foreach(fun({Pid,tv_info,{_Table,_Node}}) -> - Pid ! #info_update_table_info{sender=Sender}; - (_) -> - done - end, - Children). - - - -update_tv_browser(Children) -> - lists:foreach(fun({Pid,tv_browser,{_Table,_Node}}) -> - Pid ! check_node; - (_) -> - done - end, - Children). - - - -get_tv_info_pid(TabId,Node,Children) -> - TvInfoChildren = [X || X <- Children, element(2,X) =:= tv_info], - case lists:keysearch({TabId,Node}, 3, TvInfoChildren) of - {value, {Pid, tv_info, {_Table,Node}}} -> - Pid; - _Other -> - undefined - end. - - - -start_tv_browser(Tab,Node,_Name,KindOfTable,false,Children) -> - gs:config(win, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(win, "TV Notification", - ["The selected table is unreadable!", - "Only table information may be viewed!"]); - haiku -> - Msg = ["Table protected.", - "The answers that you're seeking", - "will remain unknown."], - tv_utils:notify(win, "TV Notification", Msg) - end, - start_tv_info(Tab, Node, Node =:= node(), KindOfTable, Children); -start_tv_browser(Table,Node,Name,KindOfTable,_Readable,Children) -> - TvBrowserChildren = [X || X <- Children, element(2,X) =:= tv_browser], - case lists:keysearch({Table,Node}, 3, TvBrowserChildren) of - {value, {BPid,tv_browser,{Table,Node}}} -> - BPid ! raise, - Children; - _Other -> - %% Check that table still exists! - case table_still_there(KindOfTable, Node, Node =:= node(), Table, Name) of - true -> - LocalNode = (Node =:= node()), - NewBPid = tv:start_browser(Node, LocalNode, Table, KindOfTable, Name, - get(error_msg_mode)), - [{NewBPid, tv_browser, {Table,Node}} | Children]; - _TableDead -> - gs:config(win, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(win, "TV Notification", - ["The table no longer exists!"]); - haiku -> - Msg = ["A table that big?", - "It might be very useful.", - "But now it is gone."], - tv_utils:notify(win, "TV Notification", Msg) - end, - Children - end - end. - - - - - -table_still_there(ets, Node, LocalNode, Table, Name) -> - case catch tv_ets_rpc:all(Node, LocalNode) of - Tables when is_list(Tables) -> - case lists:member(Table, Tables) of - true -> - true; - false -> %% May be a named table... - lists:keymember(Name, 1, Tables) - end; - Error -> - analyze_error(Error, Node, Table), - false - end; -table_still_there(mnesia, Node, LocalNode, Table, Name) -> - case catch tv_mnesia_rpc:system_info(Node, LocalNode, tables) of - Tables when is_list(Tables) -> - lists:member(Name, Tables); - Error -> - analyze_error(Error, Node, Table), - false - end. - - - - - - -start_tv_info(Table, Node, LocalNode, KindOfTable, Children) -> - TvInfoChildren = [X || X <- Children, element(2,X) =:= tv_info], - case lists:keysearch({Table,Node}, 3, TvInfoChildren) of - {value, {Pid,tv_info,{Table,Node}}} -> - Pid ! #info_raise_window{sender = self()}, - Children; - _Other -> - %% May have started a browser but no info window! - %% Info window may have been started from that browser, but - %% don't bother with checking *that*. - Pid = spawn_link(tv_info, info, [self(), Node, LocalNode, Table, KindOfTable, - get(error_msg_mode)]), - [{Pid, tv_info, {Table,Node}} | Children] - end. - - - - - -start_tv_new_table(CurrNode, Children) -> - TvNewTableChild = [X || X <- Children, element(2,X) =:= tv_new_table], - case TvNewTableChild of - [{Pid,tv_new_table,undefined}] -> - Pid ! raise, - Children; - [] -> - Pid = tv_new_table:start(CurrNode, get(error_msg_mode)), - [{Pid, tv_new_table, undefined} | Children] - end. - - - - -create_table(mnesia, _Node, _LocalNode, _TabName, _Options, _NewTabWinPid) -> - error; -create_table(ets, Node, LocalNode, TabName, Options, NewTabWinPid) -> - case tv_table_owner:create(ets, Node, LocalNode, TabName, Options) of - {ok, TabId} -> - NewTabWinPid ! ok, - TabId; - error -> - NewTabWinPid ! error, - error - end. - - - - -start_pman(OwnerPid, Children) -> - Pid = pman_shell:start(OwnerPid), - [{Pid,pman,OwnerPid} | Children]. - - - - -update_grid(TableType, CurrNode, GridLines, UnreadHidden, SysTabHidden,SortKey) -> - NewTables = get_tables(CurrNode, TableType, UnreadHidden, SysTabHidden,SortKey), - TabStr = case TableType of - mnesia -> - "Mnesia "; - ets -> - "ETS " - end, - NodeStr = atom_to_list(CurrNode), - gs:config(win, [{title, "[TV] " ++ TabStr ++ "tables on " ++ NodeStr}]), - gs:config(grid, [{rows, {1, get_nof_rows(length(NewTables), gs:read(grid,height))}}]), - NewGridLines = update_gridlines(NewTables, GridLines, 1), - {NewTables, NewGridLines}. - - - -unmark_cell({undefined, AnyCol, AnyRow}, _Tables) -> - {undefined, AnyCol, AnyRow}; -unmark_cell({Id, Col, Row}, Tables) -> - disable_menus(), - TabTuple = lists:nth(Row, Tables), - ReadableTable = element(?READABLE_ELEM, TabTuple), - NamedTable = element(?NAMED_TABLE_ELEM, TabTuple), - BgColor = - case ReadableTable of - false -> - ?UNREADABLE_BG_COLOR; - _Other1 -> - ?READABLE_BG_COLOR - end, - - FgColor = - case NamedTable of - false when Col =:= ?NAME_COL -> - ?UNNAMED_FG_COLOR; - _Other2 -> - ?NORMAL_FG_COLOR - end, - - gs:config(Id, [{bg, {Col, BgColor}}, - {fg, {Col, FgColor}}]), - {undefined, undefined, undefined}. - - - - -mark_cell({Id,Col,Row}, {Id,Col,Row}, _Readable) -> - {undefined, undefined, undefined}; -mark_cell({Id,Col,Row}, _Any, Readable) -> - case lists:member(Col, ?POSSIBLE_MARK_COLS) of - true -> - enable_menus(Col, Readable), - gs:config(Id, [{bg, {Col, ?GRID_MARK_COLOR}}, - {fg, {Col, ?NORMAL_FG_COLOR}}]), - {Id, Col,Row}; - false -> - {undefined, undefined, undefined} - end. - - -disable_menus() -> - disable_open_menu(), - disable_trace_menu(), - disable_info_menu(). - - -enable_menus(?ID_COL, true) -> - enable_open_menu(), - enable_info_menu(); -enable_menus(?ID_COL, {notext}) -> - enable_open_menu(), - enable_info_menu(); -enable_menus(?ID_COL, false) -> - enable_info_menu(); -enable_menus(?NAME_COL, true) -> - enable_open_menu(), - enable_info_menu(); -enable_menus(?NAME_COL, {notext}) -> - enable_open_menu(), - enable_info_menu(); -enable_menus(?NAME_COL, false) -> - enable_info_menu(); -enable_menus(?PID_COL, _Any) -> - enable_trace_menu(); -enable_menus(?PROCNAME_COL, _Any) -> - enable_trace_menu(); -enable_menus(?INFO_COL, _Any) -> - enable_info_menu(); -enable_menus(_Col, _Any) -> - done. - - - -resize_window(Width, Height, NofElems) -> - WinWidth = lists:max([Width, ?MIN_WIN_WIDTH]), - WinHeight = lists:max([Height, ?MIN_WIN_HEIGHT]), - gs:config(win, [{width, WinWidth}, - {height, WinHeight} - ]), - {BgWidth, BgHeight, FgWidth, FgHeight} = get_frame_coords(WinWidth, WinHeight), - {GridWidth, GridHeight} = get_grid_coords(FgWidth, FgHeight), - ColWidths = get_col_widths(?COL_WIDTHS, GridWidth), - resize_header_labels(ColWidths, - [label1,label2,label3,label4,label5], - ?GRID_XPOS), - gs:config(bgframe, [{width, BgWidth}, - {height, BgHeight} - ]), - gs:config(fgframe, [{width, FgWidth}, - {height, FgHeight} - ]), - gs:config(grid, [{width, GridWidth}, - {height, GridHeight}, - {columnwidths, ColWidths}, - {rows, {1, get_nof_rows(NofElems, GridHeight)}} - ]), - {WinWidth, WinHeight}. - - - - -create_window(Tables) -> - gs:window(win, gs:start(), [{width, ?WIN_WIDTH}, - {height, ?WIN_HEIGHT}, - {bg, ?DEFAULT_BG_COLOR}, - {title, "[TV] ETS tables on " ++ - atom_to_list(node())}, - {destroy, true}, - {configure, true}, - {keypress, true} - ]), - - ShortcutList = create_menus(), - - disable_menus(), - - {BgFrameWidth, BgFrameHeight, FgFrameWidth, FgFrameHeight} = - get_frame_coords(?WIN_WIDTH, ?WIN_HEIGHT), - - {GridWidth, GridHeight} = get_grid_coords(FgFrameWidth, FgFrameHeight), - - ColWidths = get_col_widths(?COL_WIDTHS, GridWidth), - - gs:frame(bgframe, win, [{width, BgFrameWidth}, - {height, BgFrameHeight}, - {x, ?GRID_XPOS}, - {y, ?GRID_YPOS}, - {bg, {0,0,0}} - ]), - gs:frame(fgframe, bgframe, [{width, FgFrameWidth}, - {height, FgFrameHeight}, - {x, 0}, - {y, 1}, - {bg, ?DEFAULT_BG_COLOR} - ]), - - - create_header_labels(ColWidths, ?HEADER_LABELS), - gs:grid(grid, fgframe, [{width, GridWidth}, - {height, GridHeight}, - {x, 0}, - {y, -1}, - {hscroll,bottom}, - {vscroll,right}, - {rows, {1, get_nof_rows(length(Tables), GridHeight)}}, - {columnwidths, ColWidths}, - {fg, ?NORMAL_FG_COLOR}, - {bg, {255,255,255}}, - {font, ?FONT} - ]), - GridLines = update_gridlines(Tables, [], 1), - {{undefined,undefined,undefined}, GridLines, {?WIN_WIDTH,?WIN_HEIGHT}, ShortcutList}. - - - - -get_frame_coords(WinWidth, WinHeight) -> - BgWidth = WinWidth - 2 * ?GRID_XPOS, - BgHeight = WinHeight - ?GRID_YPOS - ?GRID_XPOS, - FgWidth = BgWidth, - FgHeight = BgHeight - 1, - {BgWidth, BgHeight, FgWidth, FgHeight}. - - - - -get_grid_coords(ParentWidth, ParentHeight) -> - {ParentWidth, ParentHeight + 1}. - - - -get_col_widths(Cols, GridWidth) -> - SbWidth = 25, %% OK, OK, don't bother about it, this constant makes it work... :-/ - FixColWidthSum = lists:sum(lists:map(fun(H) -> - lists:nth(H, Cols) - end, - ?FIX_WIDTH_COLS)), - AvailableWidth = GridWidth - FixColWidthSum - SbWidth, - OriginalWidth = ?WIN_WIDTH - 2 * ?GRID_XPOS - FixColWidthSum - SbWidth, - get_col_widths(1, Cols, AvailableWidth, OriginalWidth). - - - -get_col_widths(N, [H | T], AvailWidth, OrigWidth) -> - NewColWidth = - case lists:member(N, ?FIX_WIDTH_COLS) of - true -> - H; - _Other -> - round(H * (AvailWidth / OrigWidth) + 0.1) - end, - [NewColWidth | get_col_widths(N + 1, T, AvailWidth, OrigWidth)]; -get_col_widths(_N, [], _AvailWidth, _OrigWidth) -> - []. - - - -create_header_labels(ColWidths, Text) -> - create_header_labels(ColWidths, Text, 1, ?GRID_XPOS). - - - -create_header_labels([W | T], [{Name, Text} | TextT], N, Xpos) -> - Ypos = ?GRID_YPOS - 20, - gs:label(Name, win, [{width, W + 1 - 3}, - {height, 20}, - {x, Xpos + 1 + 3}, - {y, Ypos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, ?NORMAL_FG_COLOR}, - {font, ?HEADER_FONT}, - {align, w}, - {label, {text, Text}} - ]), - create_header_labels(T, TextT, N + 1, Xpos + 1 + W); -create_header_labels([], [], _N, _Xpos) -> - done. - - - -resize_header_labels([W | T], [Name | NT], Xpos) -> - gs:config(Name, [{width, W + 1 - 3}, - {x, Xpos + 1 + 3} - ]), - resize_header_labels(T, NT, Xpos + 1 + W); -resize_header_labels([], [], _Xpos) -> - done. - - - -disable_open_menu() -> - gs:config(open_table, [{enable,false}]). - - -disable_info_menu() -> - gs:config(show_info, [{enable,false}]). - -disable_trace_menu() -> - gs:config(trace_process, [{enable,false}]). - - -enable_open_menu() -> - gs:config(open_table, [{enable,true}]). - - -enable_info_menu() -> - gs:config(show_info, [{enable,true}]). - - -enable_trace_menu() -> - gs:config(trace_process, [{enable,true}]). - - -create_menus() -> - gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR}]), - - HelpButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR}, - {fg, ?FIREBRICK}, % firebrick - {label, {text, " Help "}}, - {underline, 1}, - {side, right} - ]), - FileButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR}, - {fg, ?FIREBRICK}, % firebrick - {label, {text, " File "}}, - {underline, 1}, - {side, left} - ]), - ViewButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR}, - {fg, ?FIREBRICK}, % firebrick - {label, {text, " View "}}, - {underline, 1}, - {side, left} - ]), - OptionsButt = gs:menubutton(menubar, [{bg, ?DEFAULT_BG_COLOR}, - {fg, ?FIREBRICK}, % firebrick - {label, {text, " Options "}}, - {underline, 1}, - {side, left} - ]), - - HelpMenu = gs:menu(HelpButt, [{bg, ?DEFAULT_BG_COLOR}, - {fg, ?FIREBRICK}, - {disabledfg,?DISABLED_COLOR} - ]), - FileMenu = gs:menu(FileButt, [{bg, ?DEFAULT_BG_COLOR}, - {fg, ?FIREBRICK}, - {disabledfg,?DISABLED_COLOR} - ]), - - OptionsMenu = gs:menu(OptionsButt, [{bg, ?DEFAULT_BG_COLOR}, - {fg, ?FIREBRICK}, - {disabledfg,?DISABLED_COLOR} - ]), - - ViewMenu = gs:menu(ViewButt, [{bg, ?DEFAULT_BG_COLOR}, - {fg, ?FIREBRICK}, - {disabledfg,?DISABLED_COLOR} - ]), - - ShortCutList = - create_menulist([{" Help ",normal,help_button,1,h}, - separator, - {" OTP Documentation ",normal,otp_help_button,1,no_char}], HelpMenu) ++ - create_menulist([{" Open Table ",normal,open_table,1,o}, - {" New Table... ",normal,new_table,1,no_char}, - {" Table Info ",normal,show_info,7,i}, - separator, - {" Nodes... ",normal,select_node,1,n}, - separator, - {" Trace Process ",normal,trace_process,1,t}, - separator, - {" Exit ",normal, exit_button,2,x}], FileMenu) ++ - [{c,exit_button}, {'C',exit_button}] ++ - create_menulist([{" Refresh ",normal,update,1,r}, - separator, - {" Unreadable Tables ",check,show_unreadable,1,no_char}, - separator, - {" System Tables ",check,show_system,1,no_char}, - separator, - {" Sort by Name ",radio,sort_table_name,9,no_char}, - {" Sort by Id ",radio,sort_table_id,9,no_char}, - {" Sort by Owner PID ",radio,sort_owner_pid,15,no_char}, - {" Sort by Owner Name ",radio,sort_owner_name,9,no_char}, - separator, - {" Error Messages in Haiku ",check,show_haiku,1,no_char} - ], - OptionsMenu) ++ - create_menulist([{" ETS Tables ",radio,show_ets,1,e}, - {" Mnesia Tables ",radio,show_mnesia,1,m}], ViewMenu), - gs:config(show_unreadable, [{select,false}]), - gs:config(show_system, [{select,false}]), - gs:config(show_haiku, [{select,false}]), - %% Due to a bug (or some other reason), only one of the radiobuttons belonging - %% to a specified group can be selected, even if different processes have created - %% the radiobuttons! This means that, if we have started more than one tv_main - %% process, selecting one radiobutton will affect the radiobuttons in the other - %% tv_main process(es)!!! Since this is a highly undesirable bahaviour, we have to - %% create unique group names (i.e., atoms). - %% (We need to group the radiobuttons, since otherwise all created by one process - %% belongs to the same group, which also is undesirable...) - SelfStr = pid_to_list(self()), - SortGroup = list_to_atom("sorting" ++ SelfStr), - TypeGroup = list_to_atom("table_type" ++ SelfStr), - gs:config(sort_table_name, [{group,SortGroup},{select,true}]), - gs:config(sort_table_id, [{group,SortGroup}]), - gs:config(sort_owner_pid, [{group,SortGroup}]), - gs:config(sort_owner_name, [{group,SortGroup}]), - gs:config(show_ets, [{group,TypeGroup}, {select,true}]), - gs:config(show_mnesia, [{group,TypeGroup}]), - ShortCutList. - - - - - -create_menulist(List, Menu) -> - MaxLength = get_length_of_longest_menu_text(List, 0), - create_menulist(List, Menu, MaxLength). - - - - -create_menulist([], _Menu, _MaxLength) -> - []; -create_menulist([{Text, Type, Data, AccCharPos, ShortcutChar} | Rest], Menu, MaxLength) -> - ShortcutCapitalChar = - if - ShortcutChar =:= no_char -> - no_char; - true -> - CharAsciiValue = lists:nth(1, atom_to_list(ShortcutChar)), - CapitalCharValue = CharAsciiValue - ($a - $A), - list_to_atom([CapitalCharValue]) - end, - - FinalText = if - ShortcutChar =:= no_char -> - Text; - true -> - Text ++ lists:duplicate(MaxLength - length(Text), " ") ++ - " Ctrl+" ++ atom_to_list(ShortcutCapitalChar) ++ " " - end, - gs:menuitem(Data, Menu, [{bg, ?DEFAULT_BG_COLOR}, - {fg, ?FIREBRICK}, - {itemtype, Type}, - {label, {text, FinalText}}, - {underline, AccCharPos}, - {data, Data} - ]), - [{ShortcutChar, Data}, {ShortcutCapitalChar, Data} | create_menulist(Rest, Menu, MaxLength)]; -create_menulist([separator | Rest], Menu, MaxLength) -> - gs:menuitem(Menu, [{itemtype, separator}]), - create_menulist(Rest, Menu, MaxLength). - - - - - - - -get_length_of_longest_menu_text([], MaxLength) -> - MaxLength; -get_length_of_longest_menu_text([{Text, _Type, _Data, _APos, _SChar} | Rest], CurrMax) -> - L = length(Text), - if - L > CurrMax -> - get_length_of_longest_menu_text(Rest, L); - true -> - get_length_of_longest_menu_text(Rest, CurrMax) - end; -get_length_of_longest_menu_text([separator | Rest], CurrMax) -> - get_length_of_longest_menu_text(Rest, CurrMax). - - - - - - -get_nof_rows(NofElems, GridHeight) -> - lists:max([NofElems, round((GridHeight - 20) / 21) + 1]). - - - -config_gridline(LineId, TabTuple) -> - Readable = element(?READABLE_ELEM, TabTuple), - NamedTable = element(?NAMED_TABLE_ELEM, TabTuple), - {FgColor, BgColor} = - case Readable of - true -> - {?NORMAL_FG_COLOR, ?READABLE_BG_COLOR}; - false -> - {?UNREADABLE_FG_COLOR, ?UNREADABLE_BG_COLOR}; - {notext} -> - {?NORMAL_FG_COLOR, ?READABLE_BG_COLOR} - end, - - NameFgColor = - case NamedTable of - false -> - ?UNNAMED_FG_COLOR; - _Other -> - ?NORMAL_FG_COLOR - end, - - gs:config(LineId, [{bg, BgColor}, - {fg, FgColor}, - {fg, {?NAME_COL, NameFgColor}}, - {click, true}, - {doubleclick, true}, - {data, {grid,Readable}} | - - lists:map( - fun({Elem,Col}) -> - case element(Elem, TabTuple) of - {notext} -> - {text, {Col, ""}}; - Other when Elem =:= ?NAME_ELEM -> - case NamedTable of - false -> - {text, {Col, " " ++ - lists:flatten( - io_lib:write( - Other)) ++ " "}}; - _AnyOther -> - {text, {Col, " " ++ lists:flatten( - io_lib:write( - Other))}} - end; - Other -> - {text, {Col, " " ++ lists:flatten( - io_lib:write( - Other))}} - end - end, - [{?NAME_ELEM, ?NAME_COL}, - {?ID_ELEM, ?ID_COL}, - {?PID_ELEM, ?PID_COL}, - {?PROCNAME_ELEM, ?PROCNAME_COL}, - {?INFO_ELEM, ?INFO_COL}] - ) - ]). - - - - - -update_gridlines([TabTuple | TT], [LineId | GT], CurrRow) -> - config_gridline(LineId, TabTuple), - [LineId | update_gridlines(TT, GT, CurrRow + 1)]; -update_gridlines([TabTuple | TT], [], CurrRow) -> - LineId = gs:gridline(grid, [{row, CurrRow}]), - config_gridline(LineId, TabTuple), - [LineId | update_gridlines(TT, [], CurrRow + 1)]; -update_gridlines([], [LineId | GT], _CurrRow) -> - gs:destroy(LineId), - update_gridlines([], GT, _CurrRow); -update_gridlines([], [], _CurrRow) -> - []. - - - - - - - - - diff --git a/lib/tv/src/tv_main.hrl b/lib/tv/src/tv_main.hrl deleted file mode 100644 index c9db1d9484..0000000000 --- a/lib/tv/src/tv_main.hrl +++ /dev/null @@ -1,285 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2013. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% - --define(ERROR_MSG_MODE, normal). - --define(WIN_WIDTH, 745). % 779 --define(WIN_HEIGHT, 380). --define(MIN_WIN_WIDTH, 524). --define(MIN_WIN_HEIGHT, 150). - --define(FONT, {screen, 12}). --define(HEADER_FONT, {screen, [bold,italic], 12}). - --define(GRID_XPOS, 3). --define(GRID_YPOS, 68). - - -%% Unreadable tables are indicated by the background color. -%% Unnamed tables are indicated by the foreground color. - --define(NORMAL_FG_COLOR, {0,0,0}). --define(READABLE_BG_COLOR, {255,255,255}). --define(UNREADABLE_FG_COLOR, ?NORMAL_FG_COLOR). --define(UNREADABLE_BG_COLOR, {240,240,240}). -%-define(UNREADABLE_BG_COLOR, {255,250,230}). -%-define(UNREADABLE_BG_COLOR, {242,242,242}). --define(UNNAMED_FG_COLOR, {175,175,175}). -%-define(UNNAMED_FG_COLOR, {140,35,35}). - - --define(DISABLED_COLOR, {160,160,160}). - --define(NAME_ELEM, 1). --define(NAMED_TABLE_ELEM, 2). --define(ID_ELEM, 3). --define(READABLE_ELEM, 4). --define(PID_ELEM, 5). --define(PROCNAME_ELEM, 6). --define(INFO_ELEM, 7). - --define(NAME_COL, 1). --define(ID_COL, 2). --define(PID_COL, 3). --define(PROCNAME_COL, 4). --define(INFO_COL, 5). - --define(POSSIBLE_MARK_COLS, [?NAME_COL, ?ID_COL, ?PID_COL, ?PROCNAME_COL, ?INFO_COL]). --define(COL_WIDTHS, [205,131,91,197,90]). % [140,95,125,75,85,140,90]). --define(FIX_WIDTH_COLS, [2,3,5]). - - --define(HEADER_LABELS, [{label1, " Table Name"}, - % {label2, " Named Table"}, - {label2, " Table Id"}, - % {label4, " Readable"}, - {label3, " Owner Pid"}, - {label4, " Owner Name"}, - {label5, " Table Size"} - ]). - - - -%% TABLES_TO_HIDE shall contain both Mnesia and ETS tables that we want to hide. :-) - --define(SYSTEM_TABLES, [ac_tab, - asn1, - cdv_dump_index_table, - cdv_menu_table, - cdv_decode_heap_table, - cell_id, - cell_pos, - clist, - cover_internal_data_table, - cover_collected_remote_data_table, - cover_binary_code_table, - code, - code_names, - cookies, - corba_policy, - corba_policy_associations, - dets, - dets_owners, - dets_registry, - disk_log_names, - disk_log_pids, - eprof, - erl_atom_cache, - erl_epmd_nodes, - etop_accum_tab, - etop_tr, - ets_coverage_data, - file_io_servers, - global, - global_locks, - global_names, - global_names_ext, - gs_mapping, - gs_names, - gstk_db, - gstk_grid_cellid, - gstk_grid_cellpos, - gstk_grid_id, - gvar, - httpd, - id, - ig, - ign_req_index, - ign_requests, - index, - inet_cache, - inet_db, - inet_hosts, - 'InitialReferences', - int_db, - interpreter_includedirs_macros, - ir_WstringDef, - lmcounter, - locks, - pg2_table, - queue, - snmp_agent_table, - snmp_local_db2, - snmp_mib_data, - snmp_note_store, - snmp_symbolic_ets, - sticky, - sys_dist, - tid_locks, - tkFun, - tkLink, - tkPriv, - ttb, - ttb_history_table, - udp_fds, - udp_pids - ]). - - --define(MNESIA_TABLES, [alarm, - alarmTable, - evaLogDiscriminatorTable, - eva_snmp_map, - eventTable, - group, - imprec, - ir_AliasDef, - ir_ArrayDef, - ir_AttributeDef, - ir_ConstantDef, - ir_Contained, - ir_Container, - ir_EnumDef, - ir_ExceptionDef, - ir_IDLType, - ir_IRObject, - ir_InterfaceDef, - ir_ModuleDef, - ir_ORB, - ir_OperationDef, - ir_PrimitiveDef, - ir_Repository, - ir_SequenceDef, - ir_StringDef, - ir_StructDef, - ir_TypedefDef, - ir_UnionDef, - logTable, - logTransferTable, - mesh_meas, - mesh_type, - mnesia_clist, - mnesia_decision, - mnesia_transient_decision, - orber_CosNaming, - orber_objkeys, - schema, - user - ]). - - --define(UNREADABLE_MNESIA_TABLES, [schema]). - - --define(SYSTEM_OWNERS, [alarm_handler, - application_controller, - auth, - coast_server, - code_server, - cover_server_001, - dbg, - dets, - dets_sup, - disk_log_server, - disk_log_sup, - erl_epmd, - erl_prim_loader, - error_logger, - eva_log_sup, - eva_server, - eva_sup, - file_server, - file_server_2, - global_group, - global_group_check, - global_name_server, - gs_frontend, - heart, - help_main, - inet_db, - inet_gethost_native, - init, - int_db, - interpret, - jive_server, - kernel_safe_sup, - kernel_sup, - log_server, - mandel_server, - mesh_sup, - mesh_server, - mnesia_checkpoint_sup, - mnesia_dumper, - mnesia_event, - mnesia_fallback, - mnesia_init, - mnesia_kernel_sup, - mnesia_late_loader, - mnesia_locker, - mnesia_monitor, - mnesia_recover, - mnesia_snmp_sup, - mnesia_subscr, - mnesia_sup, - mnesia_tm, - net_kernel, - net_sup, - overload, - perfmon_sampler, - pxw_server, - release_handler, - %% rex, %% Otherwise we won't see tables we've created on other nodes! - rsh_starter, - sasl_safe_sup, - sasl_sup, - snmp_agent_sup, - snmp_local_db, - snmp_master_agent, - snmp_misc_sup, - snmp_note_store, - snmp_supervisor, - snmp_symbolic_store, - socket, - sounder, - ssl_socket, - take_over_monitor, - timer_server, - tk, - udp_server, - user, - winshell_controller, - xerl_copy, - xerl_monitor - ]). - - - - - - - diff --git a/lib/tv/src/tv_mnesia_rpc.erl b/lib/tv/src/tv_mnesia_rpc.erl deleted file mode 100644 index b2434fcdd3..0000000000 --- a/lib/tv/src/tv_mnesia_rpc.erl +++ /dev/null @@ -1,106 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2011. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_mnesia_rpc). - - - --export([system_info/3, - table_info/4, - transaction/3 - ]). - - - - - - -system_info(_Node, true, Key) -> - chk(catch mnesia:system_info(Key)); -system_info(Node, false, Key) -> - chk(catch rpc:block_call(Node, mnesia, system_info, [Key])). - - - - -table_info(_Node, true, Tab, Item) -> - chk(catch mnesia:table_info(Tab, Item)); -table_info(Node, false, Tab, Item) -> - chk(catch rpc:block_call(Node, mnesia, table_info, [Tab, Item])). - - - - -transaction(_Node, true, Fun) -> - chk(catch mnesia:transaction(Fun)); -transaction(Node, false, Fun) -> - chk(catch rpc:block_call(Node, mnesia, transaction, [Fun])). - - - - -chk(Result) -> - case Result of - _Anything when is_list(Result) -> - Result; - _Anything when is_atom(Result) -> - Result; - _Anything when is_integer(Result) -> - Result; - _Anything when is_pid(Result) -> - Result; - - {aborted, {bad_type, _Rec}} -> - throw(bad_format); - - {badrpc,nodedown} -> - throw(nodedown); - {'EXIT', nodedown} -> - throw(nodedown); - - {'EXIT', {aborted, {no_exists, _Table, _Arg}}} -> - throw(no_table); - - {'EXIT', {aborted, {node_not_running, _Node}}} -> - throw(mnesia_not_started); - {'EXIT', {{badarg, {gen, set_monitor_mode, _Data}}, _Info}} -> - throw(mnesia_not_started); - {'EXIT', {'EXIT', {aborted, {node_not_running,_Node}}}} -> - throw(mnesia_not_started); - {badrpc, {'EXIT', {aborted, {node_not_running,_Node}}}} -> - throw(mnesia_not_started); - {badrpc, {'EXIT', {aborted, {no_exists,_Table,_Args}}}} -> - throw(mnesia_not_started); - {badrpc, _Reason} -> - throw(mnesia_not_started); - {'EXIT', {undef, {mnesia,_Fcn,_Args,_}}} -> - throw(mnesia_not_started); - {'EXIT', {undef, {mnesia,_Fcn,_Args}}} -> - throw(mnesia_not_started); - - {'EXIT', Reason} -> - throw({unexpected_error, Reason}); - - Other when is_tuple(Other) -> - %% For example wild_pattern requests return a tuple! - Other; - - Other -> - io:format("Unexpected return value: ~p~n", [Other]) - end. - - diff --git a/lib/tv/src/tv_new_table.erl b/lib/tv/src/tv_new_table.erl deleted file mode 100644 index 779835d78a..0000000000 --- a/lib/tv/src/tv_new_table.erl +++ /dev/null @@ -1,666 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd%k --module(tv_new_table). --compile([{nowarn_deprecated_function,{gs,button,3}}, - {nowarn_deprecated_function,{gs,checkbutton,3}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,entry,3}}, - {nowarn_deprecated_function,{gs,frame,3}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,radiobutton,3}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([start/2, - init/3 - ]). - - - --define(DEFAULT_BG_COLOR, {217, 217, 217}). --define(FONT, {screen, 12}). - --define(WIN_WIDTH, 400). --define(WIN_HEIGHT, 555). %% 510 - --define(FRAME_WIDTH, 400). --define(FRAME1_HEIGHT, 170). --define(FRAME2_HEIGHT, 260). --define(FRAME3_HEIGHT, 125). %% 80 --define(BW, 2). - --define(FRAME_X, 0). --define(FRAME1_Y, 0). --define(FRAME2_Y, 170). --define(FRAME3_Y, 430). - - --define(LBL_HEIGHT, 30). --define(NODE_LBL_WIDTH, 45). --define(NAME_LBL_WIDTH, 85). --define(TYPE_LBL_WIDTH, 45). --define(PROT_LBL_WIDTH, 85). --define(KEYPOS_LBL_WIDTH, 95). - --define(LBL_X, 10). --define(NODE_LBL_Y, 20). --define(NAME_LBL_Y, 80). --define(TYPE_LBL_Y, 10). --define(PROT_LBL_Y, 100). --define(KEYPOS_LBL_Y, 200). - - --define(ENTRY_HEIGHT, 30). --define(NODE_ENTRY_WIDTH, 275). --define(NAME_ENTRY_WIDTH, 275). --define(KEYPOS_ENTRY_WIDTH, 50). - --define(ENTRY_X1, 110). --define(ENTRY_X2, 110). --define(NODE_ENTRY_Y, 20). --define(NAME_ENTRY_Y, 80). --define(KEYPOS_ENTRY_Y, 200). - --define(RBTN_HEIGHT, 30). --define(RBTN_WIDTH1, 105). --define(RBTN_WIDTH2, 115). - --define(RBTN_X1, 60). --define(RBTN_X2, 165). --define(RBTN_X3, 270). --define(RBTN_Y1, 40). --define(RBTN_Y1PLUS, 70). --define(RBTN_Y2, 130). - - --define(CBTN_HEIGHT, 30). --define(NAMED_TABLE_CBTN_WIDTH, 100). --define(OPEN_BROWSER_CBTN_WIDTH, 105). - --define(NAMED_TABLE_CBTN_X, 110). --define(NAMED_TABLE_CBTN_Y, 120). - --define(OPEN_BROWSER_CBTN_X, 85). %% 215 --define(OPEN_BROWSER_CBTN_Y, 10). %% 200 - - --define(BTN_WIDTH, 100). --define(BTN_HEIGHT, 30). - --define(BTN_X1, 85). --define(BTN_X2, 225). --define(BTN_Y, 65). %% 30 - - --define(VLINE_LBL_WIDTH, (380 - 2 * ?BW)). --define(VLINE_LBL_HEIGHT, 1). --define(HLINE_LBL_WIDTH, 1). --define(HLINE_LBL_HEIGHT, 70). - --define(VLINE_LBL_X, (10 - ?BW)). --define(VLINE_LBL_Y1, 85). --define(VLINE_LBL_Y2, 180). --define(HLINE_LBL_X, 188). --define(HLINE_LBL_Y, 180). - - --define(DEFAULT_NAME, my_table). --define(DEFAULT_TYPE, set). --define(DEFAULT_PROT, public). --define(DEFAULT_KEYPOS, 1). - - - - -start(Node, ErrMsgMode) -> - spawn_link(?MODULE, init, [Node, ErrMsgMode, self()]). - - - - - -init(Node, ErrMsgMode, MPid) -> - process_flag(trap_exit, true), - put(error_msg_mode, ErrMsgMode), - create_window(Node), - loop(false, ?DEFAULT_TYPE, ?DEFAULT_PROT, true, MPid). - - - - - -loop(NamedTab, Type, Prot, OpenBrowser, MPid) -> - receive - - {gs, ok, click, _Data, _Args} -> - gs:config(win, [{cursor, busy}]), - case create_table(NamedTab, Type, Prot, OpenBrowser, MPid) of - ok -> - exit(normal); - error -> - gs:config(win, [{cursor, arrow}]), - loop(NamedTab, Type, Prot, OpenBrowser, MPid) - end; - - - {gs, cancel, click, _Data, _Args} -> - exit(normal); - - - {gs, set, click, _Data, _Args} -> - loop(NamedTab, set, Prot, OpenBrowser, MPid); - - - {gs, ordered_set, click, _Data, _Args} -> - loop(NamedTab, ordered_set, Prot, OpenBrowser, MPid); - - - {gs, bag, click, _Data, _Args} -> - loop(NamedTab, bag, Prot, OpenBrowser, MPid); - - - {gs, duplicate_bag, click, _Data, _Args} -> - loop(NamedTab, duplicate_bag, Prot, OpenBrowser, MPid); - - - {gs, public, click, _Data, _Args} -> - gs:config(open_browser, [{enable, true}, {select, OpenBrowser}]), - loop(NamedTab, Type, public, OpenBrowser, MPid); - - - {gs, protected, click, _Data, _Args} -> - gs:config(open_browser, [{enable, true}, {select, OpenBrowser}]), - loop(NamedTab, Type, protected, OpenBrowser, MPid); - - - {gs, private, click, _Data, _Args} -> - gs:config(open_browser, [{select, false}, {enable, false}]), - loop(NamedTab, Type, private, OpenBrowser, MPid); - - - {gs, named_table, click, Data, _Args} -> - gs:config(named_table, [{data, not(Data)}]), - loop(Data, Type, Prot, OpenBrowser, MPid); - - - {gs, open_browser, click, Data, _Args} -> - gs:config(open_browser, [{data, not(Data)}]), - loop(Data, Type, Prot, Data, MPid); - - - {gs, EntryId, keypress, _Data, ['Tab', _No, 0 | _T]} -> - case get_entry_term(EntryId) of - {ok, _Term} -> - gs:config(next_entry(EntryId, forward), [{setfocus, true}, - {select, {0, 100000000}}]); - error -> - done - end, - loop(NamedTab, Type, Prot, OpenBrowser, MPid); - - - {gs, EntryId, keypress, _Data, ['Tab', _No, 1 | _T]} -> - case get_entry_term(EntryId) of - {ok, _Term} -> - gs:config(next_entry(EntryId, backward), [{setfocus, true}, - {select, {0, 100000000}}]); - error -> - done - end, - loop(NamedTab, Type, Prot, OpenBrowser, MPid); - - - {gs, EntryId, keypress, _Data, ['Down' | _T]} -> - case get_entry_term(EntryId) of - {ok, _Term} -> - gs:config(next_entry(EntryId, forward), [{setfocus, true}, - {select, {0, 100000000}}]); - error -> - done - end, - loop(NamedTab, Type, Prot, OpenBrowser, MPid); - - - {gs, EntryId, keypress, _Data, ['Up' | _T]} -> - case get_entry_term(EntryId) of - {ok, _Term} -> - gs:config(next_entry(EntryId, backward), [{setfocus, true}, - {select, {0, 100000000}}]); - error -> - done - end, - loop(NamedTab, Type, Prot, OpenBrowser, MPid); - - - {gs, _EntryId, keypress, _Data, ['Return' | _T]} -> - gs:config(win, [{cursor, busy}]), - case create_table(NamedTab, Type, Prot, OpenBrowser, MPid) of - ok -> - exit(normal); - error -> - gs:config(win, [{cursor, arrow}]), - loop(NamedTab, Type, Prot, OpenBrowser, MPid) - end; - - - {gs, win, configure, _Data, _Args} -> - gs:config(win, [{width, ?WIN_WIDTH}, - {height, ?WIN_HEIGHT}]), - loop(NamedTab, Type, Prot, OpenBrowser, MPid); - - - {gs, win, destroy, _Data, _Args} -> - exit(normal); - - - raise -> - gs:config(win, [raise]), - loop(NamedTab, Type, Prot, OpenBrowser, MPid); - - - {error_msg_mode, ErrMsgMode} -> - put(error_msg_mode, ErrMsgMode), - loop(NamedTab, Type, Prot, OpenBrowser, MPid); - - - {'EXIT', _Pid, _Reason} -> - exit(normal); - - - _Other -> - loop(NamedTab, Type, Prot, OpenBrowser, MPid) - - end. - - - - -create_table(NamedTab, Type, Prot, OpenBrowser, MPid) -> - case get_entry_term(node_entry) of - error -> - error; - {ok, Node} -> - case get_entry_term(name_entry) of - error -> - error; - {ok, TabName} -> - case get_entry_term(keypos_entry) of - error -> - error; - {ok, KeyPos} -> - Options = - [Type, Prot, {keypos, KeyPos}] ++ - case NamedTab of - true -> - [named_table]; - false -> - [] - end, - {Readable, NewOpenBrowser} = - case Prot of - private -> - {false, false}; - _Other -> - {true, OpenBrowser} - end, - MPid ! {tv_new_table, self(), Node, TabName, Options, ets, - Readable, NewOpenBrowser}, - receive - ok -> - ok; - error -> - show_error_msg(), - error - after - 5000 -> - show_error_msg(), - error - end - end - end - end. - - - - - -show_error_msg() -> - Msg = - case get(error_msg_mode) of - normal -> - ["Couldn't create a table using", - "the specified settings!"]; - haiku -> - ["The table you want", - "Could maybe be created.", - "But I don't know how."] - end, - tv_utils:notify(win, "TV Notification", Msg). - - - - - - - -get_entry_term(Id) -> - EditedStr = gs:read(Id, text), - case tv_db_search:string_to_term(EditedStr) of - {ok, NewTerm} when Id =:= node_entry, is_atom(NewTerm) -> - {ok,NewTerm}; - {ok, NewTerm} when Id =:= name_entry, is_atom(NewTerm) -> - {ok,NewTerm}; - {ok, NewTerm} when Id =:= keypos_entry, is_integer(NewTerm), NewTerm > 0 -> - {ok,NewTerm}; - _Other -> - NewMsg = - case get(error_msg_mode) of - normal -> - case Id of - node_entry -> - ["Please enter a valid node name!"]; - name_entry -> - ["Please enter a valid table name!"]; - keypos_entry -> - ["Please enter a valid key position!"] - end; - haiku -> - E1 = "Aborted effort", - L = - case Id of - node_entry -> - ["Reflect, repent and retype:", - "Enter valid node."]; - name_entry -> - ["Reflect, repent and retype:", - "Enter valid name."]; - keypos_entry -> - ["Reflect, repent and retype", - "Key position, please."] - end, - [E1 | L] - end, - gs:config(Id, [beep, {select, {0, 100000000}}, {setfocus, true}]), - tv_utils:notify(win, "TV Notification", NewMsg), - error - end. - - - - - -next_entry(node_entry, forward) -> - name_entry; -next_entry(node_entry, backward) -> - keypos_entry; -next_entry(name_entry, forward) -> - keypos_entry; -next_entry(name_entry, backward) -> - node_entry; -next_entry(keypos_entry, forward) -> - node_entry; -next_entry(keypos_entry, backward) -> - name_entry. - - - - -create_window(Node) -> - gs:window(win, gs:start(), [{width, ?WIN_WIDTH}, - {height, ?WIN_HEIGHT}, - {bg, ?DEFAULT_BG_COLOR}, - {title, "[TV] Create New ETS Table"}, - {configure, true}, - {destroy, true}, - {cursor, arrow} - ]), - - gs:frame(frame1, win, [{width, ?FRAME_WIDTH}, - {height, ?FRAME1_HEIGHT}, - {x, ?FRAME_X}, - {y, ?FRAME1_Y}, - {bg, ?DEFAULT_BG_COLOR}, - {bw, ?BW}]), - gs:frame(frame2, win, [{width, ?FRAME_WIDTH}, - {height, ?FRAME2_HEIGHT}, - {x, ?FRAME_X}, - {y, ?FRAME2_Y}, - {bg, ?DEFAULT_BG_COLOR}, - {bw, ?BW}]), - gs:frame(frame3, win, [{width, ?FRAME_WIDTH}, - {height, ?FRAME3_HEIGHT}, - {x, ?FRAME_X}, - {y, ?FRAME3_Y}, - {bg, ?DEFAULT_BG_COLOR}, - {bw, ?BW}]), - - gs:label(frame1, [{width, ?NODE_LBL_WIDTH}, - {height, ?LBL_HEIGHT}, - {x, ?LBL_X}, - {y, ?NODE_LBL_Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {align, w}, - {font, ?FONT}, - {label, {text, "Node:"}} - ]), - gs:label(frame1, [{width, ?NAME_LBL_WIDTH}, - {height, ?LBL_HEIGHT}, - {x, ?LBL_X}, - {y, ?NAME_LBL_Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {align, w}, - {font, ?FONT}, - {label, {text, "Table name:"}} - ]), - gs:label(frame2, [{width, ?TYPE_LBL_WIDTH}, - {height, ?LBL_HEIGHT}, - {x, ?LBL_X}, - {y, ?TYPE_LBL_Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {align, w}, - {font, ?FONT}, - {label, {text, "Type:"}} - ]), - gs:label(frame2, [{width, ?PROT_LBL_WIDTH}, - {height, ?LBL_HEIGHT}, - {x, ?LBL_X}, - {y, ?PROT_LBL_Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {align, w}, - {font, ?FONT}, - {label, {text, "Protection:"}} - ]), - gs:label(frame2, [{width, ?KEYPOS_LBL_WIDTH}, - {height, ?LBL_HEIGHT}, - {x, ?LBL_X}, - {y, ?KEYPOS_LBL_Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {align, w}, - {font, ?FONT}, - {label, {text, "Key position:"}} - ]), - - gs:entry(node_entry, frame1, [{width, ?NODE_ENTRY_WIDTH}, - {height, ?ENTRY_HEIGHT}, - {x, ?ENTRY_X1}, - {y, ?NODE_ENTRY_Y}, - {bg, {255,255,255}}, - {fg, {0,0,0}}, - {font, ?FONT}, - {enable, true}, - {text, "'" ++ atom_to_list(Node) ++ "'"}, - {keypress, true} - ]), - gs:entry(name_entry, frame1, [{width, ?NAME_ENTRY_WIDTH}, - {height, ?ENTRY_HEIGHT}, - {x, ?ENTRY_X1}, - {y, ?NAME_ENTRY_Y}, - {bg, {255,255,255}}, - {fg, {0,0,0}}, - {font, ?FONT}, - {enable, true}, - {text, atom_to_list(?DEFAULT_NAME)}, - {keypress, true}, - {setfocus, true}, - {select, {0,100000000}} - ]), - gs:entry(keypos_entry, frame2, [{width, ?KEYPOS_ENTRY_WIDTH}, - {height, ?ENTRY_HEIGHT}, - {x, ?ENTRY_X2}, - {y, ?KEYPOS_ENTRY_Y}, - {bg, {255,255,255}}, - {fg, {0,0,0}}, - {font, ?FONT}, - {enable, true}, - {keypress, true}, - {text, integer_to_list(?DEFAULT_KEYPOS)} - ]), - - gs:radiobutton(set, frame2, [{width, ?RBTN_WIDTH1}, - {height, ?RBTN_HEIGHT}, - {x, ?RBTN_X1}, - {y, ?RBTN_Y1}, - {align, w}, - {label, {text, "set"}}, - {group, type} - ]), - gs:radiobutton(ordered_set, frame2, [{width, ?RBTN_WIDTH1}, - {height, ?RBTN_HEIGHT}, - {x, ?RBTN_X2}, - {y, ?RBTN_Y1}, - {align, w}, - {label, {text, "ordered_set"}}, - {group, type} - ]), - gs:radiobutton(bag, frame2, [{width, ?RBTN_WIDTH1}, - {height, ?RBTN_HEIGHT}, - {x, ?RBTN_X1}, - {y, ?RBTN_Y1PLUS}, - {align, w}, - {label, {text, "bag"}}, - {group, type} - ]), - gs:radiobutton(duplicate_bag, frame2, [{width, ?RBTN_WIDTH2}, - {height, ?RBTN_HEIGHT}, - {x, ?RBTN_X2}, - {y, ?RBTN_Y1PLUS}, - {align, w}, - {label, {text, "duplicate_bag"}}, - {group, type} - ]), - - gs:radiobutton(public, frame2, [{width, ?RBTN_WIDTH1}, - {height, ?RBTN_HEIGHT}, - {x, ?RBTN_X1}, - {y, ?RBTN_Y2}, - {align, w}, - {label, {text, "public"}}, - {group, protection} - ]), - gs:radiobutton(protected, frame2, [{width, ?RBTN_WIDTH1}, - {height, ?RBTN_HEIGHT}, - {x, ?RBTN_X2}, - {y, ?RBTN_Y2}, - {align, w}, - {label, {text, "protected"}}, - {group, protection} - ]), - gs:radiobutton(private, frame2, [{width, ?RBTN_WIDTH2}, - {height, ?RBTN_HEIGHT}, - {x, ?RBTN_X3}, - {y, ?RBTN_Y2}, - {align, w}, - {label, {text, "private"}}, - {group, protection} - ]), - - gs:checkbutton(named_table, frame1, [{width, ?NAMED_TABLE_CBTN_WIDTH}, - {height, ?CBTN_HEIGHT}, - {x, ?NAMED_TABLE_CBTN_X}, - {y, ?NAMED_TABLE_CBTN_Y}, - {align, w}, - {label, {text, "Named table"}}, - {select, false}, - {data, true} - ]), - - gs:checkbutton(open_browser, frame3, [{width, ?OPEN_BROWSER_CBTN_WIDTH}, - {height, ?CBTN_HEIGHT}, - {x, ?OPEN_BROWSER_CBTN_X}, - {y, ?OPEN_BROWSER_CBTN_Y}, - {align, w}, - {label, {text, "Open browser"}}, - {select, true}, - {data, false} - ]), - -%% gs:label(frame2, [{width, ?VLINE_LBL_WIDTH}, -%% {height, ?VLINE_LBL_HEIGHT}, -%% {x, ?VLINE_LBL_X}, -%% {y, ?VLINE_LBL_Y1}, -%% {bg, {0,0,0}} -%% ]), -%% gs:label(frame2, [{width, ?VLINE_LBL_WIDTH}, -%% {height, ?VLINE_LBL_HEIGHT}, -%% {x, ?VLINE_LBL_X}, -%% {y, ?VLINE_LBL_Y2}, -%% {bg, {0,0,0}} -%% ]), -%% gs:label(frame2, [{width, ?HLINE_LBL_WIDTH}, -%% {height, ?HLINE_LBL_HEIGHT}, -%% {x, ?HLINE_LBL_X}, -%% {y, ?HLINE_LBL_Y}, -%% {bg, {0,0,0}} -%% ]), -%% - gs:button(ok, frame3, [{width, ?BTN_WIDTH}, - {height, ?BTN_HEIGHT}, - {x, ?BTN_X1}, - {y, ?BTN_Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {label, {text, "OK"}} - ]), - gs:button(cancel, frame3, [{width, ?BTN_WIDTH}, - {height, ?BTN_HEIGHT}, - {x, ?BTN_X2}, - {y, ?BTN_Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {label, {text, "Cancel"}} - ]), - - gs:config(?DEFAULT_TYPE, [{select, true}]), - gs:config(?DEFAULT_PROT, [{select, true}]), - - gs:config(win, [{map, true}]). - - - - - - - diff --git a/lib/tv/src/tv_nodewin.erl b/lib/tv/src/tv_nodewin.erl deleted file mode 100644 index 8376c4a7aa..0000000000 --- a/lib/tv/src/tv_nodewin.erl +++ /dev/null @@ -1,412 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_nodewin). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,listbox,3}}, - {nowarn_deprecated_function,{gs,menu,3}}, - {nowarn_deprecated_function,{gs,menubar,3}}, - {nowarn_deprecated_function,{gs,menubutton,3}}, - {nowarn_deprecated_function,{gs,menuitem,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([start/2, init/3]). - - --include("tv_int_msg.hrl"). - - - --define(WINDOW_WIDTH, 230). --define(WINDOW_HEIGHT, 260). --define(DEFAULT_BG_COLOR, {217,217,217}). --define(POLL_INTERVAL, 5000). - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -start(CurrNode, ErrMsgMode) -> - spawn_link(?MODULE, init, [self(), CurrNode, ErrMsgMode]). - - - - - -init(Pid, CurrNode, ErrMsgMode) -> - process_flag(trap_exit, true), - net_kernel:monitor_nodes(true), - put(error_msg_mode, ErrMsgMode), - gs:start(), - NewCurrNode = update_node_listbox(CurrNode, false), - tell_master(NewCurrNode, CurrNode, Pid), - loop(Pid, NewCurrNode, node(), false). - - - - -%%%********************************************************************* -%%% INTERNAL FUNCTIONS -%%%********************************************************************* - - - -init_window(CurrNode, Pid) -> - create_window(), - NewCurrNode = update_node_listbox(CurrNode, true), - tell_master(NewCurrNode, CurrNode, Pid), - gs:config(win, [{map,true}]), - NewCurrNode. - - - - -handle_error(nodedown) -> - gs:window(errorwin, gs:start(), []), - gs:config(errorwin, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(errorwin, "TV Notification", ["The selected node is down!"]); - haiku -> - Msg = ["With searching comes loss", - "And the presence of absence:", - "Node is down."], - tv_utils:notify(errorwin, "TV Notification", Msg) - end, - gs:destroy(errorwin); -handle_error(distributed) -> - gs:window(errorwin, gs:start(), []), - gs:config(errorwin, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(errorwin, "TV Notification", - ["The system has become distributed!"]); - haiku -> - Msg = [], - tv_utils:notify(errorwin, "TV Notification", Msg) - end, - gs:destroy(errorwin); -handle_error(undistributed) -> - gs:window(errorwin, gs:start(), []), - gs:config(errorwin, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(errorwin, "TV Notification", - ["The system is no longer distributed!"]); - haiku -> - Msg = ["The system you see", - "Is not a distributed", - "system anymore."], - tv_utils:notify(errorwin, "TV Notification", Msg) - end, - gs:destroy(errorwin). - -get_node_lists(CurrNode) -> - NodeDataList = lists:sort([node() | nodes()]), - NodeTextList = lists:map(fun(Item) -> - " " ++ atom_to_list(Item) - end, - NodeDataList), - - %% It *may* be possible that CurrNode has disappeared! - %% If this is the case, use the node where TV resides - %% as new current node. - %% This also covers the case when our own node (or some - %% other node) suddenly goes distributed. - - NewCurrNode = case lists:member(CurrNode, NodeDataList) of - true -> - CurrNode; - false -> - node() - end, - - %% Now get the index that shall be marked in the node listbox. - %% Remember that the first item has number 0 (zero)! - NodeMarkIndex = get_node_mark_index(NewCurrNode, NodeDataList, 0), - - {NewCurrNode, NodeDataList, NodeTextList, NodeMarkIndex}. - - - - -%% We know that CurrNode is *somewhere* in the list, since we have checked. -%% If the original CurrNode wasn't there, then we are using node() instead, -%% which definitely is in the list. (node() may have gone distributed in the -%% meantime, but it *IS* in the list!) :-) - -get_node_mark_index(CurrNode, [H | T], Acc) when CurrNode =/= H -> - get_node_mark_index(CurrNode, T, Acc + 1); -get_node_mark_index(CurrNode, [CurrNode | _], Acc) -> - Acc. %% Acc tells the index of the current head. :-) - - - - - -check_selected_node('nonode@nohost', _OldNode, _WinCreated) when node() =:= 'nonode@nohost' -> - %% Not distributed, OK! - 'nonode@nohost'; -check_selected_node(_Node, _OldNode, WinCreated) when node() =:= 'nonode@nohost' -> - %% No longer distributed, but previously was! - handle_error(undistributed), - update_node_listbox('nonode@nohost', WinCreated); -check_selected_node(Node, _OldNode, _WinCreated) when Node =:= node() -> - %% We are distributed, but on - %% our own node! Since we - % still are running, the node - %% is up. - Node; -check_selected_node(Node, 'nonode@nohost', WinCreated) -> - %% The system has been distributed! - net_kernel:monitor_nodes(true), - handle_error(distributed), - update_node_listbox(Node, WinCreated); -check_selected_node(Node, _OldNode, WinCreated) -> - %% We are distributed, and a new node has been chosen! - %% We better check this node! - case net_adm:ping(Node) of - pong -> - Node; - _Other -> - handle_error(nodedown), - update_node_listbox(Node, WinCreated) - end. - - - -available_nodes() -> - lists:sort([node() | nodes()]). - - - -loop(Pid, CurrNode, HomeNode, WinCreated) -> - receive - - {nodedown, _Node} -> - flush_nodedown_messages(), - flush_nodeup_messages(), - case lists:member(CurrNode, available_nodes()) of - true -> - done; - false when node() =:= 'nonode@nohost', CurrNode =/= 'nonode@nohost' -> - handle_error(undistributed); - false -> - handle_error(nodedown) - end, - NewCurrNode = update_node_listbox(CurrNode, WinCreated), - tell_master(NewCurrNode, CurrNode, Pid), - loop(Pid, NewCurrNode, node(), WinCreated); - - - {nodeup, _Node} -> - flush_nodeup_messages(), - flush_nodedown_messages(), - case lists:member(CurrNode, available_nodes()) of - true -> - done; - false when node() =:= 'nonode@nohost', CurrNode =/= 'nonode@nohost' -> - handle_error(undistributed); - false when CurrNode =:= 'nonode@nohost' -> - net_kernel:monitor_nodes(true), - handle_error(distributed); - false -> - handle_error(nodedown) - end, - NewCurrNode = update_node_listbox(CurrNode, WinCreated), - tell_master(NewCurrNode, CurrNode, Pid), - loop(Pid, NewCurrNode, node(), WinCreated); - - - {gs, node_listbox, click, Data, [Idx, _Txt | _]} -> - NewCurrNode = check_selected_node(lists:nth(Idx + 1, Data), CurrNode, WinCreated), - tell_master(NewCurrNode, CurrNode, Pid), - loop(Pid, NewCurrNode, node(), WinCreated); - - - {gs, win, configure, _, _} -> - gs:config(win, [{width, ?WINDOW_WIDTH}, {height, ?WINDOW_HEIGHT}]), - loop(Pid, CurrNode, HomeNode, WinCreated); - - - show_window when WinCreated-> - gs:config(win, [raise]), - loop(Pid, CurrNode, HomeNode, WinCreated); - - show_window when not WinCreated -> - init_window(CurrNode, Pid), - loop(Pid, CurrNode, HomeNode, true); - - {gs, _Id, click, close_menu, _Args} -> - gs:destroy(win), - loop(Pid, CurrNode, HomeNode, false); - - - {gs, _Id, keypress, _Data, [c, _, 0, 1 | _]} -> - gs:destroy(win), - loop(Pid, CurrNode, HomeNode, false); - - - {gs, _Id, keypress, _Data, ['C', _, 1, 1 | _]} -> - gs:destroy(win), - loop(Pid, CurrNode, HomeNode, false); - - - {gs, _Id, keypress, _Data, _Args} -> - loop(Pid, CurrNode, HomeNode, WinCreated); - - - {gs, _, destroy, _, _} -> - loop(Pid, CurrNode, HomeNode, false); - - - {error_msg_mode, Mode} -> - put(error_msg_mode, Mode), - loop(Pid, CurrNode, HomeNode, WinCreated); - - {'EXIT', Pid, _Reason} -> - net_kernel:monitor_nodes(false), - exit(normal); - - - {'EXIT', _OtherPid, _Reason} -> - loop(Pid, CurrNode, HomeNode, WinCreated); - - - _Other -> - io:format("Node window received message ~p ~n", [_Other]), - loop(Pid, CurrNode, HomeNode, WinCreated) - - after - 1000 -> - NewHomeNode = case node() of - HomeNode -> - HomeNode; - Other -> - self() ! {nodeup, Other} - end, - loop(Pid, CurrNode, NewHomeNode, WinCreated) - end. - - - - -tell_master(NewNode, NewNode, _Pid) -> - done; -tell_master(NewNode, _OldNode, Pid) -> - Pid ! {tv_new_node, self(), NewNode}. - - - - -flush_nodedown_messages() -> - receive - {nodedown,_Node} -> - flush_nodedown_messages() - after - 0 -> - done - end. - - - - -flush_nodeup_messages() -> - receive - {nodeup,_Node} -> - flush_nodeup_messages() - after - 0 -> - done - end. - - - - -update_node_listbox(Node, WinCreated) -> - {NewNode, NodeDataList, NodeTextList, MarkIndex} = get_node_lists(Node), - case WinCreated of - false -> - done; - true -> - catch gs:config(node_listbox, [{data, NodeDataList}, - {items, NodeTextList}, - {selection, MarkIndex} - ]) - end, - NewNode. - - - - - -create_window() -> - gs:window(win, gs:start(), [{width, ?WINDOW_WIDTH}, - {height, ?WINDOW_HEIGHT}, - {bg, ?DEFAULT_BG_COLOR}, - {title, "[TV] Connected nodes"}, - {configure, true}, - {destroy, true}, - {cursor, arrow}, - {keypress, true} - ]), - gs:menubar(menubar, win, [{bg, ?DEFAULT_BG_COLOR} - ]), - gs:menubutton(mbutt, menubar, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}, % firebrick - {label, {text, " File "}}, - {underline, 1} - ]), - - % Create the actual menu! - gs:menu(menu, mbutt, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}]), - gs:menuitem(menu, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}, - {label, {text, " Close Ctrl-C "}}, - {data, close_menu}, - {underline, 1} - ]), - - Xpos = 4, - Ypos = 40, - gs:listbox(node_listbox, win, [{x, Xpos}, - {y, Ypos}, - {width, ?WINDOW_WIDTH - 2 * Xpos}, - {height, ?WINDOW_HEIGHT - Ypos - Xpos}, - {bg, {255,255,255}}, - {vscroll, right}, - {hscroll, true}, - {click, true} - ]). - - - - - - - - diff --git a/lib/tv/src/tv_pb.erl b/lib/tv/src/tv_pb.erl deleted file mode 100644 index 81e7e7e2d1..0000000000 --- a/lib/tv/src/tv_pb.erl +++ /dev/null @@ -1,663 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_pb). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,frame,2}}]). - - - --export([pb/1]). - - --include("tv_int_def.hrl"). --include("tv_pd_int_msg.hrl"). --include("tv_pb_int_def.hrl"). - - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: pb. -%% -%% Return Value: None. -%% -%% Description: Process controlling the grid buttons on the display. -%% -%% Parameters: None. -%%====================================================================== - - -pb(ParentPid) -> - process_flag(trap_exit, true), - ProcVars = #process_variables{parent_pid = ParentPid}, - loop(ProcVars). - - - - - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - - - -%%====================================================================== -%% Function: loop. -%% -%% Return Value: None. -%% -%% Description: Eternal (well, almost) loop, receiving messages and -%% handling them. -%% -%% Parameters: -%%====================================================================== - - -loop(ProcVars) -> - receive - Msg -> - case Msg of - - #pb_update_vbtns{} -> - NewProcVars = update_vbtns(Msg, ProcVars), - loop(NewProcVars); - - #pb_key_info{} -> - NewProcVars = update_keys(Msg, ProcVars), - loop(NewProcVars); - - #pb_update_hbtns{} -> - NewProcVars = update_hbtns(Msg, ProcVars), - loop(NewProcVars); - - #pb_set_sort_col{} -> - NewProcVars = set_sort_col(Msg, ProcVars), - loop(NewProcVars); - - #pb_remove_marks{} -> - NewProcVars = remove_marks(ProcVars), - loop(NewProcVars); - - #pb_init_btns{} -> - NewProcVars = init_btns(Msg, ProcVars), - loop(NewProcVars); - - {gs, Id, Event, Data, Args} -> - NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars), - loop(NewProcVars); - - - {'EXIT', Pid, Reason} -> - ParentPid = ProcVars#process_variables.parent_pid, - exit_signals({Pid, Reason}, ParentPid, ProcVars), - loop(ProcVars); - - _Other -> - loop(ProcVars) - end - end. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -exit_signals(ExitInfo, ParentPid, _ProcVars) -> - case ExitInfo of - {ParentPid, _Reason} -> - exit(normal); - _Other -> - done - end. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -gs_messages(Msg, ProcVars) -> - - case Msg of - - {Id, click, {hbtn, RealCol, VirtualCol}, _Args} -> - handle_col_marking(Id, RealCol, VirtualCol, ProcVars); - - {Id, buttonpress, {resbtn, RealCol, VirtualCol, Xpos}, [1 | _Tail]} -> - handle_col_resizing(Id, RealCol, VirtualCol, Xpos, ProcVars), - ProcVars; - - {_Id, click, {vbtn, RealRow, VirtualRow}, _Args} -> - handle_row_marking(RealRow, VirtualRow, ProcVars); - - _OtherMessage -> - ProcVars - - end. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -remove_marks(ProcVars) -> - #process_variables{col_mark_params = ColMarkP, - row_mark_params = RowMarkP} = ProcVars, - - #col_mark_params{col_btn_id = BtnId, - virtual_col_marked = VirtualCol, - virtual_sort_col = SortCol} = ColMarkP, - - case BtnId of - undefined -> - done; - _AnyId -> - case VirtualCol of - SortCol -> - gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}, - {fg, {0, 0, 0}} - ]); - _Other -> - gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}} - ]) - end - end, - - NewRowMarkP = RowMarkP#row_mark_params{virtual_row_marked = undefined, - real_row_marked = undefined - }, - NewColMarkP = ColMarkP#col_mark_params{col_btn_id = undefined, - virtual_col_marked = undefined - }, - ProcVars#process_variables{col_mark_params = NewColMarkP, - row_mark_params = NewRowMarkP - }. - - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -handle_col_marking(BtnId, RealCol, VirtualCol, ProcVars) -> - #process_variables{parent_pid = PdPid, - col_mark_params = ColMarkP, - row_mark_params = RowMarkP} = ProcVars, - - #col_mark_params{col_btn_id = OldBtnId, - virtual_col_marked = OldVirtualCol, - virtual_sort_col = SortCol} = ColMarkP, - - {ColMarked, NewColMarkP} = mark_col_btn(BtnId, OldBtnId, VirtualCol, - OldVirtualCol, RealCol, SortCol, - ColMarkP), - - PdPid ! #pb_col_marked{sender = self(), - col_marked = ColMarked, - real_col = RealCol, - virtual_col = VirtualCol - }, - - NewRowMarkP = RowMarkP#row_mark_params{virtual_row_marked = undefined, - real_row_marked = undefined - }, - ProcVars#process_variables{col_mark_params = NewColMarkP, - row_mark_params = NewRowMarkP - }. - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -handle_row_marking(RealRow, VirtualRow, ProcVars) -> - #process_variables{parent_pid = PdPid, - col_mark_params = ColMarkP, - row_mark_params = RowMarkP} = ProcVars, - - #col_mark_params{col_btn_id = OldBtnId, - virtual_col_marked = OldVirtualCol, - virtual_sort_col = SortCol} = ColMarkP, - - {_ColMarked, NewColMarkP} = mark_col_btn(OldBtnId, OldBtnId, OldVirtualCol, - OldVirtualCol, undefined, SortCol, - ColMarkP), - - #row_mark_params{virtual_row_marked = OldVirtualRow} = RowMarkP, - - % Check if row shall be marked or unmarked! - {RowMarked, NewRowMarkP} = check_marked_row(VirtualRow, OldVirtualRow, RealRow, - RowMarkP), - - PdPid ! #pb_row_marked{sender = self(), - row_marked = RowMarked, - real_row = RealRow, - virtual_row = VirtualRow - }, - - ProcVars#process_variables{row_mark_params = NewRowMarkP, - col_mark_params = NewColMarkP}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -%% Three cases: no button previously clicked, or same button clicked, -%% or some other button clicked. - -check_marked_row(NewVirtRow, undefined, RealRow, RowMarkP) -> - % No btn already pressed! - {true, RowMarkP#row_mark_params{virtual_row_marked = NewVirtRow, - real_row_marked = RealRow}}; -check_marked_row(NewVirtRow, OldVirtRow, _RealRow, RowMarkP) when NewVirtRow =:= OldVirtRow -> - % The button previously pressed has been pressed again! - {false, RowMarkP#row_mark_params{virtual_row_marked = undefined, - real_row_marked = undefined}}; -check_marked_row(NewVirtRow, _OldVirtRow, RealRow, RowMarkP) -> - % A new btn has been pressed! - {true, RowMarkP#row_mark_params{virtual_row_marked = NewVirtRow, - real_row_marked = RealRow}}. - - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -set_sort_col(Msg, ProcVars) -> - #pb_set_sort_col{virtual_col = SortCol} = Msg, - tv_pb_funcs:set_new_sort_col(SortCol, ProcVars). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -%% Three cases: no button previously clicked, or same button clicked, -%% or some other button clicked. - -mark_col_btn(NewId, undefined, NewVirtCol, _OldVirtCol, _RealCol, _SortCol, ColMarkP) -> - % No btn already pressed! - gs:config(NewId, [{bg, ?COL_MARK_COLOR}, - {fg, {255, 255, 255}} - ]), - {true, ColMarkP#col_mark_params{col_btn_id = NewId, - virtual_col_marked = NewVirtCol}}; -mark_col_btn(NewId, _OldId, NewVirtCol, OldVirtCol, _RealCol, SortCol, ColMarkP) when NewVirtCol =:= OldVirtCol, NewVirtCol =:= SortCol -> - % The button previously pressed has been pressed again! - gs:config(NewId, [{bg, ?SORT_MARK_COLOR}, - {fg, {0, 0, 0}} - ]), - {false, ColMarkP#col_mark_params{col_btn_id = undefined, - virtual_col_marked = undefined}}; -mark_col_btn(NewId, _OldId, NewVirtCol, OldVirtCol, _RealCol, _SortCol, ColMarkP) when NewVirtCol =:= OldVirtCol -> - % The button previously pressed has been pressed again! - gs:config(NewId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}} - ]), - {false, ColMarkP#col_mark_params{col_btn_id = undefined, - virtual_col_marked = undefined}}; -mark_col_btn(NewId, OldId, NewVirtCol, _OldVirtCol, _RealCol, _SortCol, ColMarkP) -> - % A new btn has been pressed! - gs:config(OldId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}} - ]), - gs:config(NewId, [{bg, ?COL_MARK_COLOR}, - {fg, {255, 255, 255}} - ]), - {true, ColMarkP#col_mark_params{col_btn_id = NewId, - virtual_col_marked = NewVirtCol}}. - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -handle_col_resizing(RbtnId, RealCol, VirtualCol, Xpos, ProcVars) -> - gs:config(RbtnId, [{motion, true}]), - #process_variables{parent_pid = ParentPid, - grid_frame_id = GrFrId, - grid_frame_height = Height, - hbtn_height = HbtnH, - resbtn_width = RbtnW, - cols_shown = ColsShown} = ProcVars, - - LineId = gs:frame(GrFrId, [{width, 1}, - {height, Height - HbtnH}, - {x, Xpos}, - {y, HbtnH - 1}, - {bg, ?DEFAULT_BG_COLOR} - ]), - MinColWidth = RbtnW, - - OldColWidth = lists:nth(RealCol, ColsShown), - Xdiff = get_xdiff(RbtnId, 1, 0, LineId, Xpos, MinColWidth - OldColWidth), - - ParentPid ! #pb_new_colwidth{sender = self(), - real_col = RealCol, - virtual_col = VirtualCol, - xdiff = Xdiff}, - - gs:config(RbtnId, [{motion, false}]), - gs:destroy(LineId). - - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff) -> - receive - {gs, Id, motion, {resbtn, _RealCol, _VirtCol, _OldXpos}, [NewXdiff | _T]} -> - UsedXdiff = erlang:max(MinAllowedXdiff, NewXdiff), - gs:config(LineId, [{x, LineXpos + UsedXdiff}]), - get_xdiff(Id, Btn, UsedXdiff, LineId, LineXpos, MinAllowedXdiff); - {gs, Id, buttonrelease, _Data, [Btn | _T]} -> - LastXdiff; - {gs, Id, buttonrelease, _Data, _Args} -> - get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff); - {gs, Id, buttonpress, _Data, _Args} -> - get_xdiff(Id, Btn, LastXdiff, LineId, LineXpos, MinAllowedXdiff) - end. - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -init_btns(Msg, ProcVars) -> - #pb_init_btns{parent_id = ParentId, - parent_width = Width, - parent_height = Height, - ypos = Ypos, - hbtn_height = HbtnH, - resbtn_width = RbtnW, - vbtn_width = VbtnW, - nof_rows = NofRows, - row_height = RowHeight, - first_col_shown = FirstColShown, - cols_shown = ColsShown} = Msg, - - NewProcVars = tv_pb_funcs:init_btns(ParentId, Ypos, HbtnH, VbtnW, RbtnW, - FirstColShown, ColsShown, NofRows, - RowHeight, ProcVars), - - gs:frame(ParentId, [{bg, {0, 0, 0}}, - {bw, 0}, - {width, 1300}, - {height, 1}, - {x, 0}, - {y, Ypos - 1} - ]), - NewProcVars#process_variables{grid_frame_width = Width, - grid_frame_height = Height - }. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_hbtns(Msg, ProcVars) -> - #pb_update_hbtns{parent_width = Width, - parent_height = Height, - first_col_shown = FirstColShown, - cols_shown = ColsShown} = Msg, - - NewProcVars = tv_pb_funcs:update_hbtns(FirstColShown, ColsShown, ProcVars), - - NewProcVars#process_variables{grid_frame_width = Width, - grid_frame_height = Height - }. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_vbtns(Msg, ProcVars) -> - #pb_update_vbtns{color_list = Colors, - first_row_shown = FirstRowShown, - nof_rows_shown = NofRowsShown, - blinking_enabled = BlinkEnabled} = Msg, - - tv_pb_funcs:update_vbtns(NofRowsShown, FirstRowShown, Colors, BlinkEnabled, - ProcVars). - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_keys(Msg, ProcVars) -> - #pb_key_info{list_of_keys = KeyList} = Msg, - tv_pb_funcs:update_keys(KeyList, ProcVars). diff --git a/lib/tv/src/tv_pb_funcs.erl b/lib/tv/src/tv_pb_funcs.erl deleted file mode 100644 index 24d1120597..0000000000 --- a/lib/tv/src/tv_pb_funcs.erl +++ /dev/null @@ -1,1056 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_pb_funcs). --compile([{nowarn_deprecated_function,{gs,button,2}}, - {nowarn_deprecated_function,{gs,canvas,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,read,2}}]). - - - --export([init_btns/10, - update_hbtns/3, - update_vbtns/5, - update_keys/2, - set_new_sort_col/2]). - - --include("tv_int_def.hrl"). --include("tv_pb_int_def.hrl"). - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - - -init_btns(ParentId, Ypos, HbtnH, - VbtnW, ResbtnW, FirstColShown, ColsShown, NofRows, RowH, ProcVars) -> - - #process_variables{key_numbers = KeyNos, - key_ids = KeyIds} = ProcVars, - -% C = gs:canvas(ParentId, [{width, VbtnW - 1}, -% {height, HbtnH}, -% {x, 0}, -% {y, HbtnH + 1}, -% {bg, white} -% ]), -% gs:create(image, C, [{load_gif, "erlang.gif"}]), - - {HbtnsShown, ResBtnsShown} = update_hbtns(ColsShown, [], [], - FirstColShown, ParentId, Ypos, - HbtnH, ResbtnW, VbtnW), - - NewKeyIds = update_keys(KeyNos, KeyIds, FirstColShown, - FirstColShown + length(ColsShown) - 1, HbtnsShown, - ParentId, []), - - VbtnsShown = create_vbtns(ParentId, Ypos, NofRows, RowH, VbtnW, HbtnH), - ProcVars#process_variables{grid_frame_id = ParentId, - ypos = Ypos, - hbtn_height = HbtnH, - vbtn_width = VbtnW, - resbtn_width = ResbtnW, - first_col_shown = FirstColShown, - hbtns_shown = HbtnsShown, - resbtns_shown = ResBtnsShown, - vbtns_shown = VbtnsShown, - cols_shown = ColsShown, - key_ids = NewKeyIds - }. - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_hbtns(FirstColShown, ColsShown, ProcVars) -> - #process_variables{grid_frame_id = ParentId, - first_col_shown = OldFirstColShown, - cols_shown = OldColsShown, - ypos = Ypos, - hbtn_height = HbtnH, - vbtn_width = VbtnW, - resbtn_width = ResbtnW, - hbtns_shown = HbtnsShown, - resbtns_shown = ResbtnsShown, - key_numbers = KeyNos, - key_ids = KeyIds, - col_mark_params = ColMarkP} = ProcVars, - - % Only if the grid has been scrolled horizontally need we move the - % col mark! - case FirstColShown of - OldFirstColShown -> - done; - _NewValue -> - #col_mark_params{col_btn_id = MarkedBtnId, - virtual_col_marked = ColMarked, - sort_btn_id = SortBtnId, - virtual_sort_col = SortCol} = ColMarkP, - unmark_marked_col(MarkedBtnId, ColMarked, SortCol), - unmark_sort_col(SortBtnId, ColMarked, SortCol) - end, - - {NewHbtns, NewResbtns, NewKeys} = - case {FirstColShown, ColsShown} of - {OldFirstColShown, OldColsShown} -> - {HbtnsShown, ResbtnsShown, KeyIds}; - _Other -> - {NewHbtnsShown, NewResbtnsShown} = update_hbtns(ColsShown, - HbtnsShown, - ResbtnsShown, - FirstColShown, - ParentId, - Ypos, - HbtnH, - ResbtnW, - VbtnW), - NewKeyIds = update_keys(KeyNos, KeyIds, FirstColShown, - FirstColShown + length(ColsShown) - 1, - NewHbtnsShown, ParentId, []), - {NewHbtnsShown, NewResbtnsShown, NewKeyIds} - end, - - % Now mark the marked column again! - NewColMarkP = mark_marked_col(NewHbtns, FirstColShown, ColMarkP), - - ProcVars#process_variables{first_col_shown = FirstColShown, - hbtns_shown = NewHbtns, - resbtns_shown = NewResbtns, - cols_shown = ColsShown, - key_ids = NewKeys, - col_mark_params = NewColMarkP - }. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_vbtns(NofRowsShown, FirstRowShown, Colors, BlinkEnabled, ProcVars) -> - #process_variables{vbtns_shown = Vbtns, - blink_color_list = BlinkList} = ProcVars, - - update_vbtns(1, NofRowsShown, FirstRowShown, Vbtns, Colors, BlinkEnabled, BlinkList), - NewProcVars = update_sort_btn_mark(ProcVars), - NewProcVars. - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -set_new_sort_col(SortCol, ProcVars) -> - #process_variables{hbtns_shown = HbtnsShown, - col_mark_params = ColMarkP} = ProcVars, - - #col_mark_params{col_btn_id = MarkedColBtnId, - sort_btn_id = OldSortBtnId} = ColMarkP, - - % Set the new color of the sort btn, and remove the mark, if it is the same - % column! - - case MarkedColBtnId of - undefined -> - done; - _AnyId -> - gs:config(MarkedColBtnId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}} - ]) - end, - - SortBtnId = get_btn_id(SortCol, HbtnsShown), - case SortBtnId of - undefined -> - % The btn isn't visible, or no sorting shall be performed! - gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}} - ]); - _Other -> - % Unmark the old sort btn id! - gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}} - ]), - gs:config(SortBtnId, [{bg, ?SORT_MARK_COLOR}, - {fg, {0, 0, 0}} - ]) - end, - - NewColMarkP = ColMarkP#col_mark_params{col_btn_id = undefined, - virtual_col_marked = undefined, - sort_btn_id = SortBtnId, - virtual_sort_col = SortCol - }, - ProcVars#process_variables{col_mark_params = NewColMarkP}. - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_keys(KeyList, ProcVars) -> - #process_variables{key_numbers = OldKeyList, - key_ids = KeyIds, - first_col_shown = FirstColShown, - cols_shown = ColsShown, - hbtns_shown = HbtnsShown, - grid_frame_id = ParentId} = ProcVars, - - NewKeyIds = case KeyList of - OldKeyList -> - KeyIds; - NewKeyList -> - update_keys(NewKeyList, KeyIds, FirstColShown, - FirstColShown + length(ColsShown) - 1, - HbtnsShown, ParentId, []) - end, - - ProcVars#process_variables{key_numbers = KeyList, - key_ids = NewKeyIds - }. - - - - - - - - -%%%********************************************************************* -%%% INTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -unmark_sort_col(undefined, _ColMarked, _SortCol) -> - done; -unmark_sort_col(SortBtnId, _ColMarked, _SortCol) -> - gs:config(SortBtnId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}} - ]). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_marked_col(HbtnsShown, _FirstColShown, ColMarkP) -> - #col_mark_params{virtual_col_marked = VirtualCol, - virtual_sort_col = SortCol} = ColMarkP, - - {NewMarkBtnId, NewSortBtnId} = - case VirtualCol of - SortCol -> - % Same btn! - BtnId = get_btn_id(VirtualCol, - HbtnsShown), - gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}, - {fg, {0, 0, 0}} - ]), - {BtnId, BtnId}; - _OtherCol -> - MarkBtnId = get_btn_id(VirtualCol, HbtnsShown), - case MarkBtnId of - undefined -> - done; - _Else -> - gs:config(MarkBtnId, [{bg, ?COL_MARK_COLOR}, - {fg, {255, 255, 255}} - ]) - end, - - SortBtnId = get_btn_id(SortCol, HbtnsShown), - case SortBtnId of - undefined -> - done; - _OtherId -> - gs:config(SortBtnId, [{bg, ?SORT_MARK_COLOR}, - {fg, {0, 0, 0}} - ]) - end, - - {MarkBtnId, SortBtnId} - end, - - ColMarkP#col_mark_params{col_btn_id = NewMarkBtnId, - sort_btn_id = NewSortBtnId}. - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -unmark_marked_col(undefined, _ColMarked, _SortCol) -> - done; -unmark_marked_col(BtnId, _ColMarked, _SortCol) -> - gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}} - ]). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_sort_btn_mark(ProcVars) -> - #process_variables{hbtns_shown = HbtnsShown, - col_mark_params = ColMarkP} = ProcVars, - - #col_mark_params{col_btn_id = MarkedColBtnId, - virtual_col_marked = ColMarked, - sort_btn_id = OldSortBtnId, - virtual_sort_col = SortCol} = ColMarkP, - - {NewMarkedColBtnId, NewColMarked} = case ColMarked of - SortCol -> - {undefined, undefined}; - _Other -> - {MarkedColBtnId, ColMarked} - end, - - NewSortBtnId = set_sort_btn_color(OldSortBtnId, SortCol, HbtnsShown), - - NewColMarkP = ColMarkP#col_mark_params{col_btn_id = NewMarkedColBtnId, - virtual_col_marked = NewColMarked, - sort_btn_id = NewSortBtnId}, - - ProcVars#process_variables{col_mark_params = NewColMarkP}. - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_btn_id(VirtualCol, HbtnsShown) -> - case lists:keysearch(VirtualCol, #hbtn.virtual_col, HbtnsShown) of - false -> - undefined; - {value, HbtnRec} -> - HbtnRec#hbtn.id - end. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -set_sort_btn_color(undefined, SortCol, HbtnsShown) -> - case lists:keysearch(SortCol, #hbtn.virtual_col, HbtnsShown) of - false -> - undefined; - {value, HbtnRec} -> - BtnId = HbtnRec#hbtn.id, - gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}]), - BtnId - end; -set_sort_btn_color(BtnId, undefined, _HbtnsShown) -> - gs:config(BtnId, [{bg, ?DEFAULT_BG_COLOR}]); -set_sort_btn_color(OldSortBtnId, SortCol, HbtnsShown) -> - case gs:read(OldSortBtnId, bg) of - SortCol -> - % Btn is already marked! - OldSortBtnId; - _OtherColor -> - % Unmark old btn, mark new btn, if visible. - gs:config(OldSortBtnId, [{bg, ?DEFAULT_BG_COLOR}]), - case lists:keysearch(SortCol, #hbtn.virtual_col, HbtnsShown) of - false -> - undefined; - {value, HbtnRec} -> - BtnId = HbtnRec#hbtn.id, - gs:config(BtnId, [{bg, ?SORT_MARK_COLOR}]), - BtnId - end - end. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_vbtns(N, NofRowsShown, _VirtualRowNo, - _Vbtns, _Colors, _BlinkEnabled, _BlinkList) when N > NofRowsShown -> - done; -update_vbtns(_N, _NofRowsShown, _VirtualRowNo, [], [], _BlinkEnabled, _BlinkList) -> - done; -update_vbtns(_N, _NofRowsShown, _VirtualRowNo, [], _Colors, _BlinkEnabled, _BlinkList) -> - % Right now we don't bother with dynamically creating row buttons: - % we ought too know in advance the maximum number of rows that can - % be visible. - io:format("Configuration error: too few rows in grid.~n"), - done; -update_vbtns(N, NofRowsShown, - VirtualRowNo, [VbtnRec | VT], [], BlinkEnabled, BlinkList) -> - VbtnId = VbtnRec#vbtn.id, - gs:config(VbtnId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, ?BLACK}, - {label, {text, integer_to_list(VirtualRowNo)}}, - {data, {vbtn, N, VirtualRowNo}} % Real row + virtual row - ]), - update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1,VT, [], BlinkEnabled, - BlinkList); -update_vbtns(N, NofRowsShown, - VirtualRowNo, [VbtnRec | VT], [Color | CT], true, BlinkList) -> - VbtnId = VbtnRec#vbtn.id, - {Text, TextColor} = get_vbtn_text_and_textcolor(Color, VirtualRowNo), - case lists:member(Color, BlinkList) of - true -> - gs:config(VbtnId, [{bg, Color}, - {fg, TextColor}, - {label, {text, Text}}, - {data, {vbtn, N, VirtualRowNo}}, % Real + virtual row - flash - ]); - false -> - gs:config(VbtnId, [{bg, Color}, - {fg, TextColor}, - {label, {text, Text}}, - {data, {vbtn, N, VirtualRowNo}} % Real + virtual row - ]) - end, - update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1, VT, CT, true, BlinkList); -update_vbtns(N, NofRowsShown, - VirtualRowNo, [VbtnRec | VT], [Color | CT], false, BlinkList) -> - VbtnId = VbtnRec#vbtn.id, - {Text, TextColor} = get_vbtn_text_and_textcolor(Color, VirtualRowNo), - gs:config(VbtnId, [{bg, Color}, - {fg, TextColor}, - {label, {text, Text}}, - {data, {vbtn, N, VirtualRowNo}} % Real row + virtual row - ]), - update_vbtns(N + 1, NofRowsShown, VirtualRowNo + 1, VT, CT, false, BlinkList). - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_vbtn_text_and_textcolor(?BLACK, N) -> - {integer_to_list(N), ?WHITE}; -get_vbtn_text_and_textcolor(?RED1, N) -> - {integer_to_list(N), ?BLACK}; -get_vbtn_text_and_textcolor(?RED2, N) -> - {integer_to_list(N), ?BLACK}; -get_vbtn_text_and_textcolor(?RED3, N) -> - {integer_to_list(N), ?BLACK}; -get_vbtn_text_and_textcolor(?RED4, N) -> - {integer_to_list(N), ?BLACK}; -get_vbtn_text_and_textcolor(?RED5, N) -> - {integer_to_list(N), ?BLACK}; -get_vbtn_text_and_textcolor(?GREEN1, N) -> - {integer_to_list(N), ?BLACK}; -get_vbtn_text_and_textcolor(?GREEN2, N) -> - {integer_to_list(N), ?BLACK}; -get_vbtn_text_and_textcolor(?GREEN3, N) -> - {integer_to_list(N), ?BLACK}; -get_vbtn_text_and_textcolor(?GREEN4, N) -> - {integer_to_list(N), ?BLACK}; -get_vbtn_text_and_textcolor(?GREEN5, N) -> - {integer_to_list(N), ?BLACK}; -get_vbtn_text_and_textcolor(_AnyOtherColor, N) -> - {integer_to_list(N), ?BLACK}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_vbtns(ParentId, Ypos, NofRows, RowHeight, VbtnW, HbtnH) -> - create_vbtns(1, NofRows, RowHeight, ParentId, VbtnW, Ypos + HbtnH, []). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_vbtns(N, NofRows, _RowHeight, _ParId, _VbtnW, _Ypos, VAcc) when N > NofRows -> - lists:reverse(VAcc); -create_vbtns(N, NofRows, RowHeight, ParId, VbtnW, Ypos, VAcc) -> - VHeight = RowHeight + 1, - VInfo = create_one_vbtn(ParId, VHeight, VbtnW, Ypos, N), - create_vbtns(N + 1, NofRows, RowHeight, ParId, VbtnW, Ypos + VHeight, - [VInfo | VAcc]). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_one_vbtn(ParentId, Height, VbtnW, Ypos, N) -> - Id = gs:button(ParentId, [{width, VbtnW}, - {height, Height}, - {x, 0}, - {y, Ypos}, - {font, ?BTN_FONT}, - {bg, ?DEFAULT_BG_COLOR}, - {align, center}, - {label, {text,integer_to_list(N)}}, - {data, {vbtn, N, N}} % Real row + virtual row - ]), - #vbtn{virtual_row = N, - real_row = N, - id = Id, - height = Height, - ypos = Ypos}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_hbtns([], _HBtnsShown, - _ResBtns, _VirtualColNo, _FrId, _Ypos, _HbtnH, _ResBtnW, _VbtnW) -> - {[], []}; -update_hbtns(ColsShown, HBtns, - ResBtns, VirtualColNo, FrId, Ypos, HbtnH, ResBtnW, VbtnW) -> - update_hbtns(1, ColsShown, HBtns, ResBtns, HbtnH, ResBtnW, VbtnW, - VirtualColNo, FrId, 0, Ypos, [], []). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_hbtns(_N, [], - [], [], _HbtnH, _ResBtnW, _VbtnW, _ColNo, _FrId, _Xpos, _Ypos, HAcc, RAcc) -> - {lists:reverse(HAcc), lists:reverse(RAcc)}; - -update_hbtns(N, [], [HInfo | HT], [RInfo | RT], - HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) -> - % If too many buttons, i.e., if the ColsShown list - % has become empty. - gs:destroy(HInfo#hbtn.id), - gs:destroy(RInfo#resbtn.id), - update_hbtns(N, [], HT, RT, HbtnH, ResBtnW, VbtnW, ColNo, FrId, - Xpos, Ypos, HAcc, RAcc); - -update_hbtns(1, [ColW | T], [], [], - HbtnH, ResBtnW, VbtnW, ColNo, FrId, _Xpos, Ypos, HAcc, RAcc) -> - % The first button has to be bigger than the others. - {HInfo, RInfo} = create_one_hbtn_and_resbtn(FrId, ColW - 2, - HbtnH, VbtnW - 1, - Ypos, ResBtnW, 1, ColNo), - update_hbtns(2, T, [], [], HbtnH, ResBtnW, VbtnW, ColNo + 1, - FrId, VbtnW - 1 + ColW - 2 + ResBtnW, Ypos, [HInfo | HAcc], - [RInfo | RAcc]); - -update_hbtns(N, [ColW | T], [], [], - HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) -> - {HInfo, RInfo} = create_one_hbtn_and_resbtn(FrId, ColW - 4, - HbtnH, Xpos, - Ypos, ResBtnW, N, ColNo), - update_hbtns(N + 1, T, [], [], HbtnH, ResBtnW, VbtnW, ColNo + 1, - FrId, Xpos + ColW - 4 + ResBtnW, Ypos, [HInfo | HAcc], - [RInfo | RAcc]); - -update_hbtns(1, [ColW | T], [HInfo | HT], [RInfo | RT], - HbtnH, ResBtnW, VbtnW, ColNo, FrId, _Xpos, Ypos, HAcc, RAcc) -> - {NewHInfo, NewRInfo} = config_one_hbtn_and_resbtn(HInfo, RInfo, - ColW - 2, - VbtnW - 1, - 1, ColNo), - update_hbtns(2, T, HT, RT, HbtnH, ResBtnW, VbtnW, ColNo + 1, - FrId, VbtnW - 1 + ColW - 2 + ResBtnW, Ypos, - [NewHInfo | HAcc], [NewRInfo | RAcc]); - -update_hbtns(N, [ColW | T], [HInfo | HT], [RInfo | RT], - HbtnH, ResBtnW, VbtnW, ColNo, FrId, Xpos, Ypos, HAcc, RAcc) -> - {NewHInfo, NewRInfo} = config_one_hbtn_and_resbtn(HInfo, RInfo, - ColW - 4, - Xpos, N, - ColNo), - update_hbtns(N + 1, T, HT, RT, HbtnH, ResBtnW, VbtnW, ColNo + 1, - FrId, Xpos + ColW - 4 + ResBtnW, Ypos, [NewHInfo | HAcc], - [NewRInfo | RAcc]). - - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_one_hbtn_and_resbtn(ParId, HWidth, HHeight, HXpos, Ypos, RWidth, N, ColNo) -> - HId = gs:button(ParId, [{width, HWidth}, - {height, HHeight}, - {x, HXpos}, - {y, Ypos}, - {font, ?BTN_FONT}, - {bg, ?DEFAULT_BG_COLOR}, - {data, {hbtn, N, ColNo}}, - {label, {text, integer_to_list(ColNo)}} - ]), - RId = gs:button(ParId, [{width, RWidth}, - {height, HHeight}, - {x, HXpos + HWidth}, - {y, Ypos}, - {cursor, resize}, - {buttonpress, true}, - {buttonrelease, true}, - {data, {resbtn, N, ColNo, (HXpos + HWidth + RWidth div 2)}}, - {bg, ?BLACK} - ]), - HInfo = #hbtn{virtual_col = ColNo, - real_col = N, - id = HId, - width = HWidth, - xpos = HXpos}, - RInfo = #resbtn{virtual_col = ColNo, - real_col = N, - id = RId, - width = RWidth, - xpos = HXpos + HWidth}, - {HInfo, RInfo}. - - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -config_one_hbtn_and_resbtn(HInfo, RInfo, HWidth, HXpos, N, ColNo) -> - gs:config(HInfo#hbtn.id, [{width, HWidth}, - {x, HXpos}, - {data, {hbtn, N, ColNo}}, - {label, {text, integer_to_list(ColNo)}} - ]), - gs:config(RInfo#resbtn.id, [{x, HXpos + HWidth}, - {data, {resbtn, N, ColNo, - (HXpos + HWidth + RInfo#resbtn.width div 2)}} - ]), - NewHInfo = HInfo#hbtn{virtual_col = ColNo, - width = HWidth, - xpos = HXpos}, - NewRInfo = RInfo#resbtn{virtual_col = ColNo, - xpos = HXpos + HWidth}, - {NewHInfo, NewRInfo}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_keys([], [], _FirstCol, _LastCol, _HBtns, _ParentId, KeyIdsAcc) -> - lists:reverse(KeyIdsAcc); - -update_keys([], [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) -> - gs:config(KeyId, [{x, 1200}]), - update_keys([], IdT, FirstCol, LastCol, HBtns, ParentId, - [KeyId | KeyIdsAcc]); - -update_keys([KeyNo | KT], [], FirstCol, LastCol, - HBtns,ParentId, KeyIdsAcc) when KeyNo >= FirstCol, KeyNo =< LastCol -> - {_Width, Xpos} = get_keywidth_and_pos(KeyNo, FirstCol, HBtns), - NewKeyId = create_key(ParentId, Xpos, 1), - update_keys(KT, [], FirstCol, LastCol, HBtns, ParentId, - [NewKeyId | KeyIdsAcc]); - -update_keys([_KeyNo | KT], [], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) -> - update_keys(KT, [], FirstCol, LastCol, HBtns, ParentId, - KeyIdsAcc); - -update_keys([KeyNo | KT], [KeyId | IdT], FirstCol, LastCol, - HBtns, ParentId, KeyIdsAcc) when KeyNo >= FirstCol, KeyNo =< LastCol -> - {Width, Xpos} = get_keywidth_and_pos(KeyNo, FirstCol, HBtns), - gs:config(KeyId, [{width, Width}, - {x, Xpos} - ]), - update_keys(KT, IdT, FirstCol, LastCol, HBtns, ParentId, - [KeyId | KeyIdsAcc]); - -update_keys([_KeyNo | KT], - [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId, KeyIdsAcc) -> - update_keys(KT, [KeyId | IdT], FirstCol, LastCol, HBtns, ParentId, - KeyIdsAcc). - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_keywidth_and_pos(VirtualCol, FirstCol, HBtns) -> - RealColNo = VirtualCol - FirstCol + 1, - HBtnR = lists:nth(RealColNo, HBtns), - #hbtn{width = Width, - xpos = Xpos} = HBtnR, - KeyWidth = 10, - % Compute the x position for the key! - KeyXpos = (Xpos + (Width div 2) - (KeyWidth div 2)), - {KeyWidth, KeyXpos}. - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_key(ParentId, Xpos, Ypos) -> - PicDir = code:priv_dir(tv), - C = gs:canvas(ParentId, [{width, 10}, - {height, 18}, - {x, Xpos}, - {y, Ypos}, - {bg, ?DEFAULT_BG_COLOR} - ]), - gs:create(image, C, [{bitmap, PicDir ++ "/key.xbm"}]), - C. - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/tv/src/tv_pb_int_def.hrl b/lib/tv/src/tv_pb_int_def.hrl deleted file mode 100644 index 0fe9df193a..0000000000 --- a/lib/tv/src/tv_pb_int_def.hrl +++ /dev/null @@ -1,99 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% - --define(WHITE, {255,255,255}). - --define(DEFAULT_BG_COLOR, {217,217,217}). - --define(COL_MARK_COLOR, {0, 0, 0}). --define(SORT_MARK_COLOR, {255,215,0}). - --define(BLINK_COLOR1, {255,0,0}). --define(BLINK_COLOR2, {0,255,0}). --define(BLINK_COLOR3, {0,0,0}). --define(BTN_FONT, {courier,12}). - - - - --record(col_mark_params, {col_btn_id, - virtual_col_marked, - sort_btn_id, - virtual_sort_col - }). - - - --record(row_mark_params, {virtual_row_marked, - real_row_marked - }). - - - - --record(process_variables, {parent_pid, - grid_frame_id, - grid_frame_width, - grid_frame_height, - ypos, - hbtn_height, - vbtn_width, - resbtn_width, - first_col_shown, - hbtns_shown = [], - vbtns_shown = [], - resbtns_shown = [], - cols_shown = [], - key_numbers = [], - key_ids = [], - blink_color_list = [?BLINK_COLOR1, - ?BLINK_COLOR2, - ?BLINK_COLOR3], - col_mark_params = #col_mark_params{}, - row_mark_params = #row_mark_params{} - }). - - - --record(hbtn, {virtual_col, - real_col, - id, - width, - xpos - }). - - - --record(resbtn, {virtual_col, - real_col, - id, - width, - xpos - }). - - - --record(vbtn, {virtual_row, - real_row, - id, - height, - ypos - }). - - - diff --git a/lib/tv/src/tv_pc.erl b/lib/tv/src/tv_pc.erl deleted file mode 100644 index e0612e13eb..0000000000 --- a/lib/tv/src/tv_pc.erl +++ /dev/null @@ -1,795 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: pc part of the table tool, i.e., the process -%%% controlling all other processes, and managing -%%% the actions to take. -%%% -%%%********************************************************************* - - --module(tv_pc). --compile([{nowarn_deprecated_function,{gs,config,2}}]). - - - --export([pc/7, - send_data/2 - ]). - - - --include("tv_int_def.hrl"). --include("tv_int_msg.hrl"). --include("tv_pc_int_def.hrl"). - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - -%%====================================================================== -%% Function: pc. -%% -%% Return Value: None. -%% -%% Description: Process controlling the processes 'pd', 'pw', 'dbs' and 'etsread'. -%% After necessary initialisations, an eternal loop is -%% entered, where window created messages are received and -%% handled, as well as user input. -%% -%% Parameters: -%%====================================================================== - - -pc(Master, Node, LocalNode, TableId, KindOfTable, TableName, ErrMsgMode) -> - process_flag(trap_exit, true), - put(error_msg_mode, ErrMsgMode), - ProcVars = prepare_and_open_table(Node, LocalNode, TableId, KindOfTable, TableName, - false, #process_variables{parent_pid=Master}), - loop(ProcVars). - - - - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - - - -prepare_and_open_table(Node, LocalNode, TabId, TabType, TabName, Raise, ProcVars) -> - IpPid = spawn(tv_ip, ip, [self()]), - show_progress(IpPid, 5, "Initializing graphics..."), - - TmpProcVars = start_procs(IpPid, ProcVars), - - show_progress(IpPid, 5, "Loading table..."), - NewProcVars = ?MENU_FUNC_FILE:open_table(Node, LocalNode, TabId, TabType, TabName, - Raise, TmpProcVars), - - IpPid ! #ip_quit{sender = self()}, - % Now make window visible! - WinP = NewProcVars#process_variables.window_params, - gs:config(WinP#window_params.window_id, [{map, true}]), - NewProcVars. - - - - - -start_procs(IpPid, ProcVars) -> - ErrorMsgMode = get(error_msg_mode), - PwPid = spawn_link(tv_pw, pw, [self()]), - PdPid = spawn_link(tv_pd, pd, [self(), ErrorMsgMode]), - DbsPid = spawn_link(tv_db, dbs, [self(), ErrorMsgMode]), - EtsreadPid = spawn_link(tv_etsread, etsread, [self(), ErrorMsgMode]), - - show_progress(IpPid, 5, "Initializing graphics..."), - NewWinP = init_pw(PwPid, ProcVars), - - show_progress(IpPid, 5, "Initializing graphics..."), - init_pd(PdPid, NewWinP), - ProcVars#process_variables{pw_pid = PwPid, - pd_pid = PdPid, - dbs_pid = DbsPid, - etsread_pid = EtsreadPid, - current_node = node(), %% Will be replaced, when table opened. - local_node = true, - window_params = NewWinP - }. - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -show_progress(IpPid, NofElements, Text) -> - IpPid ! #ip_update{sender = self(), - nof_elements_to_mark = NofElements, - text = Text - }. - - - - - - - -%%====================================================================== -%% Function: loop. -%% -%% Return Value: None. -%% -%% Description: Eternal (well, almost) loop, receiving messages and -%% handling them. -%% -%% Parameters: None. -%%====================================================================== - - -loop(ProcVars) -> - receive - Msg -> - case Msg of - - % Normal messages! - #dbs_subset{} -> - NewProcVars1 = send_data(Msg, ProcVars), - NewProcVars2 = check_time_to_poll_table(Msg, NewProcVars1), - loop(NewProcVars2); - - #pc_poll_table{} -> - TmpProcVars = check_node(ProcVars), - NewProcVars = ?MENU_FUNC_FILE:poll_table(TmpProcVars), - loop(NewProcVars); - - #pc_search_req{} -> - DbsPid = ProcVars#process_variables.dbs_pid, - DbsPid ! #dbs_search_req{sender=self()}, - loop(ProcVars); - - #pc_set_sorting_mode{} -> - set_sorting_mode(Msg, ProcVars), - loop(ProcVars); - - - #pc_data_req{element = Pos, nof_elements = Length} -> - DbsPid = ProcVars#process_variables.dbs_pid, - DbsPid ! #dbs_subset_req{sender = self(), - subset_pos = Pos, - subset_length = Length - }, - loop(ProcVars); - - - #pc_marked_row{row_no=RowNo, object=Obj, color=Color} -> - DbsPid = ProcVars#process_variables.dbs_pid, - DbsPid ! #dbs_marked_row{sender = self(), - row_no = RowNo - }, - NewProcVars = ProcVars#process_variables{marked_row = RowNo, - marked_object = Obj, - marked_color = Color}, - loop(NewProcVars); - - - #pc_menu_msg{} -> - Fcn = Msg#pc_menu_msg.data, - NewProcVars = ?MENU_FUNC_FILE:Fcn(ProcVars), - loop(NewProcVars); - - - #pd_updated_object{object=Obj,old_object=OldObj,old_color=Color,obj_no=ObjNo} -> - DbsPid = ProcVars#process_variables.dbs_pid, - DbsPid ! #dbs_updated_object{sender = self(), - object = Obj, - old_object = OldObj, - old_color = Color, - obj_no = ObjNo}, - loop(ProcVars); - - - #pd_new_object{object=Obj} -> - DbsPid = ProcVars#process_variables.dbs_pid, - DbsPid ! #dbs_new_object{sender = self(), - object = Obj}, - loop(ProcVars); - - - #pc_show_table_info{} -> - NewProcVars = ?MENU_FUNC_FILE:table_info(ProcVars), - loop(NewProcVars); - - #pc_win_conf{} -> - NewProcVars = ?GRAPH_FUNC_FILE:win_conf(Msg, ProcVars), - loop(NewProcVars); - - #pc_help{} -> - NewProcVars = ?MENU_FUNC_FILE:help_button(ProcVars), - loop(NewProcVars); - - #pc_dead_table{automatic_polling = AutoPoll} -> - WinP = ProcVars#process_variables.window_params, - WinId = WinP#window_params.window_id, - gs:config(WinId, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(WinId, "TV Notification", - ["The table no longer exists!"]); - haiku -> - ErrMsg1 = ["A table that big?", - "It might be very useful.", - "But now it is gone."], - tv_utils:notify(WinId, "TV Notification", ErrMsg1) - end, - NewProcVars = - case AutoPoll of - true -> - gs:config(WinId, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(WinId, "TV Notification", - ["The automatic polling is turned off!"]); - haiku -> - ErrMsg2 = ["Previously on", - "The polling is now idled.", - "That's the way it is."], - tv_utils:notify(WinId, "TV Notification", ErrMsg2) - end, - ProcVars#process_variables{poll_interval = infinity}; - false -> - ProcVars - end, - loop(NewProcVars); - - #pc_nodedown{automatic_polling = AutoPoll} -> - WinP = ProcVars#process_variables.window_params, - WinId = WinP#window_params.window_id, - gs:config(WinId, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(WinId, "TV Notification", - ["The node is down, and the", - "table cannot be reached."]); - haiku -> - ErrMsg1 = ["With searching comes loss", - "And the presence of absence:", - "Node is down."], - tv_utils:notify(WinId, "TV Notification", ErrMsg1) - end, - NewProcVars = - case AutoPoll of - true -> - gs:config(WinId, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(WinId, "TV Notification", - ["The automatic polling is turned off!"]); - haiku -> - ErrMsg = ["Previously on,", - "The polling is now idled.", - "That's the way it is."], - tv_utils:notify(WinId, "TV Notification", ErrMsg) - end, - ProcVars#process_variables{poll_interval = infinity}; - false -> - ProcVars - end, - loop(NewProcVars); - - - {pc_edit_object, _Sender} -> - NewProcVars = ?MENU_FUNC_FILE:insert_object(ProcVars), - loop(NewProcVars); - - - check_node -> - NewProcVars = check_node(ProcVars), - loop(NewProcVars); - - - raise -> - WinP = ProcVars#process_variables.window_params, - gs:config(WinP#window_params.window_id, [raise]), - loop(ProcVars); - - - {error_msg_mode, Mode} -> - ProcVars#process_variables.dbs_pid ! {error_msg_mode, Mode}, - ProcVars#process_variables.etsread_pid ! {error_msg_mode, Mode}, - ProcVars#process_variables.pd_pid ! {error_msg_mode, Mode}, - put(error_msg_mode, Mode), - loop(ProcVars); - - % Exit messages! - {'EXIT', Sender, Reason} -> - exit_signals({Sender, Reason}, ProcVars); - - - _Other -> - loop(ProcVars) - - end - end. - - - - - - -check_node(ProcVars) -> - #process_variables{pw_pid = PwPid, - current_node = OldCurrNode, - local_node = LocalNode, - table_id = TableId, - table_type = TableType, - table_name = TableName} = ProcVars, - - HomeNode = node(), - case net_adm:ping(OldCurrNode) of - pong -> - ProcVars; - pang when not LocalNode -> - ProcVars; - pang when LocalNode -> - %% XXX [siri] Will this ever happen? I thought local_node - %% indicated if current_node was the node where tv was - %% started. If so, we are pinging ourselves here, and - %% a pang can never happen?? - WinTitle = ?MENU_FUNC_FILE:get_window_title(TableType,HomeNode,TableId,TableName), - PwPid ! #pw_set_window_title{sender = self(), - win_title = WinTitle}, - ProcVars#process_variables{current_node = HomeNode} - end. - - - - - - - -send_data(Msg, ProcVars) -> - #process_variables{pd_pid = PdPid, - parent_pid = ParentPid, - table_id = Table, - table_type = Type, - current_node = Node} = ProcVars, - - ParentPid ! {tv_update_infowin, Table, Node, Type}, - - #dbs_subset{data = DbData, - subset_pos = ScalePos, - db_length = DbLength, - list_of_keys = ListOfKeys, - max_elem_size = MaxElemSize, - requested_row = ReqRowData} = Msg, - - Range = case ScalePos of - 0 -> - {0, 0}; - _Other -> - {1, DbLength} - end, - - PdPid ! #pc_data{sender = self(), - scale_pos = ScalePos, - scale_range = Range, - elementlist = DbData, - list_of_keys = ListOfKeys, - max_elem_size = MaxElemSize, - marked_row = ReqRowData - }, - - {MarkedObject, MarkedColor} = - case ReqRowData of - [] -> - {undefined, undefined}; - [Data] -> - Data - end, - ProcVars#process_variables{marked_object = MarkedObject, - marked_color = MarkedColor}. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -set_sorting_mode(Msg, ProcVars) -> - #pc_set_sorting_mode{sorting = Sorting, - reverse = Reverse, - sort_key_no = SortKeyNo} = Msg, - - DbsPid = ProcVars#process_variables.dbs_pid, - PdPid = ProcVars#process_variables.pd_pid, - PwPid = ProcVars#process_variables.pw_pid, - TableType = ProcVars#process_variables.table_type, - - NewSortKeyNo = - case SortKeyNo of - undefined -> - if - TableType =:= mnesia -> - 2; - true -> - 1 - end; - _Other -> - SortKeyNo - end, - - Menu = - case Sorting of - true -> - case Reverse of - true -> - sort_falling_order; - false -> - sort_rising_order - end; - false -> - no_sorting - end, - - PwPid ! #pw_select_menu{sender = self(), - menu = Menu}, - - DbsPid ! #dbs_sorting_mode{sender = self(), - sorting = Sorting, - reverse = Reverse, - sort_key_no = NewSortKeyNo - }, - - PdPid ! #pc_set_sorting_mode_cfm{sender = self(), - sort_key_no = NewSortKeyNo - }. - - - - - - - -%%====================================================================== -%% Function: init_pw. -%% -%% Return Value: Tuple containing the Pid of the pw process, and the id of -%% the window created by the pw process. -%% -%% Description: Starts the pw process, and orders it to create a window. -%% (The size of the window may be given as option.) -%% -%% Parameters: None. -%%====================================================================== - - - -init_pw(PwPid, ProcVars) -> - #process_variables{window_params = WinP} = ProcVars, - - % Now deblock pw, and order it to create a window! - PwPid ! #pw_deblock{sender = self(), - win_title = ?APPLICATION_NAME, - win_width = ?DEFAULT_WINDOW_WIDTH, - win_height = ?DEFAULT_WINDOW_HEIGHT, - min_win_width = ?DEFAULT_MIN_WINDOW_WIDTH, - min_win_height = ?DEFAULT_MIN_WINDOW_HEIGHT - }, - - - receive - #pw_deblock_cfm{win_id = WindowId} -> - ?MENU_FUNC_FILE:create_menus(PwPid), - - % Store the window id as well as the size of it. - WinP#window_params{window_id = WindowId, - window_width = ?DEFAULT_WINDOW_WIDTH, - window_height = ?DEFAULT_WINDOW_HEIGHT - } - - - after 180000 -> % A timeout of 1000 ms is too short, at least the first - % time the system is started! - exit(error) - end. - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -init_pd(PdPid, WinP) -> - #window_params{window_id = WindowId, - window_width = WindowWidth, - window_height = WindowHeight} = WinP, - - % Now deblock pd, and order it to create a canvas and a scale! - PdPid ! #pd_deblock{sender = self(), - win = WindowId, - win_width = WindowWidth, - win_height = WindowHeight, - scale = true - }, - - receive - #pd_deblock_cfm{} -> - done - after 180000 -> - exit(error) - end. - - - - - - - - - - -%%====================================================================== -%% Function: exit_signals. -%% -%% Return Value: None. -%% -%% Description: Decides, given an error message, action to take, i.e., whether -%% operation shall procede, any process shall be restarted, or -%% the table tool terminated. -%% -%% Parameters: Exit_info: tuple containing sender of the error message, and the -%% reason. -%%====================================================================== - - -exit_signals(ExitInfo, ProcVars) -> - #process_variables{parent_pid = ParentPid, - pd_pid = PdPid, - pw_pid = PwPid, - dbs_pid = DbsPid, - etsread_pid = EtsreadPid, - table_id = TabId, - table_type = TabType, - table_name = TabName, - current_node = Node, - local_node = LocalNode - } = ProcVars, - - case ExitInfo of - {ParentPid, Reason} -> - exit(Reason); - - {PwPid, normal} -> - exit(normal); - - {PwPid, error} -> - io:format("Internal error... restarting. ~n"), - kill_procs(normal, [PdPid, EtsreadPid, DbsPid]), - NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName, - get(error_msg_mode)), - loop(NewProcVars); - - {PdPid, _Reason} -> - io:format("Internal error... restarting. ~n"), - kill_procs(normal, [PwPid, EtsreadPid, DbsPid]), - NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName, - get(error_msg_mode)), - loop(NewProcVars); - - {DbsPid, _Reason} -> - io:format("Internal error... restarting. ~n"), - kill_procs(normal, [PdPid, PwPid, EtsreadPid]), - NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName, - get(error_msg_mode)), - loop(NewProcVars); - - {EtsreadPid, _Reason} -> - io:format("Internal error... restarting. ~n"), - kill_procs(normal, [PdPid, PwPid, DbsPid]), - NewProcVars = pc(ParentPid, Node, LocalNode, TabId, TabType, TabName, - get(error_msg_mode)), - loop(NewProcVars); - - {_Sender, _OtherReason} -> - loop(ProcVars) - end. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -kill_procs(_Status, []) -> - done; -kill_procs(Status, [Pid | Tail]) -> - exit(Pid, Status), - kill_procs(Status, Tail). - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -check_time_to_poll_table(Msg, ProcVars) -> - #dbs_subset{required_time_etsread = EtsreadTime, - required_time_dbs = DbsTime} = Msg, - - UserSetPollInterval = ProcVars#process_variables.poll_interval, - WinP = ProcVars#process_variables.window_params, - WinId = WinP#window_params.window_id, - - case too_short_pollinterval_chosen(UserSetPollInterval, EtsreadTime, DbsTime) of - true -> - EtsreadPid = ProcVars#process_variables.etsread_pid, - EtsreadPid ! #etsread_set_poll_interval{sender = self(), - interval = infinity}, - - TimeRequired = trunc(max_time_required(EtsreadTime, DbsTime) / 10 + 0.5) * 10 + 20, - - gs:config(WinId, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(WinId, "TV Notification", - ["The current poll interval is too short!"]), - Str = "to " ++ lists:flatten(io_lib:write(TimeRequired)) ++ " seconds!", - tv_utils:notify(WinId, "TV Notification", ["Setting the poll interval", Str]); - haiku -> - ErrMsg = ["Being way too short", - "The interval of polling", - "Is simply increased."], - tv_utils:notify(WinId, "TV Notification", ErrMsg) - end, - clear_message_buffer(), - EtsreadPid ! #etsread_set_poll_interval{sender = self(), - interval = TimeRequired}, - - ProcVars#process_variables{poll_interval = TimeRequired}; - false -> - ProcVars - end. - - - - - - -clear_message_buffer() -> - receive - #dbs_subset{} -> - clear_message_buffer() - after 100 -> - done - end. - - - - - -max_time_required(T1, T2) when is_number(T1), is_number(T2) -> - if - T1 > T2 -> - T1; - true -> - T2 - end; -max_time_required(T1, _T2) when is_number(T1) -> - T1; -max_time_required(_T1, T2) -> - T2. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -too_short_pollinterval_chosen(infinity, _EtsreadTime, _DbsTime) -> - false; -too_short_pollinterval_chosen(undefined, _EtsreadTime, _DbsTime) -> - false; -too_short_pollinterval_chosen(PollInt, EtsreadTime, _DbsTime) when EtsreadTime >= PollInt, is_number(EtsreadTime) -> - true; -too_short_pollinterval_chosen(PollInt, _EtsreadTime, DbsTime) when DbsTime >= PollInt, is_number(DbsTime) -> - true; -too_short_pollinterval_chosen(_PollInt, _EtsreadTime, _DbsTime) -> - false. diff --git a/lib/tv/src/tv_pc_graph_ctrl.erl b/lib/tv/src/tv_pc_graph_ctrl.erl deleted file mode 100644 index 3fc3ded565..0000000000 --- a/lib/tv/src/tv_pc_graph_ctrl.erl +++ /dev/null @@ -1,120 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_pc_graph_ctrl). - - - --export([create_menu/4, win_conf/2]). - - --include("tv_int_msg.hrl"). --include("tv_pc_int_def.hrl"). - - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_menu(PwPid, MenuTitle, TitleAccPos, MenuList) -> - PwPid ! #pw_create_menu{sender = self(), - menutitle = MenuTitle, - title_acc_pos = TitleAccPos, - menulist = MenuList - }, - receive - #pw_create_menu_cfm{} -> - done - after 10000 -> - exit(error) - end. - - - - - - - - - -%%====================================================================== -%% Function: win_conf. -%% -%% Return Value: None. -%% -%% Description: Configures all objects in the window according to new coordinates. -%% -%% Parameters: -%%====================================================================== - - -win_conf(Msg, ProcVars) -> - #pc_win_conf{width = NewWidth, - height = NewHeight} = Msg, - - #process_variables{pd_pid = PdPid, - window_params = WinP} = ProcVars, - - #window_params{window_width = OldWindowWidth, - window_height = OldWindowHeight} = WinP, - - - case {NewWidth, NewHeight} of - {OldWindowWidth, OldWindowHeight} -> - ProcVars; - _Other -> - PdPid ! #pd_win_conf{sender = self(), - width = NewWidth, - height = NewHeight - }, - NewWinP = WinP#window_params{window_width = NewWidth, - window_height = NewHeight}, - - ProcVars#process_variables{window_params = NewWinP} - end. - - - - - - - - - - - - diff --git a/lib/tv/src/tv_pc_int_def.hrl b/lib/tv/src/tv_pc_int_def.hrl deleted file mode 100644 index 22f8dcd5d8..0000000000 --- a/lib/tv/src/tv_pc_int_def.hrl +++ /dev/null @@ -1,62 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Include file for the pc parts of the table tool. -%%% -%%%********************************************************************* - - --define(HEAD_FILE, pc). --define(GRAPH_FUNC_FILE, tv_pc_graph_ctrl). --define(MENU_FUNC_FILE, tv_pc_menu_handling). - - - --define(APPLICATION_NAME, "Table Visualizer"). --define(DEFAULT_WINDOW_WIDTH, 750). --define(DEFAULT_WINDOW_HEIGHT, 600). --define(DEFAULT_MIN_WINDOW_WIDTH, 300). --define(DEFAULT_MIN_WINDOW_HEIGHT, 250). - - --record(window_params, {window_id, - window_width, - window_height - }). - - - --record(process_variables, {parent_pid, - pw_pid, - pd_pid, - dbs_pid, - etsread_pid, - current_node, - local_node, - table_id = undefined, - table_type = ets, - table_name, - table_protection, - marked_row, - marked_object, - marked_color, - lists_as_strings = true, - poll_interval = infinity, % seconds or 'infinity' - window_params = #window_params{} - }). diff --git a/lib/tv/src/tv_pc_menu_handling.erl b/lib/tv/src/tv_pc_menu_handling.erl deleted file mode 100644 index 64a06743b7..0000000000 --- a/lib/tv/src/tv_pc_menu_handling.erl +++ /dev/null @@ -1,489 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Part of pc handling the creation of menus, as well as -%%% treating the signals these menus results in, -%%% when chosen. -%%% -%%%********************************************************************* - - --module(tv_pc_menu_handling). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([create_menus/1, - exit_button/1, - insert_object/1, - delete_object/1, - search_object/1, - open_table/7, - set_poll_interval/1, - poll_table/1, - sort_rising_order/1, - sort_falling_order/1, - no_sorting/1, - lists_as_strings/1, - lists_as_lists/1, - table_info/1, - help_button/1, - otp_help_button/1, - get_window_title/4]). - - - - - --include("tv_int_def.hrl"). --include("tv_int_msg.hrl"). --include("tv_pc_int_def.hrl"). - - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - -%% Shortcuts currently used, in alphabetical order: -%% -%% c -> "Exit" -%% d -> "Delete Object" -%% f -> "Sort Falling Order" -%% h -> "Help" -%% i -> "Table Info" -%% n -> "No Sorting" -%% o -> "Edit Object" -%% p -> "Poll Table" -%% r -> "Sort Rising Order" -%% s -> "Search Object" -%% v -> "Set Poll Interval" -%% x -> "Exit" - - -create_menus(PwPid) -> - %% Due to a bug (or some other reason), only one of the radiobuttons belonging - %% to a specified group can be selected, even if different processes have created - %% the radiobuttons! This means that, if we have started more than one tv_main - %% process, selecting one radiobutton will affect the radiobuttons in the other - %% tv_main process(es)!!! Since this is a highly undesirable bahaviour, we have to - %% create unique group names (i.e., atoms). - %% (We need to group the radiobuttons, since otherwise all created by one process - %% belongs to the same group, which also is undesirable...) - SelfStr = pid_to_list(self()), - SortGroup = list_to_atom("sorting" ++ SelfStr), - ListGroup = list_to_atom("lists" ++ SelfStr), - - % Order pw to create the 'File' menu. - ?GRAPH_FUNC_FILE:create_menu(PwPid, - " File ", - 1, - [{" Table Info ", normal, table_info, 7, i}, - separator, - {" Close ", normal, exit_button, 1, c} - ]), - ?GRAPH_FUNC_FILE:create_menu(PwPid, - " Edit ", - 1, - [{" Edit Object... ", normal, insert_object, 1, o}, - {" Delete Object ", normal, delete_object, 1, d} - ]), - ?GRAPH_FUNC_FILE:create_menu(PwPid, - " View ", - 1, - [{" Lists as Lists ",{radio,false,ListGroup},lists_as_lists,10,no_char}, - {" Lists as Strings ",{radio,true,ListGroup},lists_as_strings,10,no_char} - ]), - % Order pw to create the 'Options' menu. - ?GRAPH_FUNC_FILE:create_menu(PwPid, - " Options ", - 1, - [{" Poll Table ", normal, poll_table, 1, p}, - {" Poll Interval... ",normal,set_poll_interval,6,no_char}, - separator, - {" Search Object ", normal, search_object, 1, s}, - separator, - {" Sort Ascending Order ",{radio,false,SortGroup},sort_rising_order,6,no_char}, - {" Sort Descending Order ",{radio,false,SortGroup},sort_falling_order,6,no_char}, - {" No Sorting ",{radio,true,SortGroup},no_sorting,1,no_char} - ]). - - - - - -exit_button(_ProcVars) -> - exit(normal). - - - -help_button(ProcVars) -> - WinP = ProcVars#process_variables.window_params, - HelpFile = filename:join([code:lib_dir(tv), "doc", "html", "index.html"]), - tool_utils:open_help(WinP#window_params.window_id, HelpFile), - ProcVars. - - - - -otp_help_button(ProcVars) -> - WinP = ProcVars#process_variables.window_params, - IndexFile = filename:join([code:root_dir(), "doc", "index.html"]), - - tool_utils:open_help(WinP#window_params.window_id, IndexFile), - ProcVars. - - - - -table_info(ProcVars) -> - #process_variables{table_id = TableId, - current_node = Node, - local_node = LocalNode, - table_type = Type, - parent_pid = ParentPid} = ProcVars, - - case TableId of - undefined -> - done; - _OtherValue -> - ParentPid ! {tv_start_infowin, TableId, Node, LocalNode, Type} - end, - ProcVars. - - - -sort_rising_order(ProcVars) -> - request_sort_settings(ProcVars#process_variables.pd_pid, true, false), - ProcVars. - - -sort_falling_order(ProcVars) -> - request_sort_settings(ProcVars#process_variables.pd_pid, true, true), - ProcVars. - - -no_sorting(ProcVars) -> - request_sort_settings(ProcVars#process_variables.pd_pid, false, false), - ProcVars. - - -set_poll_interval(ProcVars) -> - #process_variables{etsread_pid = EtsreadPid, - poll_interval = PollInterval} = ProcVars, - - case tv_poll_dialog:start(PollInterval) of - cancel -> - ProcVars; - NewPollInterval -> - EtsreadPid ! #etsread_set_poll_interval{sender = self(), - interval = NewPollInterval}, - ProcVars#process_variables{poll_interval = NewPollInterval} - end. - - - -poll_table(ProcVars) -> - EtsreadPid = ProcVars#process_variables.etsread_pid, - EtsreadPid ! #etsread_poll_table{sender = self()}, - ProcVars. - - -search_object(ProcVars) -> - DbsPid = ProcVars#process_variables.dbs_pid, - DbsPid ! #dbs_search_req{sender=self()}, - ProcVars. - - - -lists_as_strings(ProcVars) -> - PdPid = ProcVars#process_variables.pd_pid, - PdPid ! #pc_list_info{sender=self(), lists_as_strings=true}, - DbsPid = ProcVars#process_variables.dbs_pid, - DbsPid ! #pc_list_info{sender=self(), lists_as_strings=true}, - ProcVars#process_variables{lists_as_strings=true}. - - - - -lists_as_lists(ProcVars) -> - PdPid = ProcVars#process_variables.pd_pid, - PdPid ! #pc_list_info{sender=self(), lists_as_strings=false}, - DbsPid = ProcVars#process_variables.dbs_pid, - DbsPid ! #pc_list_info{sender=self(), lists_as_strings=false}, - ProcVars#process_variables{lists_as_strings=false}. - - - - - - -insert_object(ProcVars) -> - #process_variables{pd_pid = PdPid, - current_node = Node, - local_node = LocalNode, - table_type = TabType, - table_name = TabName, - table_protection = Protection, - window_params = WinP} = ProcVars, - - case Protection of - public -> - case TabType of - mnesia -> - case catch tv_mnesia_rpc:table_info(Node, LocalNode, TabName, attributes) of - nodedown -> - handle_error(nodedown); - no_table -> - handle_error(nodedown); - mnesia_not_started -> - handle_error(mnesia_not_started); - {unexpected_error,Reason} -> - handle_error({unexpected_error,Reason}); - AttrList -> - PdPid ! #pd_rec_edit{sender = self(), - attributes = AttrList - } - end; - ets -> - PdPid ! #pd_rec_edit{sender = self(), - attributes = [tuple] - } - end; - _OtherProtection -> - WinId = WinP#window_params.window_id, - gs:config(WinId, [beep]), - ErrMsg = - case get(error_msg_mode) of - normal -> - ["The table is protected and", - " cannot be edited."]; - haiku -> - ["The table you see", - "Is cunningly protected:", - "You can only watch."] - end, - tv_utils:notify(WinId, "TV Notification", ErrMsg) - end, - ProcVars. - - - - - - -delete_object(ProcVars) -> - #process_variables{dbs_pid = DbsPid, - table_protection = Protection, - marked_row = MarkedRow, - marked_object = MarkedObject, - marked_color = MarkedColor, - window_params = WinP} = ProcVars, - - case MarkedRow of - undefined -> - done; - _AnyRow -> - case Protection of - public -> - DbsPid ! #dbs_delete_object{sender = self(), - object = MarkedObject, - color = MarkedColor, - obj_no = MarkedRow}; - _OtherProtection -> - WinId = WinP#window_params.window_id, - gs:config(WinId, [beep]), - ErrMsg = - case get(error_msg_mode) of - normal -> - ["The table is protected and", - " cannot be edited."]; - haiku -> - ["The table you see", - "Is cunningly protected:", - "You can only watch."] - end, - tv_utils:notify(WinId, "TV Notification", ErrMsg) - end - end, - ProcVars. - - - - - - -open_table(CurrNode, LocalNode, TableId, TableType, TableName, Raise, ProcVars) -> - #process_variables{dbs_pid = DbsPid, - etsread_pid = EtsreadPid, - pw_pid = PwPid, - pd_pid = PdPid, - poll_interval = PollInterval, - window_params = WinP} = ProcVars, - - case Raise of - true -> - gs:config(WinP#window_params.window_id, [raise]); - false -> - done - end, - - {Type, KeyPos, Protection} = init_etsread(EtsreadPid, DbsPid, CurrNode, LocalNode, TableId, - TableType, PollInterval), - WinTitle = get_window_title(TableType, CurrNode, TableId, TableName), - PwPid ! #pw_set_window_title{sender = self(), - win_title = WinTitle}, - Writable = - case Protection of - public -> - true; - _Other -> - false - end, - RecordName = - case TableType of - mnesia -> - tv_mnesia_rpc:table_info(CurrNode, LocalNode, TableId, record_name); - ets -> - undefined - end, - PdPid ! #pd_new_table{sender = self(), - table_type = TableType, - table_name = TableName, - record_name = RecordName, - writable = Writable}, - init_dbs(DbsPid, Type, KeyPos, EtsreadPid), - ProcVars#process_variables{current_node = CurrNode, - local_node = LocalNode, - table_id = TableId, - table_type = TableType, - table_name = TableName, - table_protection = Protection}. - - - - - - -get_window_title(ets, Node, TableId, TableName) -> - NameStr = lists:flatten(io_lib:write(TableName)), - TableStr = case TableId of - {TableName, _Pid} -> - NameStr; - TableName -> - NameStr; - _Other -> - lists:flatten(io_lib:write(TableId)) ++ " (" ++ NameStr ++ ")" - end, - - WinTitleSuffix = " Node: " ++ atom_to_list(Node), - "ETS: " ++ TableStr ++ WinTitleSuffix; -get_window_title(mnesia, Node, _TableId, TableName) -> - TableNameStr = lists:flatten(io_lib:write(TableName)), - WinTitleSuffix = " Node: " ++ atom_to_list(Node), - "Mnesia: " ++ TableNameStr ++ WinTitleSuffix. - - - - -%%%********************************************************************* -%%% INTERNAL FUNCTIONS -%%%********************************************************************* - - - -init_etsread(EtsreadPid, DbsPid, Node, LocalNode, TableId, TableType, PollInterval) -> - EtsreadPid ! #etsread_deblock{sender = self(), - dbs_pid = DbsPid, - node = Node, - local_node = LocalNode, - table_id = TableId, - table_type = TableType, - poll_interval = PollInterval - }, - receive - #etsread_deblock_cfm{type=Type, keypos=KeyPos, protection=Protection} -> - {Type, KeyPos, Protection} - after 10000 -> - exit(error) - end. - - - - -init_dbs(DbsPid, Type, KeyPos, EtsreadPid) -> - DbsPid ! #dbs_deblock{sender = self(), - etsread_pid = EtsreadPid, - type = Type, - keypos = KeyPos, - sublist_length = ?ITEMS_TO_DISPLAY - }, - receive - #dbs_deblock_cfm{} -> - done - after 10000 -> - exit(error) - end. - - - - - - -request_sort_settings(PdPid, Sorting, Reverse) -> - PdPid ! #pd_get_sort_settings{sender = self(), - sorting = Sorting, - reverse = Reverse - }. - - - - - - -handle_error(mnesia_not_started) -> - gs:window(errorwin, gs:start(), []), - gs:config(errorwin, [beep]), - case get(error_msg_mode) of - normal -> - tv_utils:notify(errorwin, "TV Notification", ["Mnesia not started!"]); - haiku -> - tv_utils:notify(errorwin, "TV Notification", ["Mnesia is stopped.", - "We wish to reach all data", - "But we never will."]) - end, - gs:destroy(errorwin); -handle_error(nodedown) -> - done; %% Main process handles this! -handle_error({unexpected_error,Cause}) -> - gs:window(errorwin, gs:start(), []), - io:format("Unexpected error: ~p~n", [Cause]), - gs:config(errorwin, [beep]), - gs:destroy(errorwin). - - diff --git a/lib/tv/src/tv_pd.erl b/lib/tv/src/tv_pd.erl deleted file mode 100644 index 6c38148fdd..0000000000 --- a/lib/tv/src/tv_pd.erl +++ /dev/null @@ -1,1127 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Code for pd, i.e., the data displaying part of the table -%%% tool. -%%% -%%%********************************************************************* - - --module(tv_pd). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,destroy,1}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([pd/2]). - - - - --include("tv_int_def.hrl"). --include("tv_int_msg.hrl"). --include("tv_pd_int_def.hrl"). --include("tv_pd_int_msg.hrl"). - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: pd. -%% -%% Return Value: None. -%% -%% Description: Process controlling the display part of the window, -%% i.e., showing diagrams and handling the scale used for scrolling. -%% -%% Parameters: None. -%%====================================================================== - - -pd(Master, ErrMsgMode) -> - process_flag(trap_exit, true), - put(error_msg_mode, ErrMsgMode), - PgPid = spawn_link(tv_pg, pg, [self()]), - PbPid = spawn_link(tv_pb, pb, [self()]), - - ProcVars = #process_variables{master_pid = Master, - pg_pid = PgPid, - pb_pid = PbPid}, - blocked(ProcVars). - - - - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - - - -%%====================================================================== -%% Function: blocked. -%% -%% Return Value: None. -%% -%% Description: When started or explicitly blocked, pd enters this state, -%% where nothing is performed until the module explicitly is -%% deblocked. -%% -%% Parameters: -%%====================================================================== - - -blocked(ProcVars) -> - receive - Msg -> - case Msg of - - #pd_deblock{} -> - deblock(Msg, ProcVars); - - - {error_msg_mode, Mode} -> - put(error_msg_mode, Mode), - blocked(ProcVars); - - - _Other -> - blocked(ProcVars) - end - end. - - - - - - - - - -%%====================================================================== -%% Function: deblock. -%% -%% Return Value: None. -%% -%% Description: When deblocked, a canvas and scale shall be created according to -%% specification received in pd_deblock message. -%% -%% Parameters: Rec: received pd_deblock message. -%%====================================================================== - - - -deblock(Msg, ProcVars) -> - #pd_deblock{win = WindowId, - win_width = WindowWidth, - win_height = WindowHeight} = Msg, - - NewProcVars = ?DISP_FUNC_FILE:init_display(WindowId, WindowWidth, WindowHeight, - ProcVars), - receive - - #pg_ready{} -> - Sender = Msg#pd_deblock.sender, - Sender ! #pd_deblock_cfm{sender = self()}, - deblocked_loop(NewProcVars) - - end. - - - - - - - - -%%====================================================================== -%% Function: deblocked_loop. -%% -%% Return Value: None. -%% -%% Description: Eternal (well, almost) loop, receiving messages and -%% handling them. -%% -%% Parameters: Master: Pid to the 'pc' process. -%% Win: Id of the window created. -%%====================================================================== - - - -deblocked_loop(ProcVars) -> - receive - Msg -> - case Msg of - - {gs, Id, Event, Data, Args} -> - NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars), - deblocked_loop(NewProcVars); - - _Other -> - NewProcVars = tv_messages(Msg, ProcVars), - deblocked_loop(NewProcVars) - end - end. - - - - - -tv_messages(Msg, ProcVars) -> - WinId = ProcVars#process_variables.window_id, - - case Msg of - #pg_cell_marked{} -> - mark_busy(WinId), - NewProcVars = handle_cell_marked(Msg, ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - #pc_data{} -> - mark_busy(WinId), - NewProcVars = show_data(Msg, ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - #pc_list_info{} -> - handle_list_info(Msg, ProcVars); - - #pb_col_marked{} -> - mark_busy(WinId), - NewProcVars = handle_col_marked(Msg, ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - #pb_row_marked{} -> - mark_busy(WinId), - NewProcVars = handle_row_marked(Msg, ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - #pb_new_colwidth{} -> - mark_busy(WinId), - NewProcVars = resize_column(Msg, ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - #pd_get_sort_settings{sorting = Sorting, reverse = Reverse} -> - mark_busy(WinId), - NewProcVars = - case send_sort_info_signal(Sorting, Reverse, ProcVars) of - ignore -> - ProcVars; - TempNewProcVars -> - set_sort_col(Sorting, TempNewProcVars) - end, - mark_nonbusy(WinId), - NewProcVars; - - #pd_new_table{table_type=TabType,table_name=TabName, - record_name=RecName,writable=Writable} -> - mark_busy(WinId), - ToolP = ProcVars#process_variables.toolbar_params, - ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable), - mark_nonbusy(WinId), - ProcVars#process_variables{table_type = TabType, - table_name = TabName, - record_name = RecName, - writable = Writable}; - - #pd_win_conf{} -> - mark_busy(WinId), - NewProcVars = resize_window(Msg, ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - #pd_rec_edit{} -> - mark_busy(WinId), - NewProcVars = open_rec_edit(Msg, ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - - {updated_object, UpdObj} -> - get_updated_elem2(true, UpdObj, ProcVars), - ProcVars; - - {new_object, NewObj} -> - get_updated_elem2(true, NewObj, ProcVars), - ProcVars; - - {error_msg_mode, Mode} -> - put(error_msg_mode, Mode), - ProcVars; - - {'EXIT', Pid, Reason} -> - exit_signals({Pid, Reason}, ProcVars); - - _Other -> - ProcVars - end. - - - - - - -exit_signals(ExitInfo, ProcVars) -> - #process_variables{master_pid = MasterPid, - pg_pid = PgPid, - pb_pid = PbPid, - rec_pid = RecPid} = ProcVars, - - case ExitInfo of - {MasterPid, _Reason} -> - exit(normal); - {PgPid, _Reason} -> - exit(normal); - {PbPid, _Reason} -> - exit(normal); - {RecPid, _Reason} -> - ProcVars#process_variables{rec_pid = undefined}; - _Other -> - ProcVars - end. - - - - -open_rec_edit(Msg, ProcVars) -> - #pd_rec_edit{attributes = AttrList} = Msg, - - #process_variables{rec_pid = RecPid, - table_type = TabType, - table_name = TabName, - record_name = RecordName, - lists_as_strings = ListsAsStr, - mark_params = MarkP} = ProcVars, - - #mark_params{marked_object = MarkedObject} = MarkP, - - TabOrRecName = - case TabType of - mnesia -> - RecordName; - ets -> - TabName - end, - - case RecPid of - undefined -> - NewRecPid = - case MarkedObject of - undefined -> - tv_rec_edit:start(TabType, TabOrRecName, AttrList, ListsAsStr, - get(error_msg_mode)); - _Other -> - AttrVals = - case TabType of - mnesia -> - tl(tuple_to_list(MarkedObject)); - ets -> - [MarkedObject] - end, - tv_rec_edit:start(TabType, TabOrRecName, AttrList, AttrVals, ListsAsStr, - get(error_msg_mode)) - end, - ProcVars#process_variables{rec_pid = NewRecPid}; - _AnyPid -> - RecPid ! raise, - ProcVars - end. - - - - - - - -gs_messages(Msg, ProcVars) -> - - case Msg of - - {editentry, keypress, _Data, ['Tab' | _T]} -> - gs:config(editentry, [{select, {0,100000000}}]), - ProcVars; - - {editentry, keypress, _Data, ['Return' | _T]} -> - get_updated_elem(ProcVars), - ProcVars; - - {Id, enter, {toolbar, Btn, Str}, _} -> - gs:config(Id, [{motion, true}]), - NewProcVars = handle_toolbar_buttons(Id, Btn, Str, false, 0, 0, - ProcVars), - NewProcVars; - - - {_Id, buttonpress, _Data, [3 | _Rest]} -> - ProcVars; - - - {_Id, buttonpress, vscale, [MouseBtn | _Tail]} -> - WinId = ProcVars#process_variables.window_id, - mark_busy(WinId), - NewProcVars = ?DISP_FUNC_FILE:scroll_vertically(MouseBtn, ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - - % The order of messages from gs ought to be - % 1. 'buttonpress' - % 2. 'click' and - % 3. 'buttonrelease' - % However, quite often the 'click' message comes last, meaning we have - % to check for this. :-( - - {_Id, click, vscale, [NewScalePos | _Tail]} -> - WinId = ProcVars#process_variables.window_id, - mark_busy(WinId), - NewProcVars = ?DISP_FUNC_FILE:perform_vertical_scroll(NewScalePos, - ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - - {_Id, buttonpress, hscale, [MouseBtn | _Tail]} -> - WinId = ProcVars#process_variables.window_id, - mark_busy(WinId), - NewProcVars = ?DISP_FUNC_FILE:scroll_horizontally(MouseBtn, ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - - {_Id, click, hscale, [NewScalePos | _Tail]} -> - WinId = ProcVars#process_variables.window_id, - mark_busy(WinId), - NewProcVars = ?DISP_FUNC_FILE:perform_horizontal_scroll(NewScalePos, - ProcVars), - mark_nonbusy(WinId), - NewProcVars; - - - {_Id, click, {toolbar, poll_table, _Str}, _Arg} -> - WinId = ProcVars#process_variables.window_id, - mark_busy(WinId), - PcPid = ProcVars#process_variables.master_pid, - PcPid ! #pc_poll_table{sender = self()}, - mark_nonbusy(WinId), - ProcVars; - - - {_Id, click, {toolbar, select_browser, _Str}, _Arg} -> - PcPid = ProcVars#process_variables.master_pid, - PcPid ! #pc_select{sender = self()}, - ProcVars; - - - {_Id, click, {toolbar, help_button, _Str}, _Arg} -> - PcPid = ProcVars#process_variables.master_pid, - PcPid ! #pc_help{sender = self()}, - ProcVars; - - - - {_Id, click, {toolbar, insert_object, _Str}, _Arg} -> - WinId = ProcVars#process_variables.window_id, - mark_busy(WinId), - PcPid = ProcVars#process_variables.master_pid, - PcPid ! {pc_edit_object, self()}, - mark_nonbusy(WinId), - ProcVars; - - - {_Id, click, {toolbar, search_object, _Str}, _Arg} -> - WinId = ProcVars#process_variables.window_id, - mark_busy(WinId), - PcPid = ProcVars#process_variables.master_pid, - PcPid ! #pc_search_req{sender = self()}, - mark_nonbusy(WinId), - ProcVars; - - - {_Id, click, {toolbar, sort_rising_order, _Str}, _Arg} -> - WinId = ProcVars#process_variables.window_id, - mark_busy(WinId), - NewProcVars = case send_sort_info_signal(true, false, ProcVars) of - ignore -> - ProcVars; - TempNewProcVars -> - set_sort_col(true, TempNewProcVars) - end, - mark_nonbusy(WinId), - NewProcVars; - - - {_Id, click, {toolbar, sort_falling_order, _Str}, _Arg} -> - WinId = ProcVars#process_variables.window_id, - mark_busy(WinId), - NewProcVars = case send_sort_info_signal(true, true, ProcVars) of - ignore -> - ProcVars; - TempNewProcVars -> - set_sort_col(true, TempNewProcVars) - end, - mark_nonbusy(WinId), - NewProcVars; - - - {_Id, click, {toolbar, no_sorting, _Str}, _Arg} -> - NewProcVars = case send_sort_info_signal(false, false, ProcVars) of - ignore -> - ProcVars; - TempNewProcVars -> - set_sort_col(false, TempNewProcVars) - end, - NewProcVars; - - - {Id, click, {toolbar, table_info, _Str}, _Arg} -> - ToolP = ProcVars#process_variables.toolbar_params, - F = ToolP#toolbar_params.pop_up_frame_id, - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - PcPid = ProcVars#process_variables.master_pid, - PcPid ! #pc_show_table_info{sender = self()}, - ProcVars; - - - {Id, click, {labelbtn, pop_up}, _Arg} -> - gs:config(Id, [{data, {labelbtn, pop_down}}]), - NewProcVars = ?DISP_FUNC_FILE:show_toolbar_editor(ProcVars), - NewProcVars; - - - {Id, click, {labelbtn, pop_down}, _Arg} -> - gs:config(Id, [{data, {labelbtn, pop_up}}]), - NewProcVars = ?DISP_FUNC_FILE:hide_toolbar_editor(ProcVars), - NewProcVars; - - - _OtherMessage -> - ProcVars - - end. - - - - - -get_updated_elem(ProcVars) -> - EditedStr = gs:read(editentry, text), - case tv_db_search:string_to_term(EditedStr) of - {error, {_Reason, Msg}} -> - gs:config(editentry, [beep]), - gs:window(pdwin, gs:start(), []), - tv_utils:notify(pdwin, "TV Notification", Msg), - gs:destroy(pdwin), - ProcVars; - {ok, NewTerm} -> - get_updated_elem2(false, NewTerm, ProcVars) - end. - - - - - -get_updated_elem2(FromRecEdit, NewTerm, ProcVars) -> - #process_variables{table_type = TableType, - record_name = RecordName, - mark_params = MarkP, - master_pid = PcPid} = ProcVars, - - #mark_params{marked_object = ObjToUpdate, - marked_color = ObjColor, - virtual_row_no = VirtualRow, - cell_col_no = VirtualCol} = MarkP, - - case ObjToUpdate of - undefined -> - case new_object_ok(TableType, RecordName, NewTerm) of - true -> - PcPid ! #pd_new_object{sender = self(), - object = NewTerm}, - ProcVars; - {false, Msg} -> - gs:window(pdwin, gs:start(), []), - tv_utils:notify(pdwin, "TV Notification", Msg), - gs:destroy(pdwin), - ProcVars - end; - _AnyObj -> - %% We need to know if the object has been deleted! - NewObj = - case VirtualCol of - undefined -> - NewTerm; - _AnyCol when FromRecEdit -> - NewTerm; - _AnyCol -> - if - is_tuple(ObjToUpdate) -> - erlang:setelement(VirtualCol, ObjToUpdate, NewTerm); - true -> - NewTerm - end - end, - %% Is the update OK? - case update_ok(TableType, ObjToUpdate, NewObj) of - true -> - PcPid ! #pd_updated_object{sender = self(), - object = NewObj, - old_object = ObjToUpdate, - old_color = ObjColor, - obj_no = VirtualRow}, - ProcVars; - false -> - gs:window(pdwin, gs:start(), []), - case get(error_msg_mode) of - normal -> - tv_utils:notify(pdwin, "TV Notification", - ["The record name cannot be changed!"]); - haiku -> - tv_utils:notify(pdwin, "TV Notification", - ["The attempt to change", - "The permanent record name", - "Is simply ignored."]) - end, - gs:destroy(pdwin), - ProcVars - end - end. - - - - -new_object_ok(ets, _RecordName, NewTerm) when is_tuple(NewTerm) -> - true; -new_object_ok(ets, _RecordName, _NewTerm) -> - Msg = case get(error_msg_mode) of - normal -> - ["Object is not a tuple!"]; - haiku -> - ["Yes, it is a term.", - "It is pretty, but it's not", - "A proper tuple."] - end, - {false, Msg}; -new_object_ok(mnesia, RecordName, NewTerm) when is_tuple(NewTerm) -> - NewRecName = element(1, NewTerm), - case NewRecName of - RecordName -> - true; - _OtherName -> - Msg = case get(error_msg_mode) of - normal -> - ["Erroneous record name!"]; - haiku -> - ["The attempt to use", - "An invalid record name", - "Is simply ignored."] - end, - {false, Msg} - end; -new_object_ok(mnesia, _RecordName, _NewTerm) -> - Msg = case get(error_msg_mode) of - normal -> - ["Object is not a record!"]; - haiku -> - ["Yes, it is a term.", - "It is pretty, but it's not", - "The proper record."] - end, - {false, Msg}. - - - - -update_ok(ets, _ObjectToUpdate, _NewObject) -> - true; -update_ok(mnesia, ObjectToUpdate, NewObject) -> - OldRecName = element(1, ObjectToUpdate), - NewRecName = element(1, NewObject), - case NewRecName of - OldRecName -> - true; - _Other -> - false - end. - - - - -handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars) -> - WinId = ProcVars#process_variables.window_id, - ToolP = ProcVars#process_variables.toolbar_params, - F = ToolP#toolbar_params.pop_up_frame_id, - - receive - - {gs, Id, motion, _Data, [NewX, NewY | _]} -> - handle_toolbar_buttons(Id, Btn, Str, LabelShown, NewX, NewY, - ProcVars); - - {gs, editentry, keypress, _Data, ['Tab' | _T]} -> - gs:config(editentry, [{select, {0,100000000}}]), - handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars); - - {gs, editentry, keypress, _Data, ['Return' | _T]} -> - get_updated_elem(ProcVars), - handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars); - - {gs, Id, leave, {toolbar, Btn, Str}, _Arg} -> - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - ProcVars; - - {gs, Id, click, {toolbar, poll_table, _Str}, _Arg} -> - mark_busy(WinId), - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - PcPid = ProcVars#process_variables.master_pid, - PcPid ! #pc_poll_table{sender = self()}, - mark_nonbusy(WinId), - ProcVars; - - {gs, Id, click, {toolbar, select_browser, _Str}, _Arg} -> - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - PcPid = ProcVars#process_variables.master_pid, - PcPid ! #pc_select{sender = self()}, - ProcVars; - - {gs, Id, click, {toolbar, help_button, _Str}, _Arg} -> - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - PcPid = ProcVars#process_variables.master_pid, - PcPid ! #pc_help{sender = self()}, - ProcVars; - - {gs, Id, click, {toolbar, insert_object, _Str}, _Arg} -> - mark_busy(WinId), - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - PcPid = ProcVars#process_variables.master_pid, - PcPid ! {pc_edit_object, self()}, - mark_nonbusy(WinId), - ProcVars; - - - {gs, Id, click, {toolbar, search_object, _Str}, _Arg} -> - mark_busy(WinId), - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - PcPid = ProcVars#process_variables.master_pid, - PcPid ! #pc_search_req{sender = self()}, - mark_nonbusy(WinId), - ProcVars; - - {gs, Id, click, {toolbar, sort_rising_order, _Str}, _Arg} -> - mark_busy(WinId), - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - NewProcVars = - case send_sort_info_signal(true, false, ProcVars) of - ignore -> - ProcVars; - TempNewProcVars -> - set_sort_col(true, TempNewProcVars) - end, - mark_nonbusy(WinId), - NewProcVars; - - {gs, Id, click, {toolbar, sort_falling_order, _Str}, _Arg} -> - mark_busy(WinId), - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - NewProcVars = - case send_sort_info_signal(true, true, ProcVars) of - ignore -> - ProcVars; - TempNewProcVars -> - set_sort_col(true, TempNewProcVars) - end, - mark_nonbusy(WinId), - NewProcVars; - - {gs, Id, click, {toolbar, no_sorting, _Str}, _Arg} -> - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - NewProcVars = - case send_sort_info_signal(false, false, ProcVars) of - ignore -> - ProcVars; - TempNewProcVars -> - set_sort_col(false, TempNewProcVars) - end, - NewProcVars; - - {gs, Id, click, {toolbar, table_info, _Str}, _Arg} -> - gs:config(F, [{y, -30}]), - gs:config(Id, [{motion, false}]), - PcPid = ProcVars#process_variables.master_pid, - PcPid ! #pc_show_table_info{sender = self()}, - ProcVars; - - {'EXIT', Pid, Reason} -> - exit_signals({Pid, Reason}, ProcVars), - handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, ProcVars); - - OtherMsg -> - NewProcVars = tv_messages(OtherMsg, ProcVars), - handle_toolbar_buttons(Id, Btn, Str, LabelShown, X, Y, NewProcVars) - - after 600 -> - case LabelShown of - false -> - FrameP = ProcVars#process_variables.frame_params, - L = ToolP#toolbar_params.pop_up_label_id, - - #frame_params{toolbar_frame_width = TWidth, - toolbar_frame_height = THeight} = FrameP, - - BtnHeight = gs:read(Id, height), - BtnXpos = gs:read(Id, x), - BtnYpos = gs:read(Id, y), - FrameHeight = gs:read(F, height), - FontUsed = gs:read(L, font), - {StringWidth, _H} = gs:read(L, {font_wh, {FontUsed, Str}}), - - Width = StringWidth + 6, - Xpos = BtnXpos + X, - LblXpos = if - Xpos + Width > TWidth -> - Xpos - Width; - true -> - Xpos - end, - % Ypos = BtnYpos + Y + 15, - Ypos = BtnYpos + BtnHeight + 6, - LblYpos = if - Ypos + FrameHeight > THeight -> - Ypos - FrameHeight - 25; - true -> - Ypos - end, - gs:config(L, [{width, Width - 2}, - {label, {text, Str}}]), - gs:config(F, [{width, Width}, - {x, LblXpos}, - {y, LblYpos} - ]); - true -> - done - end, - handle_toolbar_buttons(Id, Btn, Str, true, X, Y, ProcVars) - end. - - - - - - -set_sort_col(SortingOn, ProcVars) -> - #process_variables{pb_pid = PbPid, - mark_params = MarkP} = ProcVars, - - SortCol = case SortingOn of - true -> - MarkP#mark_params.col_no; - false -> - undefined - end, - PbPid ! #pb_set_sort_col{sender = self(), - virtual_col = SortCol - }, - remove_all_marks(SortCol, ProcVars). - - - - - -send_sort_info_signal(Sorting, Reverse, ProcVars) -> - #process_variables{master_pid = PcPid, - mark_params = MarkP} = ProcVars, - - SortColNo = MarkP#mark_params.col_no, - - PcPid ! #pc_set_sorting_mode{sender = self(), - sorting = Sorting, - reverse = Reverse, - sort_key_no = SortColNo - }, - receive - #pc_set_sorting_mode_cfm{sort_key_no = FinalSortColNo} -> - NewMarkP = MarkP#mark_params{col_no = FinalSortColNo}, - ProcVars#process_variables{mark_params = NewMarkP}; - - #pd_ignore{} -> - ignore - - end. - - - - - -show_data(Msg, ProcVars) -> - #pc_data{scale_pos = Pos, - scale_range = Range, - list_range = MaxValue, - elementlist = List, - list_of_keys = KeyList, - max_elem_size = MaxElemSize, - marked_row = MarkedRowData} = Msg, - - ?DISP_FUNC_FILE:display_data(Pos, Range, MaxValue, List, KeyList, MaxElemSize, - MarkedRowData, ProcVars). - - - - - - -handle_list_info(Msg, ProcVars) -> - ListAsStr = Msg#pc_list_info.lists_as_strings, - PgPid = ProcVars#process_variables.pg_pid, - PgPid ! #pg_list_info{sender = self(), - lists_as_strings = ListAsStr}, - ProcVars#process_variables{lists_as_strings = ListAsStr}. - - - - - -handle_col_marked(Msg, ProcVars) -> - #pb_col_marked{col_marked = ColMarked, - virtual_col = VirtualCol} = Msg, - - #process_variables{master_pid = MasterPid, - pg_pid = PgPid, - rec_pid = RecPid, - writable = Writable, - toolbar_params = ToolP, - mark_params = MarkP} = ProcVars, - SortCol = MarkP#mark_params.sort_col_no, - - PgPid ! #pg_remove_marks{sender = self()}, - - case ColMarked of - true -> - PgPid ! #pg_col_marked{sender = self(), - virtual_col = VirtualCol}; - false -> - done - end, - - MasterPid ! #pc_marked_row{sender = self(), - row_no = undefined, - object = undefined, - color = undefined - }, - - ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable), - send_to_rec_edit(RecPid, insert_mode), - - NewMarkP = - if - ColMarked -> - MarkP#mark_params{col_no = VirtualCol}; - true -> - if - SortCol =:= undefined -> - MarkP; - true -> - MarkP#mark_params{col_no = SortCol} - end - end, - ProcVars#process_variables{mark_params = NewMarkP}. - - - - - - -remove_all_marks(SortCol, ProcVars) -> - #process_variables{master_pid = MasterPid, - pb_pid = PbPid, - pg_pid = PgPid, - toolbar_params = ToolP} = ProcVars, - - PgPid ! #pg_remove_marks{sender = self()}, - PbPid ! #pb_remove_marks{sender = self()}, - MasterPid ! #pc_marked_row{sender = self(), - row_no = undefined, - object = undefined, - color = undefined - }, -%% ?DISP_FUNC_FILE:update_toolbar_label(notext, ToolP, undefined, undefined, Writable), - ?DISP_FUNC_FILE:update_toolbar_editor(ToolP#toolbar_params.editor_id, notext), -%% send_to_rec_edit(RecPid, insert_mode), - ProcVars#process_variables{mark_params = #mark_params{sort_col_no = SortCol, - cell_col_no = undefined, - row_no = undefined, - virtual_row_no = undefined, - marked_object = undefined, - marked_color = undefined} - }. - - - - - - -handle_row_marked(Msg, ProcVars) -> - #pb_row_marked{row_marked = RowMarked, - virtual_row = VirtualRow, - real_row = RealRow} = Msg, - - #process_variables{master_pid = MasterPid, - rec_pid = RecPid, - pg_pid = PgPid, - data_list = DataList, - color_list = ColorList, - writable = Writable, - toolbar_params = ToolP, - mark_params = MarkP} = ProcVars, - - PgPid ! #pg_remove_marks{sender = self()}, - - case RowMarked of - true -> - PgPid ! #pg_row_marked{sender = self(), - virtual_row = VirtualRow}; - false -> - done - end, - - {DataElement, NewMarkP} = - if - RowMarked -> - {MarkedRowOrCol, RowObj} = - ?DISP_FUNC_FILE:get_data_element(row, DataList, RealRow, undefined), - - MarkedRowColor = - case MarkedRowOrCol of - notext -> - undefined; - _OtherObject -> - lists:nth(RealRow, ColorList) - end, - MasterPid ! #pc_marked_row{sender = self(), - row_no = VirtualRow, - object = RowObj, - color = MarkedRowColor - }, - send_to_rec_edit(RecPid, {update_mode,RowObj}), - {MarkedRowOrCol, MarkP#mark_params{virtual_row_no = VirtualRow, - row_no = RealRow, - cell_col_no = undefined, - col_no = undefined, - marked_object = RowObj, - marked_color = MarkedRowColor}}; - true -> - MasterPid ! #pc_marked_row{sender = self(), - row_no = undefined, - object = undefined, - color = undefined - }, - send_to_rec_edit(RecPid, insert_mode), - {notext, MarkP#mark_params{virtual_row_no = undefined, - row_no = undefined, - cell_col_no = undefined, - col_no = undefined, - marked_object = undefined, - marked_color = undefined}} - end, - - ?DISP_FUNC_FILE:update_toolbar_label(DataElement, ToolP, VirtualRow, - undefined, Writable), - ProcVars#process_variables{mark_params = NewMarkP}. - - - - - -handle_cell_marked(Msg, ProcVars) -> - #pg_cell_marked{cell_marked = CellMarked, - virtual_col = VirtualCol, - real_row = RealRow, - virtual_row = VirtualRow} = Msg, - - % We are interested in the real row number, since we only have a sublist - % stored in pd. - ?DISP_FUNC_FILE:marked_cell(CellMarked, VirtualCol, RealRow, VirtualRow, - ProcVars). - - - - -resize_window(Msg, ProcVars) -> - #pd_win_conf{width = NewWindowWidth, - height = NewWindowHeight} = Msg, - - ?DISP_FUNC_FILE:resize_display(NewWindowWidth, NewWindowHeight, ProcVars). - - - - -resize_column(Msg, ProcVars) -> - #pb_new_colwidth{real_col = RealCol, - virtual_col = VirtualCol, - xdiff = Xdiff} = Msg, - - ?DISP_FUNC_FILE:resize_column(RealCol, VirtualCol, Xdiff, ProcVars). - - - - -mark_busy(Id) -> - gs:config(Id, [{cursor, busy}]). - - - - -mark_nonbusy(Id) -> - gs:config(Id, [{cursor, arrow}]). - - - - -send_to_rec_edit(undefined, _Msg) -> - done; -send_to_rec_edit(RecPid, Msg) -> - RecPid ! Msg. - diff --git a/lib/tv/src/tv_pd_display.erl b/lib/tv/src/tv_pd_display.erl deleted file mode 100644 index 804180da16..0000000000 --- a/lib/tv/src/tv_pd_display.erl +++ /dev/null @@ -1,1066 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Part of pd controlling the graphics. -%%% -%%%********************************************************************* - --module(tv_pd_display). --compile([{nowarn_deprecated_function,{gs,button,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,editor,2}}, - {nowarn_deprecated_function,{gs,entry,3}}, - {nowarn_deprecated_function,{gs,frame,2}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,read,2}}]). - - - - --export([init_display/4, - display_data/8, - resize_display/3, - resize_column/4, - scroll_horizontally/2, - scroll_vertically/2, - perform_horizontal_scroll/2, - perform_vertical_scroll/2, - marked_cell/5, - update_toolbar_label/5, - update_toolbar_editor/2, - get_data_element/4, - hide_toolbar_editor/1, - show_toolbar_editor/1]). - - - - - --include("tv_int_def.hrl"). --include("tv_int_msg.hrl"). --include("tv_pd_int_def.hrl"). --include("tv_pd_int_msg.hrl"). - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - -%%====================================================================== -%% Function: init_display. -%% -%% Return Value: Id of the display (here:canvas) created. -%% -%% Description: Creates the canvas and the scale. -%% -%% Parameters: Id of the window the display shall be created in. -%%====================================================================== - - -init_display(WindowId, WindowWidth, WindowHeight, ProcVars) -> - % Get all necessary window parameters! - #process_variables{pg_pid = PgPid, - pb_pid = PbPid, - frame_params = FrameP, - scale_params = ScaleP, - toolbar_params = ToolP} = ProcVars, - - NewFrameP = tv_pd_frames:create_display_frames(WindowId, WindowWidth, - WindowHeight, FrameP), - - #frame_params{grid_frame_id = GridParentId, - grid_frame_width = GridParentWidth, - grid_frame_height = GridParentHeight} = NewFrameP, - - PgPid ! #pg_init_grid{sender = self(), - parent_id = GridParentId, - width = GridParentWidth, - height = GridParentHeight, - xpos = ?VBTN_WIDTH - 1, - ypos = ?KEY_MARK_AREA_HEIGHT + ?HBTN_HEIGHT - 1, - nof_rows = ?NOF_GRIDROWS, - row_height = ?ROW_HEIGHT - }, - - - receive - #pg_col_info{first_col_shown = FirstColShown, - width_of_cols_shown = ColsShown, - nof_rows_shown = NofRowsShown} -> - - PbPid ! #pb_init_btns{sender = self(), - parent_id = GridParentId, - parent_width = GridParentWidth, - parent_height = GridParentHeight, - ypos = ?KEY_MARK_AREA_HEIGHT, - hbtn_height = ?HBTN_HEIGHT, - resbtn_width = ?RESBTN_WIDTH, - vbtn_width = ?VBTN_WIDTH, - nof_rows = ?NOF_GRIDROWS, - row_height = ?ROW_HEIGHT, - first_col_shown = FirstColShown, - cols_shown = ColsShown - }, - - NewScaleP = tv_pd_scale:init_scale(NewFrameP, ScaleP), - - NewToolP = init_toolbar(NewFrameP, ToolP), - - ProcVars#process_variables{window_id = WindowId, - window_width = WindowWidth, - window_height = WindowHeight, - first_col_shown = FirstColShown, - nof_rows_shown = NofRowsShown, - cols_shown = ColsShown, - frame_params = NewFrameP, - scale_params = NewScaleP, - toolbar_params = NewToolP - } - end. - - - - - -resize_display(NewWinW, NewWinH, ProcVars) -> - #process_variables{pg_pid = PgPid, - pb_pid = PbPid, - color_list = ColorList, - first_row_shown = FirstRowShown, - frame_params = FrameP, - scale_params = ScaleP, - toolbar_params = ToolP} = ProcVars, - - NewFrameP = tv_pd_frames:resize_display_frames(NewWinW, NewWinH, FrameP), - - #frame_params{grid_frame_width = GridParentWidth, - grid_frame_height = GridParentHeight} = NewFrameP, - - PgPid ! #pg_resize_grid{sender = self(), - width = GridParentWidth, - height = GridParentHeight - }, - - receive - #pg_col_info{first_col_shown = FirstColShown, - width_of_cols_shown = ColsShown, - nof_rows_shown = NofRowsShown} -> - - PbPid ! #pb_update_hbtns{sender = self(), - parent_width = GridParentWidth, - parent_height = GridParentHeight, - first_col_shown = FirstColShown, - cols_shown = ColsShown - }, - - PbPid ! #pb_update_vbtns{sender = self(), - color_list = ColorList, - first_row_shown = FirstRowShown, - nof_rows_shown = NofRowsShown, - blinking_enabled = false - }, - - NewScaleP = tv_pd_scale:resize_scale(NewFrameP, ScaleP), - - NewToolP = resize_toolbar(NewFrameP, ToolP), - - ProcVars#process_variables{window_width = NewWinW, - window_height = NewWinH, - first_col_shown = FirstColShown, - nof_rows_shown = NofRowsShown, - cols_shown = ColsShown, - frame_params = NewFrameP, - scale_params = NewScaleP, - toolbar_params = NewToolP - } - end. - - - - - - - -resize_column(RealCol, VirtualCol, Xdiff, ProcVars) -> - #process_variables{pg_pid = PgPid, - pb_pid = PbPid, - frame_params = FrameP} = ProcVars, - - PgPid ! #pg_resize_grid_col{sender = self(), - real_col_no = RealCol, - virtual_col_no = VirtualCol, - xdiff = Xdiff - }, - - #frame_params{grid_frame_width = GridFrameWidth, - grid_frame_height = GridFrameHeight} = FrameP, - receive - #pg_col_info{first_col_shown = FirstColShown, - width_of_cols_shown = ColsShown, - nof_rows_shown = NofRowsShown} -> - - PbPid ! #pb_update_hbtns{parent_width = GridFrameWidth, - parent_height = GridFrameHeight, - first_col_shown = FirstColShown, - cols_shown = ColsShown - }, - - ProcVars#process_variables{first_col_shown = FirstColShown, - nof_rows_shown = NofRowsShown, - cols_shown = ColsShown - } - end. - - - - - - - - -display_data(Pos, Range, _MaxValue, List, KeyList, MaxElemSize, MarkedRowData,ProcVars) -> - #process_variables{master_pid = PcPid, - rec_pid = RecPid, - pg_pid = PgPid, - pb_pid = PbPid, - writable = Writable, - sorting_on = SortingOn, - nof_rows_shown = NofRowsShown, - scale_params = ScaleP, - toolbar_params = ToolP, - mark_params = MarkP} = ProcVars, - - {DataList, ColorList} = split_dblist(List, [], []), - - NewMarkP = update_marks(SortingOn, DataList, ColorList, MarkedRowData, Pos, NofRowsShown, - Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP), - - PgPid ! #pg_data{sender = self(), - data = DataList, - first_row_shown = Pos - }, - - PbPid ! #pb_update_vbtns{sender = self(), - color_list = ColorList, - first_row_shown = Pos, - nof_rows_shown = NofRowsShown, - blinking_enabled = false - }, - - PbPid ! #pb_key_info{sender = self(), - list_of_keys = KeyList - }, - - % May be new number of elements in the total list! - ?SCALE_FUNC_FILE:set_scale_range(vscale, Range, ScaleP), - % May be new vertical scale position required! - NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(vscale, Pos, ScaleP), - % May be new maximum size of elements! - ?SCALE_FUNC_FILE:set_scale_range(hscale, {1, MaxElemSize}, NewScaleP), - - ProcVars#process_variables{data_list = DataList, - color_list = ColorList, - first_row_shown = Pos, - initialising = false, - scale_params = NewScaleP, - mark_params = NewMarkP - }. - - - - - - - -scroll_vertically(MouseBtn, ProcVars) -> - #process_variables{scale_params = ScaleP} = ProcVars, - - OldScalePos = ScaleP#scale_params.vscale_pos, - NewScalePos = get_new_scalepos(MouseBtn, OldScalePos), - - case NewScalePos of - OldScalePos -> - ProcVars; - NewValue -> - perform_vertical_scroll(NewValue, ProcVars) - end. - - - - - - - -scroll_horizontally(MouseBtn, ProcVars) -> - #process_variables{scale_params = ScaleP} = ProcVars, - - OldScalePos = ScaleP#scale_params.hscale_pos, - NewScalePos = get_new_scalepos(MouseBtn, OldScalePos), - - case NewScalePos of - OldScalePos -> - ProcVars; - NewValue -> - perform_horizontal_scroll(NewValue, ProcVars) - end. - - - - - - - - -perform_vertical_scroll(NewScalePos, ProcVars) -> - #process_variables{master_pid = MasterPid, - initialising = Init, - scale_params = ScaleP} = ProcVars, - - %% To avoid erroneous scrollbar signals during creation of the display. - case Init of - true -> - done; - false -> - MasterPid ! #pc_data_req{sender = self(), - element = NewScalePos, - nof_elements = ?NOF_GRIDROWS} - end, - - % Since the order of click/buttonrelease messages isn't - % precise, set the scale to the returned pos (may otherwise - % differ one unit). - NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(vscale, - NewScalePos, - ScaleP), - - ProcVars#process_variables{scale_params = NewScaleP}. - - - - - - - -perform_horizontal_scroll(NewScalePos, ProcVars) -> - #process_variables{pg_pid = PgPid, - pb_pid = PbPid, - frame_params = FrameP, - scale_params = ScaleP} = ProcVars, - - % Since the order of click/buttonrelease messages isn't - % precise, set the scale to the returned pos (may otherwise - % differ one unit). - NewScaleP = ?SCALE_FUNC_FILE:set_scale_pos(hscale, - NewScalePos, - ScaleP), - - PgPid ! #pg_horizontal_scroll{sender = self(), - leftmost_virtual_col = NewScalePos - }, - - #frame_params{grid_frame_width = GridFrameWidth, - grid_frame_height = GridFrameHeight} = FrameP, - receive - #pg_col_info{first_col_shown = FirstColShown, - width_of_cols_shown = ColsShown, - nof_rows_shown = NofRowsShown} -> - - PbPid ! #pb_update_hbtns{parent_width = GridFrameWidth, - parent_height = GridFrameHeight, - first_col_shown = FirstColShown, - cols_shown = ColsShown - }, - - ProcVars#process_variables{first_col_shown = FirstColShown, - cols_shown = ColsShown, - nof_rows_shown = NofRowsShown, - scale_params = NewScaleP - } - end. - - - - - - - - -marked_cell(true, VirtualCol, RealRow, VirtualRow, ProcVars) -> - #process_variables{master_pid = MasterPid, - rec_pid = RecPid, - data_list = DataList, - color_list = ColorList, - writable = Writable, - mark_params = MarkP, - toolbar_params = ToolP} = ProcVars, - - {DataElement, MarkedRowObject} = get_data_element(cell, DataList, RealRow, VirtualCol), - update_toolbar_label(DataElement, ToolP, VirtualRow, VirtualCol, Writable), - send_to_rec_edit(RecPid, {update_mode,MarkedRowObject}), - - MarkedRowColor = lists:nth(RealRow, ColorList), - - MasterPid ! #pc_marked_row{sender = self(), - row_no = VirtualRow, - object = MarkedRowObject, - color = MarkedRowColor - }, - NewMarkP = MarkP#mark_params{cell_col_no = VirtualCol, - row_no = RealRow, - virtual_row_no = VirtualRow, - marked_object = MarkedRowObject, - marked_color = MarkedRowColor - }, - ProcVars#process_variables{mark_params = NewMarkP - }; -marked_cell(false, VirtualCol, _RealRow, VirtualRow, ProcVars) -> - #process_variables{master_pid = MasterPid, - rec_pid = RecPid, - pb_pid = PbPid, - writable = Writable, - mark_params = MarkP} = ProcVars, - - PbPid ! #pb_remove_marks{sender = self()}, - - case VirtualRow of - undefined -> - done; - _AnyRow -> - update_toolbar_label(notext, ProcVars#process_variables.toolbar_params, - VirtualRow, VirtualCol, Writable), - send_to_rec_edit(RecPid, insert_mode) - end, - MasterPid ! #pc_marked_row{sender = self(), - %% row_no = VirtualRow - row_no = undefined, - object = undefined, - color = undefined - }, - NewMarkP = MarkP#mark_params{cell_col_no = undefined, - row_no = undefined, - virtual_row_no = undefined, - marked_object = undefined, - marked_color = undefined - }, - ProcVars#process_variables{mark_params = NewMarkP - }. - - - - - - - - -update_toolbar_label(notext, ToolP, _VirtualRowNo, _VirtualColNo, Writable) -> - #toolbar_params{row_col_label_id = RowColLblId, - fg_label_id = FgLblId, - editor_id = EdId} = ToolP, - gs:config(RowColLblId, [{label, {text,""}}]), - gs:config(FgLblId, [{enable,true}]), - gs:config(FgLblId, [{delete, {0,1000000000}}]), - gs:config(FgLblId, [{insert, {0, ""}}]), - case Writable of - true -> - gs:config(FgLblId, [{cursor, text}, - {setfocus, true}]); - false -> - gs:config(FgLblId, [{enable, false}, - {cursor, arrow}, - {setfocus, false}]) - end, - update_toolbar_editor(EdId, notext); -update_toolbar_label({DataToShow}, ToolP, VirtualRowNo, VirtualColNo, Writable) -> - #toolbar_params{row_col_label_id = RowColLblId, - fg_label_id = FgLblId, - editor_id = EdId} = ToolP, - - case VirtualRowNo of - undefined -> - %% No row - nothing can possibly be marked! - case Writable of - true -> - gs:config(FgLblId, [{setfocus,true}, - {cursor, text}]); - false -> - gs:config(FgLblId, [{enable,false}, - {setfocus, false}, - {cursor, arrow}]) - end; - _AnyRow -> - RowStr = "R" ++ integer_to_list(VirtualRowNo), - ColStr = case VirtualColNo of - undefined -> - ""; - _AnyCol -> - " x C" ++ integer_to_list(VirtualColNo) - end, - DataStr = lists:flatten(tv_io_lib:format("~p", [DataToShow])), - gs:config(RowColLblId, [{label, {text,RowStr++ColStr}}]), - gs:config(FgLblId, [{enable,true}]), - gs:config(FgLblId, [{delete, {0,10000000}}]), - gs:config(FgLblId, [{insert, {0,DataStr}}]), - case Writable of - true -> - gs:config(FgLblId, [{setfocus,true}, - {cursor, text}]); - false -> - gs:config(FgLblId, [{enable,false}, - {setfocus, false}, - {cursor, arrow}]) - end, - update_toolbar_editor(EdId, {DataToShow}) - end. - - - - - - - - -get_data_element(row, DataList, RowNo, _VirtualCol) -> - if - length(DataList) < RowNo -> - {notext, undefined}; - true -> - RowObj = lists:nth(RowNo, DataList), - {{RowObj}, RowObj} - end; -get_data_element(cell, DataList, RowNo, ColNo) -> - %% It's the responsibility of pg to ensure that there is a data item - %% for the cell marked, meaning we don't *have* to check the length of - %% the data items. However, since we in the future may want to edit - %% even empty cells, we check it! - if - length(DataList) < RowNo -> - {notext, undefined}; - true -> - DataItem = lists:nth(RowNo, DataList), - if - is_tuple(DataItem) -> - if size(DataItem) < ColNo -> - {notext, DataItem}; - true -> - {{element(ColNo, DataItem)}, DataItem} - end; - true -> - {{DataItem}, DataItem} - end - end. - - - - - - - - -show_toolbar_editor(ProcVars) -> - #process_variables{frame_params = FrameP, - toolbar_params = ToolP} = ProcVars, - - #frame_params{toolbar_frame_height = THeight} = FrameP, - - #toolbar_params{editor_frame_id = EdFrameId} = ToolP, - - Xpos = 0, - Ypos = THeight - 8 - ?ROW_COL_LBL_HEIGHT + 1, - gs:config(EdFrameId, [{x, Xpos}, - {y, Ypos} - ]), - ProcVars. - - - - - - - - -hide_toolbar_editor(ProcVars) -> - #process_variables{toolbar_params = ToolP} = ProcVars, - - #toolbar_params{editor_frame_id = EdFrameId} = ToolP, - - Xpos = 0, - Ypos = (-1) * gs:read(EdFrameId, height) - 50, - gs:config(EdFrameId, [{x, Xpos}, - {y, Ypos} - ]), - ProcVars. - - - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - - - -update_toolbar_editor(EdId, notext) -> - gs:config(EdId, [{enable, true}]), - gs:config(EdId, [clear]), - gs:config(EdId, [{enable, false}]); -update_toolbar_editor(EdId, {DataToShow}) -> - Str = io_lib:format("~n~p~n", [DataToShow]), - gs:config(EdId, [{enable, true}]), - gs:config(EdId, [clear]), - gs:config(EdId, [{overwrite, {insert, Str}}]), - gs:config(EdId, [{enable, false}]). - - - - - - -update_marks(true, _DataList, _ColorList, _MarkedRowData, - _Pos, _NofRowsShown, _Writable, _Range, PcPid, PgPid, RecPid, ToolP, MarkP) -> - PgPid ! #pg_remove_marks{sender = self()}, - %% Too much trouble trying to find the marked object again! - %% On the other hand, is the mark based on the row number - %% or the row content? Probably different strategies now, depending - %% on where in the code we are... :-( - %% update_toolbar_label(notext, ToolP, undefined, undefined, Writable), - update_toolbar_editor(ToolP#toolbar_params.editor_id, notext), - send_to_rec_edit(RecPid, insert_mode), - PcPid ! #pc_marked_row{sender = self(), - row_no = undefined, - object = undefined, - color = undefined - }, - MarkP#mark_params{cell_col_no = undefined, - row_no = undefined, - virtual_row_no = undefined, - marked_object = undefined, - marked_color = undefined - }; -update_marks(false, DataList, ColorList, MarkedRowData, - Pos, NofRowsShown, Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP) -> - #mark_params{cell_col_no = CellColNo, - virtual_row_no = VirtualRowNo} = MarkP, - - % Marked row data contains the color also! - {RowData, RowColors} = split_dblist(MarkedRowData, [], []), - - case VirtualRowNo of - undefined -> - MarkP; - _AnyRow -> - if - VirtualRowNo > element(2, Range) -> - %% Mark outside the existing list! Uh-uh, remove the mark immediately! 8-0 - update_marks(true, DataList, ColorList, MarkedRowData, Pos, NofRowsShown, - Writable, Range, PcPid, PgPid, RecPid, ToolP, MarkP); - true -> - {DataElement, RowObj} = choose_data_to_show(VirtualRowNo, CellColNo, RowData, - DataList, Pos), - {_, RowObjColor} = choose_data_to_show(VirtualRowNo, CellColNo, RowColors, - ColorList, Pos), - case DataElement of - notext -> - %% send_to_rec_edit(RecPid, insert_mode); - done; - _OtherElement -> - %% send_to_rec_edit(RecPid, {update_mode, RowObj}) - send_to_rec_edit(RecPid, {reset_info, RowObj}) - end, - - %% case RowObj of - %% OldMarkedObj -> - %% done; - %% _NewObj -> - %% update_toolbar_label(DataElement, ToolP, VirtualRowNo, - %% CellColNo, Writable) - %% end, - - %% update_toolbar_label(DataElement,ToolP,VirtualRowNo,CellColNo,Writable), - - update_toolbar_editor(ToolP#toolbar_params.editor_id, DataElement), - MarkP#mark_params{marked_object = RowObj, - marked_color = RowObjColor} - end - end. - - - - - -choose_data_to_show(VirtualRowNo, undefined, _RowData, DataList, Pos) when VirtualRowNo >= Pos, VirtualRowNo =< (Pos + length(DataList) - 1) -> - get_data_element(row, DataList, VirtualRowNo - Pos + 1, undefined); -choose_data_to_show(_VirtualRowNo, undefined, RowData, _DataList, _Pos) -> - get_data_element(row, RowData, 1, undefined); -choose_data_to_show(VirtualRowNo, CellColNo, _RowData, DataList, Pos) - when VirtualRowNo >= Pos, VirtualRowNo =< (Pos + length(DataList) - 1) -> - get_data_element(cell, DataList, VirtualRowNo - Pos + 1, CellColNo); -choose_data_to_show(_VirtualRowNo, CellColNo, RowData, _DataList, _Pos) -> - get_data_element(cell, RowData, 1, CellColNo). - - - - - - -get_new_scalepos(Btn, LastScalePos) -> - receive - {gs, _Id, click, _Data, [NewScalePos | _T]} -> - get_new_scalepos(Btn, NewScalePos); - - {gs, _Id, buttonrelease, _Data, [Btn | _T]} -> - LastScalePos; - - {gs, _Id, buttonrelease, _Data, _Args} -> - get_new_scalepos(Btn, LastScalePos); - - {gs, _Id, buttonpress, _Data, _Args} -> - get_new_scalepos(Btn, LastScalePos) - - end. - - - - - - - -split_dblist([], DataAcc, ColorAcc) -> - {lists:reverse(DataAcc), lists:reverse(ColorAcc)}; -split_dblist([{Data, Color} | Tail], DataAcc, ColorAcc) -> - split_dblist(Tail, [Data | DataAcc], [Color | ColorAcc]). - - - - - - - - -init_toolbar(FrameP, ToolP) -> - #frame_params{display_id = DispId, - toolbar_frame_id = TId, - toolbar_frame_width = TWidth, - toolbar_frame_height = THeight, - grid_frame_width = GWidth} = FrameP, - - NewToolP = init_toolbar_btns(TId, ToolP), - {RowColLblId, BgLabelId, FgLabelId, BtnId} = - init_toolbar_label(TId, TWidth, THeight, GWidth), - - PopUpFrame = gs:frame(TId, [{width, 80}, - {height, 20}, - {x, 0}, - {y, -30}, - {bg, {0, 0, 0}} - ]), - - PopUpLabel = gs:label(PopUpFrame, [{width, 78}, - {height, 18}, - {bg, {255,255,190}}, - {x,1}, - {y,1}, - {align, center}, - {label, {text,""}}, - {font,{screen,12}}]), - - {EditorFrameId, EditorId} = init_toolbar_editor(DispId, TWidth, THeight), - - NewToolP#toolbar_params{parent_id = TId, - row_col_label_id = RowColLblId, - bg_label_id = BgLabelId, - fg_label_id = FgLabelId, - label_btn_id = BtnId, - pop_up_frame_id = PopUpFrame, - pop_up_label_id = PopUpLabel, - editor_frame_id = EditorFrameId, - editor_id = EditorId - }. - - - - - - -init_toolbar_btns(TId, ToolP) -> - PicDir = code:priv_dir(tv), -% PicDir = "../priv", - % Toolbar btns are 25x25, the bitmaps are 20x20. - create_one_toolbar_btn(TId, 1, PicDir ++ "/edit1.xbm", - {toolbar, insert_object, "Edit Object"}), - create_one_toolbar_btn(TId, 3, PicDir ++ "/search.xbm", - {toolbar, search_object, "Search Object"}), - create_one_toolbar_btn(TId, 5, PicDir ++ "/sort.xbm", - {toolbar, sort_rising_order, "Sort Ascending"}), - create_one_toolbar_btn(TId, 6, PicDir ++ "/no_sort.xbm", - {toolbar, no_sorting,"No Sorting"}), - create_one_toolbar_btn(TId, 7, PicDir ++ "/sort_reverse.xbm", - {toolbar, sort_falling_order,"Sort Descending"}), - create_one_toolbar_btn(TId, 9, PicDir ++ "/poll.xbm", - {toolbar, poll_table,"Poll Table"}), - create_one_toolbar_btn(TId, 11, PicDir ++ "/info.xbm", - {toolbar, table_info,"Table Info"}), - create_one_toolbar_btn(TId, 13, PicDir ++ "/help.xbm", - {toolbar, help_button, "Help"}), - ToolP. - - - - - - - - -create_one_toolbar_btn(ParentId, N, Image, Data) -> - BtnWidth = 25, - BtnHeight = 25, - StartXpos = 0, - BtnXpos = StartXpos + ((N - 1) * BtnWidth), - BtnYpos = 2, - BgColor = ?DEFAULT_BG_COLOR, - FgColor = {178,34,34}, % Firebrick - - gs:button(ParentId, [{width, BtnWidth}, - {height, BtnHeight}, - {x, BtnXpos}, - {y, BtnYpos}, - {enter, true}, - {leave, true}, - {label, {image, Image}}, - {data, Data}, - {fg, FgColor}, - {bg, BgColor} - ]). - - - - - -resize_toolbar(FrameP, ToolP) -> - #frame_params{toolbar_frame_width = TWidth, - toolbar_frame_height = THeight, - grid_frame_width = GWidth} = FrameP, - - #toolbar_params{bg_label_id = BgId, - fg_label_id = FgId, - row_col_label_id = RowColId, - label_btn_id = BtnId, - editor_frame_id = FrId, - editor_id = EdId} = ToolP, - - resize_toolbar_label(BgId, FgId, RowColId, BtnId, TWidth, THeight, GWidth), - resize_toolbar_editor(FrId, EdId, TWidth, THeight), - ToolP. - - - - - - - - -init_toolbar_label(ParentId, ParentWidth, ParentHeight, GWidth) -> - {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos, BtnWidth, - BtnHeight, BtnXpos, BtnYpos} = - get_toolbar_label_coords(ParentWidth, ParentHeight), - - BgId = gs:label(ParentId, [{width, BgWidth}, - {height, BgHeight}, - {x, BgXpos}, - {y, BgYpos}, - {bg, {0, 0, 0}}, - {fg, {0, 0, 0}} - ]), - - - RowColLblHeight = ?ROW_COL_LBL_HEIGHT, - RowColLblWidth = GWidth - ?VBTN_WIDTH, - RowColLblYpos = BgYpos + RowColLblHeight + 18, - - RowColLblId = gs:label(ParentId, [{width, RowColLblWidth}, - {height, RowColLblHeight}, - {x, ?VBTN_WIDTH}, - {y, RowColLblYpos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {178,34,34}}, - {align,center}, - {font,{screen,12}}, - {label, {text,""}} - ]), - - FgId = gs:entry(editentry, ParentId, [{width, FgWidth}, - {height, FgHeight}, - {x, FgXpos}, - {y, FgYpos}, - {bg, {255,255,255}}, - {fg, {0,0,0}}, - {bw, 1}, - {font,{screen,12}}, - {justify, left}, - {cursor, arrow}, - {setfocus, false}, - {enable, false}, - {keypress,true} - ]), - - PicDir = code:priv_dir(tv), - BtnId = gs:button(ParentId, [{width, BtnWidth}, - {height, BtnHeight}, - {x, BtnXpos}, - {y, BtnYpos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {label, {image, PicDir ++ "/more.xbm"}}, - {data, {labelbtn, pop_up}} - ]), - - {RowColLblId, BgId, FgId, BtnId}. - - - - - - - -init_toolbar_editor(DispId, TWidth, THeight) -> - {BgWidth, BgHeight, BgXpos, BgYpos, Width, Height, Xpos, Ypos} = - get_toolbar_editor_coords(TWidth, THeight), - - EditorFrame = gs:frame(DispId, [{width, BgWidth}, - {height, BgHeight}, - {x, BgXpos}, - {y, BgYpos}, - {bg, {0, 0, 0}} - ]), - - Editor = gs:editor(EditorFrame, [{width, Width}, - {height, Height}, - {x, Xpos}, - {y, Ypos}, - {vscroll, right}, - {wrap, word}, - {bg, {255, 255, 255}}, - {fg, {0, 0, 0}}, - {enable, false} - ]), - - {EditorFrame, Editor}. - - - - - - - -get_toolbar_editor_coords(TWidth, _THeight) -> - BgWidth = TWidth, - BgHeight = 200, - BgXpos = 0, - BgYpos = (-1) * BgHeight - 50, - FgWidth = BgWidth - 2, - FgHeight = BgHeight - 2, - FgXpos = 1, - FgYpos = 1, - - {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos}. - - - - - - -resize_toolbar_editor(FrId, EdId, TWidth, THeight) -> - {BgWidth, BgHeight, _BgXpos, _BgYpos, FgWidth, FgHeight, _FgXpos, _FgYpos} = - get_toolbar_editor_coords(TWidth, THeight), - gs:config(FrId, [{width, BgWidth}, - {height, BgHeight} - ]), - - gs:config(EdId, [{width, FgWidth}, - {height, FgHeight} - ]). - - - - - - -resize_toolbar_label(BgId, FgId, RowColId, BtnId, ParentWidth, ParentHeight, GWidth) -> - {BgWidth, BgHeight, _BgXpos, _BgYpos, FgWidth, FgHeight, _FgXpos, _FgYpos, _BtnWidth, - _BtnHeight, BtnXpos, BtnYpos} = - get_toolbar_label_coords(ParentWidth, ParentHeight), - - gs:config(RowColId, [{width, GWidth - ?VBTN_WIDTH}]), - - gs:config(BgId, [{width, BgWidth}, - {height, BgHeight} - ]), - - gs:config(BtnId, [{x, BtnXpos}, - {y, BtnYpos} - ]), - - gs:config(FgId, [{width, FgWidth}, - {height, FgHeight} - ]). - - - - - -get_toolbar_label_coords(ParentWidth, ParentHeight) -> - BtnWidth = 19, - BgWidth = ParentWidth, - BgHeight = 26, - BgXpos = 0, - BgYpos = ParentHeight - BgHeight - 8 - ?ROW_COL_LBL_HEIGHT + 2, - FgHeight = BgHeight - 2, - FgWidth = BgWidth - BtnWidth - 3, - FgXpos = BgXpos + 1, - FgYpos = BgYpos + 1, - BtnHeight = BgHeight - 2, - BtnXpos = FgWidth + 2, - BtnYpos = BgYpos + 1, - - {BgWidth, BgHeight, BgXpos, BgYpos, FgWidth, FgHeight, FgXpos, FgYpos, BtnWidth, - BtnHeight, BtnXpos, BtnYpos}. - - - - - - -send_to_rec_edit(undefined, _Msg) -> - done; -send_to_rec_edit(RecPid, Msg) -> - RecPid ! Msg. - - - - diff --git a/lib/tv/src/tv_pd_frames.erl b/lib/tv/src/tv_pd_frames.erl deleted file mode 100644 index aab40e2bba..0000000000 --- a/lib/tv/src/tv_pd_frames.erl +++ /dev/null @@ -1,482 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_pd_frames). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,frame,2}}]). - - - --export([create_display_frames/4, resize_display_frames/3]). - - - - --include("tv_int_def.hrl"). --include("tv_pd_int_def.hrl"). - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_display_frames(WindowId, WindowWidth, WindowHeight, FrameP) -> - {DisplayId, DisplayWidth, DisplayHeight} = - create_frame(WindowId, - get_display_coords(WindowWidth, WindowHeight), - ?DEFAULT_BG_COLOR, - 0), - - {ToolbarId, ToolbarWidth, ToolbarHeight} = create_toolbar_frame(DisplayId, - DisplayWidth), - - {SheetFrameId, SheetBgFrameId, SheetFrameWidth, SheetFrameHeight} = - create_sheet_frames(DisplayId, - DisplayWidth, - DisplayHeight), - - {GridFrameId, GridBgFrameId, GridFrameWidth, GridFrameHeight} = - create_grid_frames(SheetFrameId, - SheetFrameWidth, - SheetFrameHeight), - - - FrameP#frame_params{display_id = DisplayId, - toolbar_frame_id = ToolbarId, - toolbar_frame_width = ToolbarWidth, - toolbar_frame_height = ToolbarHeight, - sheet_frame_id = SheetFrameId, - sheet_frame_width = SheetFrameWidth, - sheet_frame_height = SheetFrameHeight, - sheet_bgframe_id = SheetBgFrameId, - grid_frame_id = GridFrameId, - grid_frame_width = GridFrameWidth, - grid_frame_height = GridFrameHeight, - grid_bgframe_id = GridBgFrameId - }. - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_display_frames(NewW, NewH, FrameP) -> - #frame_params{display_id = DispId, - toolbar_frame_id = ToolbarId, - sheet_frame_id = SheetFgId, - sheet_bgframe_id = SheetBgId, - grid_frame_id = GridFgId, - grid_bgframe_id = GridBgId} = FrameP, - - {NewDispW, NewDispH} = config_frame(DispId, get_display_coords(NewW, NewH)), - {NewToolW, NewToolH} = resize_toolbar(ToolbarId, NewDispW), - {NewSheetFgW, NewSheetFgH} = resize_sheet_frames(SheetFgId, SheetBgId, NewDispW, - NewDispH), - - {NewGridFgW, NewGridFgH} = resize_grid_frames(GridFgId, GridBgId, NewSheetFgW, - NewSheetFgH), - - FrameP#frame_params{toolbar_frame_width = NewToolW, - toolbar_frame_height = NewToolH, - sheet_frame_width = NewSheetFgW, - sheet_frame_height = NewSheetFgH, - grid_frame_width = NewGridFgW, - grid_frame_height = NewGridFgH - }. - - - - - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -config_frame(Id, {Width, Height, Xpos, Ypos}) -> - gs:config(Id, [{width, Width}, - {height, Height}, - {x, Xpos}, - {y, Ypos} - ]), - {Width, Height}. - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_frame(ParentId, {Width, Height, Xpos, Ypos}, Color, BorderWidth) -> - Id = gs:frame(ParentId, [{width, Width}, - {height, Height}, - {x, Xpos}, - {y, Ypos}, - {bw, BorderWidth}, - {bg, Color} - ]), - {Id, Width, Height}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_grid_frames(SheetFrameId, SheetFrameWidth, SheetFrameHeight) -> - {BgId, _W, _H} = - create_frame(SheetFrameId, - get_grid_frame_coords(bg, SheetFrameWidth, SheetFrameHeight), - ?BLACK, - 0), - {FgId, FgWidth, FgHeight} = - create_frame(SheetFrameId, - get_grid_frame_coords(fg, SheetFrameWidth, SheetFrameHeight), - ?DEFAULT_BG_COLOR, - 0), - {FgId, BgId, FgWidth, FgHeight}. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_sheet_frames(DispId, DispWidth, DispHeight) -> - {BgId, _W, _H} = create_frame(DispId, - get_sheet_frame_coords(bg, DispWidth, DispHeight), - ?BLACK, - 0), - {FgId, FgWidth, FgHeight} = - create_frame(DispId, - get_sheet_frame_coords(fg, DispWidth, DispHeight), - ?DEFAULT_BG_COLOR, - 0), - {FgId, BgId, FgWidth, FgHeight}. - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_toolbar_frame(DispId, DispWidth) -> - create_frame(DispId, get_toolbar_coords(DispWidth), ?DEFAULT_BG_COLOR, 0). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_display_coords(WindowWidth, WindowHeight) -> - Xpos = 4, - {WindowWidth - 2 * Xpos, WindowHeight - ?MENUBAR_HEIGHT - Xpos, Xpos, ?MENUBAR_HEIGHT}. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_grid_frame_coords(bg, FrameWidth, FrameHeight) -> - get_grid_frame_coords2(FrameWidth, FrameHeight, 0); -get_grid_frame_coords(fg, FrameWidth, FrameHeight) -> - get_grid_frame_coords2(FrameWidth, FrameHeight, 1). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_grid_frame_coords2(FrameWidth, FrameHeight, BorderWidth) -> - Xpos = 0, - Ypos = 0, - Width = FrameWidth - ?VSCALE_WIDTH - Xpos - BorderWidth, - Height = FrameHeight - ?HSCALE_HEIGHT - Ypos - BorderWidth, - {Width, Height, Xpos, Ypos}. - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_sheet_frame_coords(bg, FrameWidth, FrameHeight) -> - get_sheet_frame_coords2(FrameWidth, FrameHeight, 0); -get_sheet_frame_coords(fg, FrameWidth, FrameHeight) -> - get_sheet_frame_coords2(FrameWidth, FrameHeight, 1). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_sheet_frame_coords2(FrameWidth, FrameHeight, BorderWidth) -> - Xpos = BorderWidth, - Ypos = ?TOOLBAR_HEIGHT + BorderWidth, - Width = FrameWidth - 2 * BorderWidth, - Height = FrameHeight - Ypos - ?MISC_AREA_HEIGHT - BorderWidth, - {Width, Height, Xpos, Ypos}. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_toolbar_coords(DispWidth) -> - Xpos = 0, - {DispWidth - 2 * Xpos, ?TOOLBAR_HEIGHT, Xpos, 0}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_grid_frames(FgId, BgId, ParentWidth, ParentHeight) -> - config_frame(BgId, get_grid_frame_coords(bg, ParentWidth, ParentHeight)), - config_frame(FgId, get_grid_frame_coords(fg, ParentWidth, ParentHeight)). - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_sheet_frames(FgId, BgId, ParentWidth, ParentHeight) -> - config_frame(BgId, get_sheet_frame_coords(bg, ParentWidth, ParentHeight)), - config_frame(FgId, get_sheet_frame_coords(fg, ParentWidth, ParentHeight)). - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_toolbar(Id, DispWidth) -> - config_frame(Id, get_toolbar_coords(DispWidth)). - - - diff --git a/lib/tv/src/tv_pd_int_def.hrl b/lib/tv/src/tv_pd_int_def.hrl deleted file mode 100644 index 2c76bef892..0000000000 --- a/lib/tv/src/tv_pd_int_def.hrl +++ /dev/null @@ -1,139 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Internal definitions for the pd part of the table tool. -%%% -%%%********************************************************************* - --define(SCALE_FUNC_FILE, tv_pd_scale). --define(DISP_FUNC_FILE, tv_pd_display). - - --define(SCALE_WIDTH, 75). --define(VSCALE_WIDTH, 75). --define(HSCALE_HEIGHT, 75). --define(MENUBAR_HEIGHT, 30). --define(TOOLBAR_HEIGHT, 84). %% 97 --define(DISPLAY_HEIGHT, 849). --define(MISC_AREA_HEIGHT, 0). --define(GRID_HEIGHT, 849). --define(NOF_GRIDROWS, 35). %% 29 --define(NOF_GRIDCOLS, 10). --define(DEFAULT_COLWIDTH, 100). --define(ROW_HEIGHT, 20). %% 24 --define(VBTN_WIDTH, 55). %% 18 --define(HBTN_HEIGHT, 20). --define(RESBTN_WIDTH, 5). --define(DEFAULT_GRID_BGCOLOR, {255,255,255}). --define(DEFAULT_GRID_FGCOLOR, {0,0,0}). --define(GRID_MARK_COLOR, {0,255,255}). --define(GRID_FONT, {courier,12}). - --define(ROW_COL_LBL_WIDTH, 140). --define(ROW_COL_LBL_HEIGHT, 14). - - - --define(KEY_MARK_AREA_HEIGHT, 21). - - --define(DEFAULT_BG_COLOR, {217,217,217}). --define(DEFAULT_ROW_COLOR, {178,34,34}). % Firebrick! --define(DEFAULT_GRID_COLOR, {0,0,0}). --define(LIGHT_GRAY, {226,226,226}). --define(DARK_VIOLET, {148,0,211}). --define(FIREBRICK, {178,34,34}). --define(ANTIQUE_WHITE, {255,255,235}). - - --record(frame_params, {display_id, - toolbar_frame_id, - toolbar_frame_width, - toolbar_frame_height, - sheet_frame_id, - sheet_frame_width, - sheet_frame_height, - sheet_bgframe_id, - grid_frame_id, - grid_frame_width, - grid_frame_height, - grid_bgframe_id - }). - - - - --record(scale_params, {vscale_id, - vscale_pos = 0, - hscale_id, - hscale_pos = 0 - }). - - - - --record(mark_params, {cell_id, - cell_col_no, % Virtual number! - row_no, % Real number! - virtual_row_no, - col_no, % Virtual number! - sort_col_no, - marked_object, - marked_color - }). - - - --record(toolbar_params, {parent_id, - row_col_label_id, - bg_label_id, - fg_label_id, - label_btn_id, - pop_up_frame_id, - pop_up_label_id, - editor_frame_id, - editor_id - }). - - --record(process_variables, {master_pid, - pg_pid, - pb_pid, - rec_pid, - window_id, - window_width, - window_height, - initialising = true, - table_type, - table_name, - record_name, - writable = false, - lists_as_strings = true, - sorting_on = false, - first_col_shown = 1, - first_row_shown = 1, - nof_rows_shown, - cols_shown = [], - data_list = [], - color_list = [], - frame_params = #frame_params{}, - scale_params = #scale_params{}, - mark_params = #mark_params{}, - toolbar_params = #toolbar_params{} - }). diff --git a/lib/tv/src/tv_pd_int_msg.hrl b/lib/tv/src/tv_pd_int_msg.hrl deleted file mode 100644 index faf23a9376..0000000000 --- a/lib/tv/src/tv_pd_int_msg.hrl +++ /dev/null @@ -1,433 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% - - -%%%********************************************************************* -%%% MESSAGES OWNED BY PG -%%%********************************************************************* - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pg_init_grid, {sender, - parent_id, - width, - height, - xpos, - ypos, - nof_rows, - row_height - }). - - - --record(pg_list_info, {sender, - lists_as_strings}). - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pg_col_info, {sender, - first_col_shown, - width_of_cols_shown, - nof_rows_shown - }). - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pg_col_marked, {sender, - virtual_col - }). - - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pg_row_marked, {sender, - virtual_row - }). - - - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - --record(pg_data, {sender, - data, - first_row_shown - }). - - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - --record(pg_cell_marked, {sender, - cell_marked, % true or false - real_col, - real_row, - virtual_col, - virtual_row, - cell_text - }). - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - --record(pg_resize_grid, {sender, - width, - height - }). - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - --record(pg_resize_grid_col, {sender, - real_col_no, - virtual_col_no, - xdiff - }). - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - --record(pg_horizontal_scroll, {sender, - leftmost_virtual_col - }). - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pg_ready, {sender}). - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pg_remove_marks, {sender}). - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pg_mark_col, {sender, - virtual_col, - real_col - }). - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pg_mark_row, {sender, - virtual_row, - real_row - }). - - - - - - -%%%********************************************************************* -%%% MESSAGES OWNED BY PB -%%%********************************************************************* - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - --record(pb_init_btns, {sender, - parent_id, - parent_width, - parent_height, - ypos, - hbtn_height, - resbtn_width, - vbtn_width, - nof_rows, - row_height, - first_col_shown, - cols_shown - }). - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pb_remove_marks, {sender}). - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pb_update_hbtns, {sender, - parent_width, - parent_height, - first_col_shown, - cols_shown - }). - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pb_update_vbtns, {sender, - color_list, - first_row_shown, - nof_rows_shown, - blinking_enabled - }). - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pb_key_info, {sender, - list_of_keys - }). - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pb_new_colwidth, {sender, - real_col, - virtual_col, - xdiff - }). - - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pb_col_marked, {sender, - col_marked, % 'true' or 'false' - real_col, - virtual_col - }). - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pb_row_marked, {sender, - row_marked, % 'true' or 'false' - real_row, - virtual_row - }). - - - - -%%====================================================================== -%% Message: -%% -%% Function: -%% -%% Data: -%%====================================================================== - - --record(pb_set_sort_col, {sender, - virtual_col - }). - - - - diff --git a/lib/tv/src/tv_pd_scale.erl b/lib/tv/src/tv_pd_scale.erl deleted file mode 100644 index 04af2bb981..0000000000 --- a/lib/tv/src/tv_pd_scale.erl +++ /dev/null @@ -1,305 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Part of pd controlling the scale, i.e., the scrollbar -%%% imitation. -%%% -%%%********************************************************************* - - --module(tv_pd_scale). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,scale,2}}]). - - - --export([init_scale/2, - resize_scale/2, - set_scale_range/3, - set_scale_pos/3]). - - - --include("tv_int_def.hrl"). --include("tv_pd_int_def.hrl"). - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -init_scale(FrameP, ScaleP) -> - #frame_params{sheet_frame_id = SheetFrameId, - sheet_frame_width = SheetFrameWidth, - sheet_frame_height = SheetFrameHeight, - grid_frame_width = GridFrameWidth, - grid_frame_height = GridFrameHeight} = FrameP, - - VScaleId = create_scale(vscale, SheetFrameId, SheetFrameWidth, GridFrameHeight), - HScaleId = create_scale(hscale, SheetFrameId, GridFrameWidth, SheetFrameHeight), - - ScaleP#scale_params{vscale_id = VScaleId, - vscale_pos = 0, - hscale_id = HScaleId, - hscale_pos = 0 - }. - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_scale(FrameP, ScaleP) -> - #frame_params{sheet_frame_width = SheetFrameWidth, - sheet_frame_height = SheetFrameHeight, - grid_frame_width = GridFrameWidth, - grid_frame_height = GridFrameHeight} = FrameP, - - #scale_params{vscale_id = VScaleId, - hscale_id = HScaleId} = ScaleP, - - config_scale(vscale, VScaleId, SheetFrameWidth, GridFrameHeight), - config_scale(hscale, HScaleId, GridFrameWidth, SheetFrameHeight), - ScaleP. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -set_scale_range(vscale, Range, ScaleP) -> - {Lo, Hi} = Range, - NewRange = if - Lo > Hi -> - {Hi, Hi}; - true -> - Range - end, - VScaleId = ScaleP#scale_params.vscale_id, - gs:config(VScaleId, [{range, NewRange}]); -set_scale_range(hscale, Range, ScaleP) -> - {Lo, Hi} = Range, - NewRange = if - Lo > Hi -> - {Hi, Hi}; - true -> - Range - end, - HScaleId = ScaleP#scale_params.hscale_id, - gs:config(HScaleId, [{range, NewRange}]). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -set_scale_pos(_ScaleName, undefined, ScaleP) -> - ScaleP; -set_scale_pos(vscale, NewPos, ScaleP) -> - ScaleId = ScaleP#scale_params.vscale_id, - gs:config(ScaleId, [{pos, NewPos}]), - ScaleP#scale_params{vscale_pos = NewPos}; -set_scale_pos(hscale, NewPos, ScaleP) -> - ScaleId = ScaleP#scale_params.hscale_id, - gs:config(ScaleId, [{pos, NewPos}]), - ScaleP#scale_params{hscale_pos = NewPos}. - - - - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -config_scale(ScaleName, ScaleId, FrameWidth, FrameHeight) -> - {Width, Height, Xpos, Ypos} = get_scale_coords(ScaleName, - FrameWidth, - FrameHeight), - gs:config(ScaleId, [{height, Height}, - {width, Width}, - {x, Xpos}, - {y, Ypos} - ]). - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_scale(ScaleName, FrameId, FrameWidth, FrameHeight) -> - {Width, Height, Xpos, Ypos} = get_scale_coords(ScaleName, - FrameWidth, - FrameHeight), - {Orientation, Range} = case ScaleName of - vscale -> - {vertical, {1, 1}}; - hscale -> - {horizontal, {1, 1}} - end, - gs:scale(FrameId, [{data, ScaleName}, - {orient, Orientation}, - {buttonpress, true}, - {buttonrelease, true}, - {height, Height}, - {width, Width}, - {x, Xpos}, - {y, Ypos}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {range, Range} - ]). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_scale_coords(hscale, FrameWidth, FrameHeight) -> - Height = ?HSCALE_HEIGHT, - Xpos = ?VBTN_WIDTH - 3, % Subtracting 3 makes it look better! - Ypos = FrameHeight - Height, - Width = FrameWidth - Xpos + 5, % Adding 5 for better look! - {Width, Height, Xpos, Ypos}; -get_scale_coords(vscale, FrameWidth, FrameHeight) -> - Width = ?VSCALE_WIDTH, - Xpos = (FrameWidth - Width), - Ypos = ?HBTN_HEIGHT - 3, % Subtracting 3 makes it look better! - Height = FrameHeight - Ypos + 5, % Adding 5 for better look! - {Width, Height, Xpos, Ypos}. - - - - - - - - - - - - - - - - - - - diff --git a/lib/tv/src/tv_pg.erl b/lib/tv/src/tv_pg.erl deleted file mode 100644 index 7194cfb756..0000000000 --- a/lib/tv/src/tv_pg.erl +++ /dev/null @@ -1,430 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_pg). --compile([{nowarn_deprecated_function,{gs,config,2}}]). - - - --export([pg/1]). - - --include("tv_int_def.hrl"). --include("tv_pg_int_def.hrl"). --include("tv_pd_int_msg.hrl"). - - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: pg. -%% -%% Return Value: None. -%% -%% Description: Process controlling the grid part of the display. -%% -%% Parameters: None. -%%====================================================================== - - -pg(ParentPid) -> - process_flag(trap_exit, true), - ProcVars = #process_variables{parent_pid = ParentPid}, - loop(ProcVars). - - - - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - - - -%%====================================================================== -%% Function: loop. -%% -%% Return Value: None. -%% -%% Description: Eternal (well, almost) loop, receiving messages and -%% handling them. -%% -%% Parameters: -%%====================================================================== - - - -loop(ProcVars) -> - receive - Msg -> - case Msg of - - - #pg_data{} -> - GridId = mark_busy(ProcVars), - NewProcVars = update_grid_data(Msg, ProcVars), - mark_nonbusy(GridId), - loop(NewProcVars); - - #pg_list_info{lists_as_strings=ListAsStr} -> - NewProcVars = tv_pg_gridfcns:handle_list_info(ListAsStr, ProcVars), - loop(NewProcVars); - - #pg_horizontal_scroll{} -> - GridId = mark_busy(ProcVars), - NewProcVars = scroll_grid_horizontally(Msg, ProcVars), - mark_nonbusy(GridId), - loop(NewProcVars); - - #pg_remove_marks{} -> - GridId = mark_busy(ProcVars), - NewProcVars = tv_pg_gridfcns:remove_marks(ProcVars), - mark_nonbusy(GridId), - loop(NewProcVars); - - #pg_col_marked{} -> - GridId = mark_busy(ProcVars), - NewProcVars = mark_grid_col(Msg, ProcVars), - mark_nonbusy(GridId), - loop(NewProcVars); - - #pg_row_marked{} -> - GridId = mark_busy(ProcVars), - NewProcVars = mark_grid_row(Msg, ProcVars), - mark_nonbusy(GridId), - loop(NewProcVars); - - #pg_resize_grid_col{} -> - GridId = mark_busy(ProcVars), - NewProcVars = resize_grid_column(Msg, ProcVars), - mark_nonbusy(GridId), - loop(NewProcVars); - - #pg_resize_grid{} -> - GridId = mark_busy(ProcVars), - NewProcVars = resize_grid(Msg, ProcVars), - mark_nonbusy(GridId), - loop(NewProcVars); - - #pg_init_grid{} -> - GridId = mark_busy(ProcVars), - NewProcVars = init_grid(Msg, ProcVars), - mark_nonbusy(GridId), - PdPid = ProcVars#process_variables.parent_pid, - PdPid ! #pg_ready{sender = self()}, - loop(NewProcVars); - - {gs, Id, Event, Data, Args} -> - GridId = mark_busy(ProcVars), - NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars), - mark_nonbusy(GridId), - loop(NewProcVars); - - - {'EXIT', Pid, Reason} -> - ParentPid = ProcVars#process_variables.parent_pid, - exit_signals({Pid, Reason}, ParentPid, ProcVars), - loop(ProcVars); - - _Other -> - loop(ProcVars) - end - end. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -exit_signals(ExitInfo, ParentPid, _ProcVars) -> - case ExitInfo of - {ParentPid, _Reason} -> - exit(normal); - _Other -> - done - end. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -gs_messages(Msg, ProcVars) -> - - case Msg of - - {Id, buttonpress, {gridcell, RealCol, RealRow, _FrameId}, [1 | _]} -> - NewProcVars = tv_pg_gridfcns:mark_cell_and_notify(Id, RealCol, - RealRow, ProcVars), - NewProcVars; - - - _OtherMessage -> - ProcVars - - end. - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -init_grid(Msg, ProcVars) -> - #pg_init_grid{parent_id = ParentId, - width = Width, - height = Height, - xpos = Xpos, - ypos = Ypos, - nof_rows = NofRows, - row_height = RowHeight} = Msg, - tv_pg_gridfcns:init_grid(ParentId, Width, Height, Xpos, Ypos, NofRows, - RowHeight, ProcVars). - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_grid(Msg, ProcVars) -> - #pg_resize_grid{width = Width, - height = Height} = Msg, - tv_pg_gridfcns:resize_grid(Width, Height, ProcVars). - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_grid_column(Msg, ProcVars) -> - #pg_resize_grid_col{real_col_no = RealCol, - virtual_col_no = VirtualCol, - xdiff = Xdiff} = Msg, - tv_pg_gridfcns:resize_grid_column(RealCol, VirtualCol, Xdiff, ProcVars). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -scroll_grid_horizontally(Msg, ProcVars) -> - FirstColShown = ?COMM_FUNC_FILE:max(1, Msg#pg_horizontal_scroll.leftmost_virtual_col), - tv_pg_gridfcns:scroll_grid_horizontally(FirstColShown, ProcVars). - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_grid_data(Msg, ProcVars) -> - #pg_data{data = Data, - first_row_shown = FirstRowShown} = Msg, - tv_pg_gridfcns:update_grid_data(Data, FirstRowShown, ProcVars). - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_grid_col(Msg, ProcVars) -> - #pg_col_marked{virtual_col = VirtualCol} = Msg, - tv_pg_gridfcns:mark_col(VirtualCol, ProcVars). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_grid_row(Msg, ProcVars) -> - #pg_row_marked{virtual_row = VirtualRow} = Msg, - tv_pg_gridfcns:mark_row(VirtualRow, ProcVars). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_busy(ProcVars) -> - GridP = ProcVars#process_variables.grid_params, - GridId = GridP#grid_params.fg_frame, - gs:config(GridId, [{cursor, busy}]), - GridId. - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_nonbusy(GridId) -> - gs:config(GridId, [{cursor, arrow}]). - diff --git a/lib/tv/src/tv_pg_gridfcns.erl b/lib/tv/src/tv_pg_gridfcns.erl deleted file mode 100644 index d037b42294..0000000000 --- a/lib/tv/src/tv_pg_gridfcns.erl +++ /dev/null @@ -1,1918 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_pg_gridfcns). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,frame,2}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,read,2}}]). - - - - --export([init_grid/8, - resize_grid/3, - resize_grid_column/4, - update_grid_data/3, - scroll_grid_horizontally/2, - mark_cell_and_notify/4, - remove_marks/1, - mark_col/2, - mark_row/2, - handle_list_info/2 - ]). - - - - - --include("tv_pd_int_msg.hrl"). --include("tv_pg_int_def.hrl"). - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -init_grid(GridParentId, GridWidth, - GridHeight, GridXpos, GridYpos, NofRows, RowHeight, ProcVars) -> - - % Get the size and ID of the grid-parent frame, i.e., the - % grid-frame! Do not confuse the base-frames below with - % the grid-frame! - - #process_variables{parent_pid = ParentPid, - grid_params = GridP} = ProcVars, - - #grid_params{fg_color = GridFgColor, - nof_cols = NofCols, - col_width = DefaultColWidth, - first_col_shown = FirstColShown, - col_widths = ColWidths} = GridP, - - % Create the two frames the column frames are placed on! - % These two frames defines the size of the grid. - BgFrame = create_base_frame(GridParentId, GridWidth, GridHeight, - GridXpos, GridYpos, GridFgColor), - FgFrame = create_base_frame(BgFrame, GridWidth - 1, GridHeight - 1, - 0, 0, GridFgColor), - - % Compute the the colwidths necessary to cover the grid. - ColsShown = compute_cols_shown(FirstColShown, ColWidths, GridWidth, NofCols, - DefaultColWidth), - NofRowsShown = compute_rows_shown(GridHeight, RowHeight), - - % Tell parent about the width of columns shown! - ParentPid ! #pg_col_info{sender = self(), - first_col_shown = FirstColShown, - width_of_cols_shown = ColsShown, - nof_rows_shown = NofRowsShown - }, - - NewNofCols = erlang:max(length(ColsShown), NofCols), - - % The GridColWidths list shall contain the current width of each frame. - NewColWidths = update_col_widths(ColsShown, ColWidths, FirstColShown, - DefaultColWidth), - - % Create column frames, one for each column, and rows (labels) on each frame. - {FrameIdList, ColLabelList} = create_col_frames(NewNofCols, NofRows, RowHeight, - FgFrame, GridP, [], []), - - % Get lists of label-ID's for each row. (When we created the column frames, - % we got the id's of labels placed on each column, i.e., vertically. - % However, most often we want the id's for one row, i.e., label id's - % horisontally.) - RowIdList = get_row_ids(NofRows, ColLabelList, []), - - % Update the grid_params record with the new values! - NewGridP = GridP#grid_params{bg_frame = BgFrame, - fg_frame = FgFrame, - grid_width = GridWidth, - grid_height = GridHeight, - grid_xpos = GridXpos, - grid_ypos = GridYpos, - nof_cols = NewNofCols, - col_widths = NewColWidths, - cols_shown = ColsShown, - nof_rows = NofRows, - row_height = RowHeight, - nof_rows_shown = NofRowsShown, - col_frame_ids = FrameIdList, - col_ids = ColLabelList, - row_ids = RowIdList, - row_data_list = lists:duplicate(NofRows, notext) - }, - - ProcVars#process_variables{grid_parent_id = GridParentId, - grid_params = NewGridP}. - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_grid(NewWidth, NewHeight, ProcVars) -> - #process_variables{parent_pid = ParentPid, - grid_params = GridP, - mark_params = MarkP} = ProcVars, - - #grid_params{bg_frame = BgFrame, - fg_frame = FgFrame, - nof_cols = NofCols, - nof_rows = NofRows, - col_width = DefaultColWidth, - first_col_shown = FirstColShown, - col_widths = ColWidths, - row_height = RowHeight, - col_frame_ids = ColFrameIds, - col_ids = ColIds, - row_ids = RowIds, - bg_color = BgColor, - fg_color = FgColor, - row_data_list = RowDataList, - lists_as_strings = ListAsStr} = GridP, - - gs:config(BgFrame, [{width, NewWidth}, - {height, NewHeight} - ]), - gs:config(FgFrame, [{width, NewWidth - 1}, - {height, NewHeight - 1} - ]), - - ColsShown = compute_cols_shown(FirstColShown, ColWidths, NewWidth, NofCols, - DefaultColWidth), - - NofRowsShown = compute_rows_shown(NewHeight, RowHeight), - - - % Tell parent about the width of columns shown! - ParentPid ! #pg_col_info{sender = self(), - first_col_shown = FirstColShown, - width_of_cols_shown = ColsShown, - nof_rows_shown = NofRowsShown - }, - - NewColWidths = update_col_widths(ColsShown, ColWidths, FirstColShown, - DefaultColWidth), - - NofColsShown = length(ColsShown), - {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} = - check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds, - RowIds, NofRows, RowHeight, FgColor, BgColor ), - - clear_fields(safe_nthtail(NofColsShown, NewColIds), - safe_nthtail(NofRowsShown, NewRowIds)), - - RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown), - - refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, RowDataList, ListAsStr), - - NewGridP = GridP#grid_params{grid_width = NewWidth, - grid_height = NewHeight, - nof_cols = NewNofCols, - nof_rows_shown = NofRowsShown, - cols_shown = ColsShown, - col_widths = NewColWidths, - col_frame_ids = NewColFrameIds, - col_ids = NewColIds, - row_ids = NewRowIds - }, - - refresh_marks(NewGridP, MarkP), - - ProcVars#process_variables{grid_params = NewGridP}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_grid_column(RealCol, VirtualCol, Xdiff, ProcVars) -> - #process_variables{parent_pid = ParentPid, - grid_params = GridP, - mark_params = MarkP} = ProcVars, - - #grid_params{grid_width = GridWidth, - first_col_shown = FirstColShown, - nof_cols = NofCols, - col_widths = ColWidths, - col_frame_ids = ColFrameIds, - col_ids = ColIds, - col_width = DefaultColWidth, - row_ids = RowIds, - max_col_width = MaxColWidth, - min_col_width = MinColWidth, - nof_rows = NofRows, - nof_rows_shown = NofRowsShown, - row_height = RowHeight, - bg_color = BgColor, - fg_color = FgColor, - row_data_list = RowDataList, - lists_as_strings = ListAsStr} = GridP, - - % Get new width! - Width = erlang:min(MaxColWidth, erlang:max((lists:nth(VirtualCol, ColWidths) + Xdiff), - MinColWidth)), - - % Resize the column. - NewWidthOfCol = resize_one_column(RealCol, Width, ColFrameIds, MaxColWidth, - MinColWidth), - - % Update the ColWidths list. - TempColWidths = lists:sublist(ColWidths, VirtualCol - 1) ++ - [NewWidthOfCol | safe_nthtail(VirtualCol, ColWidths)], - - % Check the other columns, whether a new column has to be created. - ColsShown = compute_cols_shown(FirstColShown, TempColWidths, GridWidth, - NofCols, DefaultColWidth), - - % Get the final ColWidths list, after all updates! - NewColWidths = update_col_widths(ColsShown, TempColWidths, FirstColShown, - DefaultColWidth), - - % Tell parent about the width of columns shown! - ParentPid ! #pg_col_info{sender = self(), - first_col_shown = FirstColShown, - width_of_cols_shown = ColsShown, - nof_rows_shown = NofRowsShown - }, - - % Get the new number of columns (may have changed). - NofColsShown = length(ColsShown), - {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} = - check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds, - RowIds, NofRows, RowHeight, FgColor, BgColor ), - - RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown), - refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, RowDataList, ListAsStr), - - NewGridP = GridP#grid_params{nof_cols = NewNofCols, - cols_shown = ColsShown, - col_widths = NewColWidths, - col_frame_ids = NewColFrameIds, - col_ids = NewColIds, - row_ids = NewRowIds - }, - - refresh_marks(NewGridP, MarkP), - - ProcVars#process_variables{grid_params = NewGridP}. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -handle_list_info(ListAsStr, ProcVars) -> - #process_variables{grid_params = GridP} = ProcVars, - - #grid_params{first_col_shown = FirstColShown, - cols_shown = ColsShown, - nof_rows_shown = NofRowsShown, - row_data_list = RowDataList, - row_ids = RowIds, - lists_as_strings = OldListAsStr} = GridP, - - case ListAsStr of - OldListAsStr -> - ProcVars; - _NewValue -> - NofColsShown = length(ColsShown), - RowsToUpdate = lists:sublist(RowIds, NofRowsShown), - refresh_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, - RowDataList, ListAsStr), - NewGridP = GridP#grid_params{lists_as_strings = ListAsStr}, - ProcVars#process_variables{grid_params = NewGridP} - end. - - - - -update_grid_data(Data, FirstRowShown, ProcVars) -> - #process_variables{grid_params = GridP, - mark_params = MarkP} = ProcVars, - - #grid_params{first_col_shown = FirstColShown, - cols_shown = ColsShown, - nof_rows = NofRows, - nof_rows_shown = NofRowsShown, - row_ids = RowIds, - lists_as_strings = ListAsStr} = GridP, - - NofColsShown = length(ColsShown), - RowsToUpdate = lists:sublist(RowIds, NofRowsShown), - - NewMarkP = move_marks(FirstColShown, FirstRowShown, GridP, MarkP), - - update_visible_rows(RowsToUpdate, FirstColShown, NofColsShown, Data, ListAsStr), - NewRowDataList = make_row_data_list(1, NofRows, Data), - - NewGridP = GridP#grid_params{first_row_shown = FirstRowShown, - row_data_list = NewRowDataList}, - - ProcVars#process_variables{grid_params = NewGridP, - mark_params = NewMarkP}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -scroll_grid_horizontally(NewFirstColShown, ProcVars) -> - #process_variables{parent_pid = ParentPid, - grid_params = GridP, - mark_params = MarkP} = ProcVars, - - #grid_params{grid_width = Width, - nof_cols = NofCols, - nof_rows = NofRows, - nof_rows_shown = NofRowsShown, - first_row_shown = FirstRowShown, - col_width = DefaultColWidth, - max_col_width = MaxColWidth, - min_col_width = MinColWidth, - col_widths = ColWidths, - row_height = RowHeight, - col_frame_ids = ColFrameIds, - col_ids = ColIds, - row_ids = RowIds, - bg_color = BgColor, - fg_color = FgColor, - row_data_list = RowDataList, - lists_as_strings = ListAsStr} = GridP, - - % Probably it is unnecessary to check whether any new columns shall be - % created or not, but what the heck, we don't want to crash... - ColsShown = compute_cols_shown(NewFirstColShown, ColWidths, Width, NofCols, - DefaultColWidth), - NofColsShown = length(ColsShown), - - ParentPid ! #pg_col_info{sender = self(), - first_col_shown = NewFirstColShown, - width_of_cols_shown = ColsShown, - nof_rows_shown = NofRowsShown - }, - - NewMarkP = move_marks(NewFirstColShown, FirstRowShown, GridP, MarkP), - - NewColWidths = update_col_widths(ColsShown, ColWidths, NewFirstColShown, - DefaultColWidth), - - {NewNofCols, NewColFrameIds, NewColIds, NewRowIds} = - check_nof_cols(ColsShown, (NofColsShown - NofCols), ColFrameIds, ColIds, - RowIds, NofRows, RowHeight, FgColor, BgColor ), - - - RowsToUpdate = lists:sublist(NewRowIds, NofRowsShown), - resize_all_grid_columns(1, ColsShown, NewColFrameIds, MaxColWidth, MinColWidth), - - refresh_visible_rows(RowsToUpdate, NewFirstColShown, NofColsShown, RowDataList, ListAsStr), - - % Clear fields currently not visible. - clear_fields(safe_nthtail(NofColsShown, NewColIds), - safe_nthtail(NofRowsShown, NewRowIds)), - - - NewGridP = GridP#grid_params{nof_cols = NewNofCols, - cols_shown = ColsShown, - col_widths = NewColWidths, - col_frame_ids = NewColFrameIds, - col_ids = NewColIds, - row_ids = NewRowIds, - first_col_shown = NewFirstColShown - }, - - ProcVars#process_variables{grid_params = NewGridP, - mark_params = NewMarkP}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_row(VirtualRow, ProcVars) -> - #process_variables{grid_params = GridP, - mark_params = MarkP} = ProcVars, - - #grid_params{first_row_shown = FirstRowShown, - nof_rows_shown = NofRowsShown, - row_ids = RowIds} = GridP, - - mark_row(VirtualRow, FirstRowShown, FirstRowShown + NofRowsShown - 1, RowIds, - ?GRID_MARK_COLOR), - - NewMarkP = MarkP#mark_params{cell_id = undefined, - virtual_col = undefined, - virtual_row = VirtualRow - }, - - ProcVars#process_variables{mark_params = NewMarkP}. - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_col(VirtualCol, ProcVars) -> - #process_variables{grid_params = GridP, - mark_params = MarkP} = ProcVars, - - #grid_params{first_col_shown = FirstColShown, - cols_shown = ColsShown, - col_ids = ColIds} = GridP, - - NofColsShown = length(ColsShown), - mark_col(VirtualCol, FirstColShown, FirstColShown + NofColsShown - 1, ColIds, - ?GRID_MARK_COLOR), - - NewMarkP = MarkP#mark_params{cell_id = undefined, - virtual_col = VirtualCol, - virtual_row = undefined - }, - - ProcVars#process_variables{mark_params = NewMarkP}. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_cell_and_notify(CellId, RealCol, RealRow, ProcVars) -> - #process_variables{parent_pid = ParentPid, - grid_params = GridP, - mark_params = MarkP} = ProcVars, - - #grid_params{first_col_shown = FirstColShown, - first_row_shown = FirstRowShown} = GridP, - - OldCellId = MarkP#mark_params.cell_id, - - VirtualCol = FirstColShown + RealCol - 1, - VirtualRow = FirstRowShown + RealRow - 1, - - %% Right now, when the table tool only is passive, i.e., we cannot edit - %% the table content, we don't want to be able to mark empty cells. - - {text, CellText} = gs:read(CellId, label), - - CellMarked = case CellText of - "" -> false; - _AnyText when CellId=:=OldCellId -> false; - _AnyText -> true - end, - - remove_marks(ProcVars), - update_marked_cells(CellId, OldCellId, CellMarked), - - notify_about_cell_marked(ParentPid, CellMarked, RealCol, RealRow, - VirtualCol, VirtualRow, CellText), - - NewMarkP = case CellMarked of - true -> - MarkP#mark_params{cell_id = CellId, - virtual_col = VirtualCol, - virtual_row = VirtualRow - }; - false -> - MarkP#mark_params{cell_id = undefined, - virtual_col = 0, - virtual_row = undefined - } - end, - - ProcVars#process_variables{mark_params = NewMarkP}. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -remove_marks(ProcVars) -> - #process_variables{mark_params = MarkP, - grid_params = GridP} = ProcVars, - - #grid_params{first_col_shown = FirstColShown, - cols_shown = ColsShown, - col_ids = ColIds, - first_row_shown = FirstRowShown, - nof_rows_shown = NofRowsShown, - row_ids = RowIds} = GridP, - - - #mark_params{cell_id = CellId, - virtual_col = VirtualCol, - virtual_row = VirtualRow} = MarkP, - - case {VirtualCol, VirtualRow} of - {undefined, undefined} -> - update_marked_cells(CellId, CellId, false); - {_AnyCol, undefined} -> - NofColsShown = length(ColsShown), - unmark_col(VirtualCol, FirstColShown, FirstColShown + NofColsShown - 1, - ColIds); - {undefined, _AnyRow} -> - unmark_row(VirtualRow, FirstRowShown, FirstRowShown + NofRowsShown - 1, - RowIds); - _Other -> - update_marked_cells(CellId, CellId, false) - end, - - NewMarkP = MarkP#mark_params{cell_id = undefined, - virtual_col = 0, - virtual_row = undefined - }, - ProcVars#process_variables{mark_params = NewMarkP}. - - - - - - - - - -%%%********************************************************************* -%%% INTERNAL FUNCTIONS -%%%********************************************************************* - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -move_marks(FirstCol, FirstRow, GridP, MarkP) -> - #grid_params{first_col_shown = OldFirstCol, - cols_shown = ColsShown, - first_row_shown = OldFirstRow, - nof_rows_shown = NofRowsShown, - col_ids = ColIds, - row_ids = RowIds} = GridP, - - #mark_params{virtual_col = VirtualCol, - virtual_row = VirtualRow} = MarkP, - - - case {VirtualCol, VirtualRow} of - {undefined, undefined} -> - NofColsShown = length(ColsShown), - move_marked_cell(FirstCol, FirstRow, NofColsShown, - NofRowsShown, RowIds, MarkP); - {_AnyCol, undefined} -> - NofColsShown = length(ColsShown), - OldLastCol = OldFirstCol + NofColsShown - 1, - LastCol = FirstCol + NofColsShown - 1, - move_marked_col(VirtualCol, OldFirstCol, OldLastCol, - FirstCol, LastCol, ColIds, MarkP); - {undefined, _AnyRow} -> - OldLastRow = OldFirstRow + NofRowsShown - 1, - LastRow = FirstRow + NofRowsShown - 1, - move_marked_row(VirtualRow, OldFirstRow, OldLastRow, - FirstRow, LastRow, RowIds, MarkP); - {_CellCol, _CellRow} -> - NofColsShown = length(ColsShown), - move_marked_cell(FirstCol, FirstRow, NofColsShown, - NofRowsShown, RowIds, MarkP) - end. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -refresh_marks(GridP, MarkP) -> - #grid_params{first_col_shown = FirstCol, - cols_shown = ColsShown, - first_row_shown = FirstRow, - nof_rows_shown = NofRowsShown, - col_ids = ColIds, - row_ids = RowIds} = GridP, - - #mark_params{virtual_col = VirtualCol, - virtual_row = VirtualRow} = MarkP, - - - case {VirtualCol, VirtualRow} of - {undefined, undefined} -> - NofColsShown = length(ColsShown), - move_marked_cell(FirstCol, FirstRow, NofColsShown, NofRowsShown, - RowIds, MarkP); - {_AnyCol, undefined} -> - NofColsShown = length(ColsShown), - LastCol = FirstCol + NofColsShown - 1, - mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?GRID_MARK_COLOR); - {undefined, _AnyRow} -> - LastRow = FirstRow + NofRowsShown - 1, - mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?GRID_MARK_COLOR); - {_CellCol, _CellRow} -> - NofColsShown = length(ColsShown), - move_marked_cell(FirstCol, FirstRow, NofColsShown, NofRowsShown, - RowIds, MarkP) - end. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -move_marked_col(VirtualCol, - OldFirstCol, OldLastCol, FirstCol, LastCol, ColIds, MarkP) -> - unmark_col(VirtualCol, OldFirstCol, OldLastCol, ColIds), - mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?GRID_MARK_COLOR), - MarkP#mark_params{cell_id = undefined}. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_col(VirtualCol, FirstCol, _LastCol, _ColIds, _Color) when VirtualCol < FirstCol -> - done; -mark_col(VirtualCol, _FirstCol, LastCol, _ColIds, _Color) when VirtualCol > LastCol -> - done; -mark_col(VirtualCol, FirstCol, _LastCol, ColIds, Color) -> - RealCol = VirtualCol - FirstCol + 1, - MarkedColIds = lists:nth(RealCol, ColIds), - mark_all_cells(MarkedColIds, Color). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -unmark_col(VirtualCol, FirstCol, LastCol, ColIds) -> - mark_col(VirtualCol, FirstCol, LastCol, ColIds, ?DEFAULT_GRID_BGCOLOR). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_all_cells([], _Color) -> - done; -mark_all_cells([CellId | T], Color) -> - gs:config(CellId, [{bg, Color}]), - mark_all_cells(T, Color). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -mark_row(VirtualRow, FirstRow, _LastRow, _RowIds, _Color) when VirtualRow < FirstRow -> - done; -mark_row(VirtualRow, _FirstRow, LastRow, _RowIds, _Color) when VirtualRow > LastRow -> - done; -mark_row(VirtualRow, FirstRow, _LastRow, RowIds, Color) -> - RealRow = VirtualRow - FirstRow + 1, - MarkedRowIds = lists:nth(RealRow, RowIds), - mark_all_cells(MarkedRowIds, Color). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -unmark_row(VirtualRow, FirstRow, LastRow, RowIds) -> - mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?DEFAULT_GRID_BGCOLOR). - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -move_marked_row(VirtualRow, - OldFirstRow, OldLastRow, FirstRow, LastRow, RowIds, MarkP) -> - unmark_row(VirtualRow, OldFirstRow, OldLastRow, RowIds), - mark_row(VirtualRow, FirstRow, LastRow, RowIds, ?GRID_MARK_COLOR), - MarkP#mark_params{cell_id = undefined}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -move_marked_cell(FirstColShown, - FirstRowShown, NofColsShown, NofRowsShown, RowIds, MarkP) -> - #mark_params{cell_id = OldCellId, - virtual_col = VirtualCol, - virtual_row = VirtualRow} = MarkP, - - case OldCellId of - undefined -> - MarkP; - _OtherId -> - NewRealCol = VirtualCol - FirstColShown + 1, - NewRealRow = VirtualRow - FirstRowShown + 1, - update_marked_cells(undefined, OldCellId, false), - case check_if_new_mark_visible(NewRealCol, NewRealRow, - NofColsShown, NofRowsShown) of - false -> - MarkP; - true -> - NewCellId = lists:nth(NewRealCol, - lists:nth(NewRealRow, RowIds)), - update_marked_cells(NewCellId, undefined, true), - MarkP#mark_params{cell_id = NewCellId} - end - end. - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -check_if_new_mark_visible(Col, _Row, NofCols, _NofRows) when Col > NofCols -> - false; -check_if_new_mark_visible(Col, _Row, _NofCols, _NofRows) when Col =< 0 -> - false; -check_if_new_mark_visible(_Col, Row, _NofCols, NofRows) when Row > NofRows -> - false; -check_if_new_mark_visible(_Col, Row, _NofCols, _NofRows) when Row =< 0 -> - false; -check_if_new_mark_visible(_Col, _Row, _NofCols, _NofRows) -> - true. - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_marked_cells(CellId, OldCellId, _MarkedCell) when CellId =:= OldCellId -> - gs:config(CellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]); -update_marked_cells(_CellId, undefined, false) -> - done; -update_marked_cells(CellId, undefined, true) -> - gs:config(CellId, [{bg, ?GRID_MARK_COLOR}]); -update_marked_cells(CellId, OldCellId, true) -> - gs:config(OldCellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]), - gs:config(CellId, [{bg, ?GRID_MARK_COLOR}]); -update_marked_cells(_CellId, OldCellId, false) -> - gs:config(OldCellId, [{bg, ?DEFAULT_GRID_BGCOLOR}]). - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -notify_about_cell_marked(Pid, Marked, RealCol, RealRow, VirtCol, VirtRow, Text) -> - Pid ! #pg_cell_marked{sender = self(), - cell_marked = Marked, - real_col = RealCol, - real_row = RealRow, - virtual_col = VirtCol, - virtual_row = VirtRow, - cell_text = Text - }. - - - - - - - - -%%%--------------------------------------------------------------------- -%%% START of functions used to print data in the grid fields. -%%%--------------------------------------------------------------------- - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -refresh_visible_rows([], _FirstColShown, _NofColsShown, _DataList, _ListAsStr) -> - done; -refresh_visible_rows(RowIds, _FirstColShown, _NofColsShown, [], _ListAsStr) -> - clear_cols_or_rows(RowIds); -refresh_visible_rows([OneRowIds | RemRowIds], FirstColShown, NofColsShown, - [DataItemList | RemDataItemLists], ListAsStr) -> - NewDataItemList = get_data_sublist(DataItemList, FirstColShown, NofColsShown), - update_one_row(lists:sublist(OneRowIds, NofColsShown), NewDataItemList, ListAsStr), - refresh_visible_rows(RemRowIds, FirstColShown, NofColsShown, RemDataItemLists, ListAsStr). - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_visible_rows([], _FirstColShown, _NofColsShown, _DataList, _ListAsStr) -> - done; -update_visible_rows(RowIds, _FirstColShown, _NofColsShown, [], _ListAsStr) -> - clear_cols_or_rows(RowIds); -update_visible_rows([OneRowIds | RemRowIds], FirstColShown, NofColsShown, - [DataItem | RemData], ListAsStr) -> - % We convert the received item to a list! This way we know that - % '[notext]' shall be printed as 'notext', while 'notext' shall - % be printed as ''. - TempDataItemList = item_to_list(DataItem), - DataItemList = get_data_sublist(TempDataItemList, FirstColShown, - NofColsShown), - update_one_row(lists:sublist(OneRowIds, NofColsShown), DataItemList, ListAsStr), - update_visible_rows(RemRowIds, FirstColShown, NofColsShown, RemData, ListAsStr). - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_one_row(OneRowIds, [], _ListAsStr) -> - clear_one_col_or_row(OneRowIds); -update_one_row([], _DataItemList, _ListAsStr) -> - done; -update_one_row([LabelId | RemLabelIds], [notext | T], ListAsStr) -> - gs:config(LabelId, [{label, {text, ""}} - ]), - update_one_row(RemLabelIds, T, ListAsStr); -update_one_row([LabelId | RemLabelIds], [DataElem | T], ListAsStr) -> - Str = case ListAsStr of - true -> - tv_io_lib:format(" ~p", [DataElem]); - false -> - " " ++ lists:flatten(tv_io_lib:write(DataElem)) - end, - gs:config(LabelId, [{label, {text, Str}} - ]), - update_one_row(RemLabelIds, T, ListAsStr). - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -make_row_data_list(N, NofRows, []) when N > NofRows -> - []; -make_row_data_list(N, NofRows, []) -> - % If NofRows == N, we get the empty list here! - lists:duplicate(NofRows- N, notext); -make_row_data_list(N, NofRows, [_DataItem | _RemData]) when N > NofRows -> - []; -make_row_data_list(N, NofRows, [DataItem | RemData]) -> - % We convert the received item to a list! This way we know that - % '[notext]' shall be printed as 'notext', while 'notext' shall - % be printed as ''. - [item_to_list(DataItem) | make_row_data_list(N + 1, NofRows, RemData)]. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -item_to_list(Item) when is_tuple(Item) -> - tuple_to_list(Item); -item_to_list(Item) -> - [Item]. - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_data_sublist(DataList, StartPos, Length) -> - case catch lists:sublist(DataList, StartPos, Length) of - {'EXIT', _Reason} -> - []; - Sublist -> - Sublist - end. - - - - - - - -%%%--------------------------------------------------------------------- -%%% END of functions used to print data in the grid fields. -%%%--------------------------------------------------------------------- - - - - - -%%%--------------------------------------------------------------------- -%%% START of functions used to resize the grid columns. -%%%--------------------------------------------------------------------- - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_all_grid_columns(_RealCol, [], _ColFrameIds, _MaxColWidth, _MinColWidth) -> - done; -resize_all_grid_columns(RealCol, [ColWidth | Tail], ColFrameIds, MaxColWidth, MinColWidth) -> - - resize_one_column(RealCol, ColWidth, ColFrameIds, MaxColWidth, MinColWidth), - resize_all_grid_columns(RealCol + 1, Tail, ColFrameIds, MaxColWidth, - MinColWidth). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -resize_one_column(RealCol, Width, ColFrameIds, MaxW, MinW) -> - NewWidthOfCol = erlang:min(MaxW, erlang:max(Width, MinW)), - case length(ColFrameIds) of - RealCol -> - done; - _Other -> - FrameId = lists:nth(RealCol + 1, ColFrameIds), - gs:config(FrameId, [{x, NewWidthOfCol + 1}]) - end, - NewWidthOfCol. - - - - -%%%--------------------------------------------------------------------- -%%% END of functions used to resize the grid columns. -%%%--------------------------------------------------------------------- - - - - - - -%%%--------------------------------------------------------------------- -%%% START of functions used to update the grid. -%%%--------------------------------------------------------------------- - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -clear_fields(ColIds, RowIds) -> - clear_cols_or_rows(ColIds), - clear_cols_or_rows(RowIds). - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -clear_cols_or_rows([]) -> - done; -clear_cols_or_rows([IdList | RemIdLists]) -> - clear_one_col_or_row(IdList), - clear_cols_or_rows(RemIdLists). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -clear_one_col_or_row([]) -> - done; -clear_one_col_or_row([LabelId | RemLabelIds]) -> - gs:config(LabelId, [{label, {text, ""}} - ]), - clear_one_col_or_row(RemLabelIds). - - - - - -%%%--------------------------------------------------------------------- -%%% END of functions used to update the grid. -%%%--------------------------------------------------------------------- - - - - - - -%%%--------------------------------------------------------------------- -%%% START of functions used to compute the part of the grid that has to -%%% be updated, as well as deciding whether a new column has to be added. -%%% Old columns (i.e., columns not visible) are not removed, but they -%%% shall not be updated until they once again becomes visible. -%%%--------------------------------------------------------------------- - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -check_nof_cols(_ColsShown, NofNewCols, ColFrameIds, ColIds, RowIds, - _NofRows, _RowHeight, _FgColor, _BgColor) when NofNewCols =< 0 -> - {length(ColFrameIds), ColFrameIds, ColIds, RowIds}; -check_nof_cols(ColsShown, NofNewCols, ColFrameIds, ColIds, - RowIds, NofRows, RowHeight, FgColor, BgColor) -> - NewColNo = length(ColFrameIds) + 1, - % We don't care about the pathological case where no columns have been - % created. If the gridwidth, or the columnwidth, was set to =< 0 during - % initialisation, then no columns will have been created. The program - % will probably also have crashed. If any smart jackass has set invalid - % values on these important parameters, then he can only blame himself. - ParentId = lists:nth((NewColNo - 1), ColFrameIds), - ParentColWidth = lists:nth((NewColNo - 1), ColsShown), - Xpos = ParentColWidth + 1, - - {ColFrameId, LabelIds} = add_one_col_frame(ParentId, NewColNo, Xpos, FgColor, - BgColor, NofRows, RowHeight), - - NewColFrameIds = ColFrameIds ++ [ColFrameId], - NewColIds = ColIds ++ [LabelIds], - NewRowIds = update_row_ids(RowIds, LabelIds), - - check_nof_cols(ColsShown, NofNewCols - 1, NewColFrameIds, NewColIds, NewRowIds, - NofRows, RowHeight, FgColor, BgColor). - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_row_ids([], _LabelIds) -> - []; -update_row_ids([OneRowIds | RemainingRows], [NewElemId | RemainingElemIds]) -> - [OneRowIds ++ [NewElemId] | update_row_ids(RemainingRows, RemainingElemIds)]. - - - - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -update_col_widths(ColsShown, ColWidths, FirstColShown, DefaultColWidth) -> - % What we do here is that we first (if necessary) add default - % column widths to the ColWidth list until it reaches to where - % ColsShown starts (vitually seen). - % In the second step we take the appropriate elements from the - % ColsShown list and add them to the ColWidths list, until it is - % of sufficient length. - % Of course this may seem unnecessary - it would suffice to just - % add default widths to the ColWidths list until it is long enough, - % since the compute_cols_shown function right now just adds default - % width columns to the ColsShown list, when the ColWidths list is empty. - % However, this could change (maybe we some other time want the last - % column to carry all remaining width, instead of adding new columns). - % Besides, we don't like hidden dependencies between functions!!! - - NofColsShown = length(ColsShown), - NewColWidths = set_necessary_col_widths_length(FirstColShown, ColWidths, - DefaultColWidth), - % Now NofVirtualCols will always be equal to, or greater - % than, FirstColShown - 1. - - NofVirtualCols = length(NewColWidths), - NecessaryNofVirtualCols = FirstColShown + (NofColsShown - 1), - if - NecessaryNofVirtualCols > NofVirtualCols -> - TailNo = NofVirtualCols - FirstColShown + 1, % Always >= 0 !!! - NewColWidths ++ safe_nthtail(TailNo, ColsShown); - true -> - NewColWidths - end. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -set_necessary_col_widths_length(FirstColShown, ColWidths, DefaultColWidth) -> - % First check that (length(ColWidths) - FirstColShown) >= -1. - % If not, add elements so the relation holds true! - MissingDefaultWidthElems = FirstColShown - length(ColWidths), - if - MissingDefaultWidthElems > 1 -> - ColWidths ++ lists:duplicate(MissingDefaultWidthElems - 1, - DefaultColWidth); - true -> - ColWidths - end. - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -compute_rows_shown(GridHeight, RowHeight) -> - (GridHeight div RowHeight) + 1. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -compute_cols_shown(FirstColShown, ColWidths, GridWidth, _NofCols, DefaultColWidth) -> - ColWidthsLength = length(ColWidths), - % Normally ColWidths shall be long enough, but just to make sure... - % (We could have chosen to update ColWidths here to, but right now - % we do it instead explicitly when resizeing the grid, changing the - % column size(s), and scrolling horizontally.) - UsedColWidths = if - ColWidthsLength < FirstColShown -> - []; - true -> - safe_nthtail(FirstColShown - 1, ColWidths) - end, - compute_cols_shown(UsedColWidths, GridWidth, DefaultColWidth). - - - - - - -compute_cols_shown(_ColWidths, RemainingWidth, _DefColW) when RemainingWidth =< 0 -> - []; -compute_cols_shown([], RemainingWidth, DefaultColWidth) -> - [DefaultColWidth | compute_cols_shown([], RemainingWidth - DefaultColWidth, - DefaultColWidth)]; -compute_cols_shown([VirtualColWidth | T], RemainingWidth, DefaultColWidth) -> - [VirtualColWidth | compute_cols_shown(T, RemainingWidth - VirtualColWidth, - DefaultColWidth)]. - - - - - -%%%--------------------------------------------------------------------- -%%% END of functions used to compute the part of the grid that has to -%%% be updated, as well as deciding whether a new column has to be added. -%%%--------------------------------------------------------------------- - - - - - - - -%%%--------------------------------------------------------------------- -%%% START of functions used to create the grid (baseframes, columns -%%% and rows), as well as sorting the ID's appropriately. -%%%--------------------------------------------------------------------- - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_base_frame(ParentId, Width, Height, Xpos, Ypos, BgColor) -> - gs:frame(ParentId, [{width, Width}, - {height, Height}, - {x, Xpos}, - {y, Ypos}, - {bg, BgColor} - ]). - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_col_frames(0, _NofRows, _RowHeight, _ParentId, _GridP, ColFrameAcc, LabelAcc) -> - {lists:reverse(ColFrameAcc), lists:reverse(LabelAcc)}; -create_col_frames(N, NofRows, RowHeight, ParentId, GridP, ColFrameAcc, LabelAcc) -> - % Yes, it *IS* inefficient to copy GridP for each loop. - % However, it is only done once, and for a limited number of times, - % and we avoid having a lot of parameters! - #grid_params{bg_color = BgColor, - fg_color = FgColor, - nof_cols = NofCols, - col_width = ColWidth} = GridP, - Xpos = if - N =:= NofCols -> - 0; - true -> - ColWidth + 1 - end, - - ColNo = NofCols - N + 1, - {ColFrameId, LabelIds} = add_one_col_frame(ParentId, ColNo, Xpos, FgColor, - BgColor, NofRows, RowHeight), - create_col_frames(N - 1, NofRows, RowHeight, ColFrameId, GridP, - [ColFrameId | ColFrameAcc], [LabelIds | LabelAcc]). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -add_one_col_frame(ParentId, ColNo, Xpos, FgColor, BgColor, NofRows, RowHeight) -> - ColFrameId = create_one_col_frame(ParentId, Xpos, FgColor), - FirstRowYpos = 1, - FirstRowNo = 1, - LabelIds = create_rows_on_frame(ColFrameId, FirstRowNo, NofRows, RowHeight, - FirstRowYpos, FgColor, BgColor, ColNo, []), - {ColFrameId, LabelIds}. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_one_col_frame(ParentId, Xpos, BgColor) -> - ColFrameWidth = 1200, - ColFrameHeight = 900, - Ypos = 0, - gs:frame(ParentId, [{width, ColFrameWidth}, - {height, ColFrameHeight}, - {x, Xpos}, - {y, Ypos}, - {bg, BgColor} - ]). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -create_rows_on_frame(_FrameId, RowNo, NofRows, _H, _Y, _Fg, _Bg, _ColNo, Acc) when RowNo > NofRows -> - lists:reverse(Acc); -create_rows_on_frame(FrameId, RowNo, NofRows, H, Y, Fg, Bg, ColNo, RAcc) -> - Width = 1200, - R = gs:label(FrameId, [{width, Width}, - {height, H}, - {x, 1}, - {y, Y}, - {bg, Bg}, - {fg, Fg}, - {align, w}, - {buttonpress, true}, - {data, {gridcell, ColNo, RowNo, FrameId}} - ]), - NextRowNo = RowNo + 1, - NextY = Y + H +1, - create_rows_on_frame(FrameId, NextRowNo, NofRows, H, NextY, Fg, Bg, ColNo, - [R | RAcc]). - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -get_row_ids(0, _Cols, RowAcc) -> - RowAcc; -get_row_ids(RowNo, Cols, RowAcc) -> - Row = extract_ids_for_one_row(RowNo, Cols), - get_row_ids(RowNo - 1, Cols, [Row | RowAcc]). - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -extract_ids_for_one_row(_N, []) -> - []; -extract_ids_for_one_row(N, [ColIds | Tail]) -> - [lists:nth(N, ColIds) | extract_ids_for_one_row(N, Tail)]. - - - -%%%--------------------------------------------------------------------- -%%% END of functions used to create the grid. -%%%--------------------------------------------------------------------- - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -safe_nthtail(_, []) -> []; -safe_nthtail(1, [_|T]) -> T; -safe_nthtail(N, [_|T]) when N > 1 -> - safe_nthtail(N - 1, T); -safe_nthtail(0, L) when is_list(L) -> L. diff --git a/lib/tv/src/tv_pg_int_def.hrl b/lib/tv/src/tv_pg_int_def.hrl deleted file mode 100644 index 6f88053d47..0000000000 --- a/lib/tv/src/tv_pg_int_def.hrl +++ /dev/null @@ -1,92 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Internal definitions for the pd part of the table tool. -%%% -%%%********************************************************************* - - --define(GRIDFUNCS, tv_pg_gridfcns). - - - --define(DEFAULT_COLFRAME_HEIGHT, 870). --define(DEFAULT_COLWIDTH, 100). --define(DEFAULT_GRID_BGCOLOR, {255, 255, 255}). % white --define(DEFAULT_GRID_FGCOLOR, {0, 0, 0}). % black --define(GRID_MARK_COLOR, {200, 255, 255}). --define(GRID_FONT, {courier, 12}). - - - --define(DEFAULT_BG_COLOR, {217, 217, 217}). --define(DEFAULT_ROW_COLOR, {178, 34, 34}). % Firebrick! --define(DEFAULT_GRID_COLOR, {0, 0, 0}). --define(LIGHT_GRAY, {226, 226, 226}). --define(DARK_VIOLET, {148, 0, 211}). --define(FIREBRICK, {178, 34, 34}). --define(ANTIQUE_WHITE, {255, 255, 235}). - - - - --record(grid_params, {bg_frame, - fg_frame, - grid_width, - grid_height = ?DEFAULT_COLFRAME_HEIGHT, % Actual height, - % not the height - % shown! - grid_xpos, - grid_ypos, - bg_color = ?DEFAULT_GRID_BGCOLOR, - fg_color = ?DEFAULT_GRID_FGCOLOR, - nof_cols = 10, - nof_rows, - nof_rows_shown, - row_height, - col_width = ?DEFAULT_COLWIDTH, - first_col_shown = 1, - first_row_shown = 1, - max_col_width = 1200, - min_col_width = 5, - col_widths = [], - cols_shown = [], - col_frame_ids = [], - col_ids = [], - row_ids = [], - row_data_list = [], - current_max_value, - lists_as_strings = true - }). - - - --record(mark_params, {cell_id, - virtual_col, - virtual_row - }). - - - - --record(process_variables, {parent_pid, - grid_parent_id, - grid_params = #grid_params{}, - mark_params = #mark_params{} - }). diff --git a/lib/tv/src/tv_poll_dialog.erl b/lib/tv/src/tv_poll_dialog.erl deleted file mode 100644 index e33d398898..0000000000 --- a/lib/tv/src/tv_poll_dialog.erl +++ /dev/null @@ -1,363 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Code for the "set poll interval" dialog with the user. -%%% -%%%********************************************************************* - --module(tv_poll_dialog). --compile([{nowarn_deprecated_function,{gs,button,2}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,radiobutton,2}}, - {nowarn_deprecated_function,{gs,scale,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,2}}]). - - --export([start/1, init/2]). - - - --include("tv_int_msg.hrl"). - - - --define(WINDOW_WIDTH, 305). --define(WINDOW_HEIGHT, 185). - --define(DEFAULT_BG_COLOR, {217, 217, 217}). - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -start(Pos) -> - Pid = self(), - ProcPid = spawn_link(?MODULE, init, [Pid, Pos]), - receive_answer(ProcPid). - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -init(Pid, Pos) -> - process_flag(trap_exit, true), - {ScalePos, ScaleRange, Poll, Color} = case Pos of - infinity -> - {0, {20, 20}, false, {255, 255, 255}}; - _Other -> - {Pos, {20, 300}, true, {0, 0, 0}} - end, - S = gs:start(), - Win = gs:window(S, [{width, ?WINDOW_WIDTH}, - {height, ?WINDOW_HEIGHT}, - {bg, ?DEFAULT_BG_COLOR}, - {title, "[TV] Set Poll Interval"}, - {configure, true}, - {destroy, true} - ]), - - NoPollBtn = gs:radiobutton(Win, [{height, 30}, - {width, 143}, - {x, 10}, - {y, 10}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {value, no_poll}, - {label, {text, "Manual Polling"}}, - {select, not(Poll)} - ]), - - PollBtn = gs:radiobutton(Win, [{height, 30}, - {width, 163}, - {x, 10}, - {y, 60}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {value, poll}, - {label, {text, "Automatic Polling"}}, - {select, Poll} - ]), - - Lbl = gs:label(Win, [{label, {text, "Poll Interval (seconds):"}}, - {align, center}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, Color}, - {width, 183}, - {height, 30}, - {x, 10}, - {y, 100} - ]), - - Scale = gs:scale(Win, [{bg, ?DEFAULT_BG_COLOR}, - {fg, Color}, - {orient, horizontal}, - {range, ScaleRange}, - {pos, ScalePos}, - {width, 285}, - {height, 50}, - {x, 10}, - {y, 130} - ]), - - OkBtn = gs:button(Win, [{label, {text, "OK"}}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, center}, - {width, 60}, - {height, 30}, - {x, 230}, - {y, 10} - ]), - - CancelBtn = gs:button(Win, [{label, {text, "Cancel"}}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0, 0, 0}}, - {align, center}, - {width, 60}, - {height, 30}, - {x, 230}, - {y, 60} - ]), - - gs:config(Win, {map, true}), - browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, CancelBtn, Poll, Pos). - - - - - - - -%%%********************************************************************* -%%% INTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -receive_answer(ProcPid) -> - receive_answer(ProcPid, undefined, undefined, undefined, undefined). - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg) -> - receive Msg -> - case Msg of - - {browser, ProcPid, cancel} -> - PcPid = self(), - PcPid ! DataReqMsg, - PcPid ! WinConfMsg, - PcPid ! MarkedRowMsg, - PcPid ! SubsetMsg, - cancel; - - {browser, ProcPid, {true, PollInterval}} -> - PcPid = self(), - PcPid ! DataReqMsg, - PcPid ! WinConfMsg, - PcPid ! MarkedRowMsg, - PcPid ! SubsetMsg, - PollInterval; - - {browser, ProcPid, {false, _Pollinterval}} -> - PcPid = self(), - PcPid ! DataReqMsg, - PcPid ! WinConfMsg, - PcPid ! MarkedRowMsg, - PcPid ! SubsetMsg, - infinity; - - #pc_data_req{} -> - receive_answer(ProcPid, Msg, WinConfMsg, MarkedRowMsg, SubsetMsg); - - #pc_win_conf{} -> - receive_answer(ProcPid, DataReqMsg, Msg, MarkedRowMsg, SubsetMsg); - - #pc_marked_row{} -> - receive_answer(ProcPid, DataReqMsg, WinConfMsg, Msg, SubsetMsg); - - #dbs_subset{} -> - receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, Msg); - - #pc_menu_msg{data = exit_button} -> - self() ! Msg, - cancel; - - #pc_set_sorting_mode{sender = Sender} -> - Sender ! #pd_ignore{sender = self()}, - ProcPid ! raise_and_beep, - receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg); - - {'EXIT', _Sender, _Reason} -> - self() ! Msg, - cancel; - - _Other -> - ProcPid ! raise_and_beep, - receive_answer(ProcPid, DataReqMsg, WinConfMsg, MarkedRowMsg, SubsetMsg) - end - end. - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, CancelBtn, Poll, Pos) -> - receive - {gs, Scale, click, _, [NewPos | _]} -> - browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, - CancelBtn, Poll, NewPos); - - {gs, NoPollBtn, click, _, _} -> - gs:config(Lbl, [{fg, {255, 255, 255}}]), - gs:config(Scale, [{fg, {255, 255, 255}}, {pos, 0}, {range, {20, 20}}]), - receive - {gs, Scale, click, _, _} -> - done - after 500 -> - done - end, - browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, - CancelBtn, false, Pos); - - {gs, PollBtn, click, _, _} -> - gs:config(Lbl, [{fg, {0, 0, 0}}]), - gs:config(Scale, [{fg, {0, 0, 0}}, {pos, Pos}, {range, {20, 300}}]), - receive - {gs, Scale, click, _, _} -> - done - after 500 -> - done - end, - browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, - CancelBtn, true, Pos); - - {gs, OkBtn, click, _, _} -> - Pid ! {browser, self(), {Poll, Pos}}; - - {gs, CancelBtn, click, _, _} -> - Pid ! {browser, self(), cancel}; - - {gs, _, destroy, _, _} -> - Pid ! {browser, self(), cancel}; - - - {gs, Win, configure, _, _} -> - gs:config(Win, [{width, ?WINDOW_WIDTH}, - {height, ?WINDOW_HEIGHT} - ]), - browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, - CancelBtn, Poll, Pos); - - - raise_and_beep -> - gs:config(Win, [raise, - beep]), - browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, - CancelBtn, Poll, Pos); - - - {'EXIT', _Sender, _Reason} -> - Pid ! {browser, self(), cancel}; - - - _Other -> - io:format("Poll dialog received message ~w ~n", [_Other]), - browser_loop(Pid, Win, NoPollBtn, PollBtn, Lbl, Scale, OkBtn, - CancelBtn, Poll, Pos) - - end. - diff --git a/lib/tv/src/tv_pw.erl b/lib/tv/src/tv_pw.erl deleted file mode 100644 index 5f88c9f1fd..0000000000 --- a/lib/tv/src/tv_pw.erl +++ /dev/null @@ -1,328 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Code for pw, the window controlling part of the table tool. -%%% -%%%********************************************************************* - - --module(tv_pw). --compile([{nowarn_deprecated_function,{gs,config,2}}]). - - - --export([pw/1]). - - - - --include("tv_int_def.hrl"). --include("tv_int_msg.hrl"). --include("tv_pw_int_def.hrl"). - - - - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: pw. -%% -%% Return Value: None. -%% -%% Description: Process controlling the graphical window, as well as the -%% menubuttons. -%% -%% Parameters: None. -%%====================================================================== - - - -pw(Master) -> - process_flag(trap_exit, true), - ProcVars = #process_variables{master_pid = Master}, - blocked(ProcVars). - - - - - - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - - - -%%====================================================================== -%% Function: blocked. -%% -%% Return Value: None. -%% -%% Description: When started or explicitly blocked, pw enters this state, -%% where nothing is performed until the module explicitly is -%% deblocked. -%% -%% Parameters: -%%====================================================================== - - -blocked(ProcVars) -> - receive - Msg -> - case Msg of - #pw_deblock{} -> - deblock(Msg, ProcVars); - _Other -> - blocked(ProcVars) - end - end. - - - - - - - - - -%%====================================================================== -%% Function: deblocked. -%% -%% Return Value: None. -%% -%% Description: When deblocked, a window shall be created according to -%% specification received in pw_deblock message. -%% -%% Parameters: Rec: received pw_deblock message. -%%====================================================================== - - - -deblock(Msg, ProcVars) -> - #process_variables{window_params = WinP, - menu_params = MenuP} = ProcVars, - - NewWinP = ?WIN_FUNC_FILE:create_window(Msg, WinP), - NewMenuP = ?WIN_FUNC_FILE:create_menubar(NewWinP, MenuP), - - Sender = Msg#pw_deblock.sender, - Sender ! #pw_deblock_cfm{sender = self(), - win_id = NewWinP#window_params.window_id - }, - - NewProcVars = ProcVars#process_variables{window_params = NewWinP, - menu_params = NewMenuP - }, - deblocked_loop(NewProcVars). - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -deblocked_loop(ProcVars) -> - receive - Msg -> - case Msg of - - {gs, Id, Event, Data, Args} -> - NewProcVars = gs_messages({Id, Event, Data, Args}, ProcVars), - deblocked_loop(NewProcVars); - - % Messages from pc! - #pw_select_menu{menu=Menu} -> - gs:config(Menu, [{select,true}]), - deblocked_loop(ProcVars); - - #pw_create_menu{} -> - NewProcVars = ?WIN_FUNC_FILE:create_menu(Msg, ProcVars), - % Send confirmation... - Sender = Msg#pw_create_menu.sender, - Sender ! #pw_create_menu_cfm{sender = self()}, - deblocked_loop(NewProcVars); - - #pw_set_window_title{win_title = WinTitle} -> - WinP = ProcVars#process_variables.window_params, - gs:config(WinP#window_params.window_id, [{title, "[TV] " ++ WinTitle}]), - NewWinP = WinP#window_params{window_title = WinTitle}, - NewProcVars = ProcVars#process_variables{window_params = NewWinP}, - deblocked_loop(NewProcVars); - - #pw_deblock{} -> - deblock(Msg, ProcVars); - - % Exit signals! - {'EXIT', Pid, Reason} -> - MasterPid = ProcVars#process_variables.master_pid, - exit_signals({Pid, Reason}, MasterPid), - deblocked_loop(ProcVars); - - _Other -> - deblocked_loop(ProcVars) - - end - end. - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -exit_signals(Exit_info, MasterPid) -> - case Exit_info of - {MasterPid, _Reason} -> % When from master, just quit! - exit(normal); - _Other -> - done - end. - - - - - - - - - - -%%====================================================================== -%% Function: -%% -%% Return Value: -%% -%% Description: -%% -%% Parameters: -%%====================================================================== - - -gs_messages(Msg, ProcVars) -> - MasterPid = ProcVars#process_variables.master_pid, - case Msg of - - {_Id, click, Data, _Args} -> - MasterPid ! #pc_menu_msg{sender = self(), - data = Data}, - ProcVars; - - {_Win, keypress, _Data, [Key, _ , _, 1 | _T]} -> - MenuP = ProcVars#process_variables.menu_params, - ShortcutList = MenuP#menu_params.shortcuts, - send_shortcut_data(Key, ShortcutList, MasterPid), - ProcVars; - - Msg0 = {Win, configure, _, _} -> - {Win, configure, _, [W, H | _T]} = flush_msgs(Msg0), - WinP = ProcVars#process_variables.window_params, - #window_params{window_id = WindowId, - min_window_width = MinAllowedWidth, - min_window_height = MinAllowedHeight} = WinP, - FinalWidth = ?COMM_FUNC_FILE:max(W, MinAllowedWidth), - FinalHeight = ?COMM_FUNC_FILE:max(H, MinAllowedHeight), - ?WIN_FUNC_FILE:resize_window(WindowId, FinalWidth, FinalHeight), - MasterPid ! #pc_win_conf{sender = self(), - width = FinalWidth, - height = FinalHeight}, - NewWinP = WinP#window_params{window_width = FinalWidth, - window_height = FinalHeight - }, - ProcVars#process_variables{window_params = NewWinP}; - - {_Win, destroy, _Data, _Args} -> - exit(normal); - - _Other -> - ProcVars - end. - -flush_msgs(Msg0 = {Win, Op, _, _}) -> - receive {gs, Win,Op,D,P} -> - flush_msgs({Win,Op,D,P}) - after 200 -> - Msg0 - end. - -send_shortcut_data(_Key, [], _MasterPid) -> - done; -send_shortcut_data(Key, ShortcutList, MasterPid) -> - case lists:keysearch(Key, 1, ShortcutList) of - {value, {Key, Data}} -> - MasterPid ! #pc_menu_msg{sender = self(), - data = Data}; - false -> - done - end. - - - - - - - - - - - - - - - diff --git a/lib/tv/src/tv_pw_int_def.hrl b/lib/tv/src/tv_pw_int_def.hrl deleted file mode 100644 index fabfbc2762..0000000000 --- a/lib/tv/src/tv_pw_int_def.hrl +++ /dev/null @@ -1,55 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Internal definitions for the pw part of the table tool. -%%% -%%%********************************************************************* - --define(WIN_FUNC_FILE, tv_pw_window). - - - --define(DEFAULT_WINDOW_WIDTH, 1000). --define(DEFAULT_WINDOW_HEIGHT, 800). --define(DEFAULT_MIN_WINDOW_WIDTH, 50). --define(DEFAULT_MIN_WINDOW_HEIGHT, 50). - - - --record(window_params, {window_id, - window_title, - window_width, - window_height, - min_window_width, - min_window_height - }). - - --record(menu_params, {menubar_id, - shortcuts - }). - - - - - --record(process_variables, {master_pid, - window_params = #window_params{}, - menu_params = #menu_params{} - }). diff --git a/lib/tv/src/tv_pw_window.erl b/lib/tv/src/tv_pw_window.erl deleted file mode 100644 index 81f29dc41c..0000000000 --- a/lib/tv/src/tv_pw_window.erl +++ /dev/null @@ -1,277 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% -%%%********************************************************************* -%%% -%%% Description: Part of the pw component controlling the graphics. -%%% -%%%********************************************************************* - - --module(tv_pw_window). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,menuitem,3}}, - {nowarn_deprecated_function,{gs,start,0}}]). - - - --export([create_window/2, - resize_window/3, - create_menubar/2, - create_menu/2]). - - - - --include("tv_int_def.hrl"). --include("tv_int_msg.hrl"). --include("tv_pw_int_def.hrl"). - - - --define(DEFAULT_BG_COLOR, {217, 217, 217}). - - - - -%%%********************************************************************* -%%% EXTERNAL FUNCTIONS -%%%********************************************************************* - - - - -%%====================================================================== -%% Function: create_menu. -%% -%% Return Value: Identifier to the menu created. -%% -%% Description: Creates a menu in the window. -%% -%% Parameters: Win: ID of parent window. -%%====================================================================== - - -create_menu(Msg, ProcVars) -> - MenuP = ProcVars#process_variables.menu_params, - MenubarId = MenuP#menu_params.menubar_id, - ShortcutList = MenuP#menu_params.shortcuts, - - #pw_create_menu{menutitle = MenuTitle, - title_acc_pos = TitleAccPos, - menulist = MenuList} = Msg, - - % Create the menubutton! - Label = def_or_param(MenuTitle, "NoName"), - Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}, % firebrick - % {font, {helvetica, bold, 14}}, - {label, {text, Label}}, - {underline, TitleAccPos} - ]), - - % Create the actual menu! - Menu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}} - ]), - - NewMenuP = MenuP#menu_params{shortcuts = ShortcutList ++ create_menulist(MenuList, Menu)}, - - ProcVars#process_variables{menu_params = NewMenuP}. - - - - - - - -create_menubar(WinP, MenuP) -> - WindowId = WinP#window_params.window_id, - MenubarId = gs:create(menubar, WindowId, [{bg, ?DEFAULT_BG_COLOR} - ]), - Mbutt = gs:create(menubutton, MenubarId, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}, % firebrick - % {font, {helvetica, bold, 14}}, - {label, {text, " Help "}}, - {underline, 1}, - {side, right} - ]), - - % Create the actual menu! - Menu = gs:create(menu, Mbutt, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}} - ]), - MenuP#menu_params{menubar_id = MenubarId, - shortcuts = create_menulist([{" Help ", normal, help_button, 1, h}, - separator, - {" OTP Documentation ",normal,otp_help_button,1,no_char}], - Menu) ++ [{x,exit_button}, {'X',exit_button}] - }. - - - - - -create_window(Msg, WinP) -> - #pw_deblock{win_title = Title, - win_width = Width, - win_height = Height, - min_win_width = MinWidth} = Msg, - - - S = gs:start(), - WindowTitle = def_or_param(Title, "NoName"), - WindowMinWidth = def_or_param(MinWidth, ?DEFAULT_MIN_WINDOW_WIDTH), - WindowMinHeight = def_or_param(MinWidth, ?DEFAULT_MIN_WINDOW_HEIGHT), - WindowWidth = ?COMM_FUNC_FILE:max(def_or_param(Width, - ?DEFAULT_WINDOW_WIDTH), - WindowMinWidth), - WindowHeight = ?COMM_FUNC_FILE:max(def_or_param(Height, - ?DEFAULT_WINDOW_HEIGHT), - WindowMinHeight), - - - WindowId = gs:create(window, S, [{title, WindowTitle}, - {width, WindowWidth}, - {height, WindowHeight}, - {bg, ?DEFAULT_BG_COLOR}, - {configure, true}, - {destroy, true}, - {keypress, true}, - {cursor, arrow} - ]), - - WinP#window_params{window_id = WindowId, - window_title = WindowTitle, - window_width = WindowWidth, - window_height = WindowHeight, - min_window_width = WindowMinWidth, - min_window_height = WindowMinHeight - }. - - - - - - - -resize_window(WindowId, NewWidth, NewHeight) -> - gs:config(WindowId, [{width, NewWidth}, - {height, NewHeight} - ]). - - - - -%%%******************************************************************** -%%% INTERNAL FUNCTIONS -%%%******************************************************************** - - - -create_menulist([], _Menu) -> - []; -create_menulist(List, Menu) -> - MaxLength = get_length_of_longest_menu_text(List, 0), - create_menulist(List, Menu, MaxLength). - - - - -create_menulist([], _Menu, _MaxLength) -> - []; -create_menulist([{Text, Type, Data, AccCharPos, ShortcutChar} | Rest], Menu, MaxLength) -> - ShortcutCapitalChar = - if - ShortcutChar =:= no_char -> - no_char; - true -> - CharAsciiValue = lists:nth(1, atom_to_list(ShortcutChar)), - CapitalCharValue = CharAsciiValue - ($a - $A), - list_to_atom([CapitalCharValue]) - end, - - FinalText = if - ShortcutChar =:= no_char -> - Text; - true -> - Text ++ lists:duplicate(MaxLength - length(Text), " ") ++ - " Ctrl+" ++ atom_to_list(ShortcutCapitalChar) ++ " " - end, - TypeAndSel = - case Type of - normal -> - [{itemtype, normal}]; - {radio, Selected, Group} -> - [{itemtype, radio}, - {select, Selected}, - {group, Group}]; - {check, Selected} -> - [{itemtype, check}, - {select, Selected}] - end, - gs:menuitem(Data, Menu, [{bg, ?DEFAULT_BG_COLOR}, - {fg, {178, 34, 34}}, - {label, {text, FinalText}}, - {underline, AccCharPos}, - {data, Data} | - TypeAndSel - ]), - [{ShortcutChar, Data}, {ShortcutCapitalChar, Data} | create_menulist(Rest, Menu, MaxLength)]; -create_menulist([separator | Rest], Menu, MaxLength) -> - gs:create(menuitem, Menu, [{itemtype, separator} - ]), - create_menulist(Rest, Menu, MaxLength). - - - - - - - -get_length_of_longest_menu_text([], MaxLength) -> - MaxLength; -get_length_of_longest_menu_text([{Text, _Type, _Data, _APos, _SChar} | Rest], CurrMax) -> - L = length(Text), - if - L > CurrMax -> - get_length_of_longest_menu_text(Rest, L); - true -> - get_length_of_longest_menu_text(Rest, CurrMax) - end; -get_length_of_longest_menu_text([separator | Rest], CurrMax) -> - get_length_of_longest_menu_text(Rest, CurrMax). - - - - - -def_or_param(undefined, DefaultValue) -> - DefaultValue; -def_or_param(Param, _Default) -> - Param. - - - - - - - - - - diff --git a/lib/tv/src/tv_rec_edit.erl b/lib/tv/src/tv_rec_edit.erl deleted file mode 100644 index 3f9ea8b5f5..0000000000 --- a/lib/tv/src/tv_rec_edit.erl +++ /dev/null @@ -1,754 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_rec_edit). --compile([{nowarn_deprecated_function,{gs,button,2}}, - {nowarn_deprecated_function,{gs,button,3}}, - {nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,entry,3}}, - {nowarn_deprecated_function,{gs,frame,2}}, - {nowarn_deprecated_function,{gs,frame,3}}, - {nowarn_deprecated_function,{gs,label,2}}, - {nowarn_deprecated_function,{gs,read,2}}, - {nowarn_deprecated_function,{gs,start,0}}, - {nowarn_deprecated_function,{gs,window,3}}]). - - - --export([start/5, - start/6, - init/8 - ]). - - --include("tv_int_def.hrl"). - - - --define(DEFAULT_BG_COLOR, {217,217,217}). - --define(WIN_WIDTH, 375). --define(WIN_HEIGHT, 341). --define(ETS_WIN_HEIGHT, 154). - --define(FRAME_WIDTH, 375). --define(FRAME_HEIGHT, 265). --define(ETS_FRAME_HEIGHT, 74). - --define(MAX_LABEL_WIDTH, 165). --define(X0, 15). --define(Y0, 20). --define(LABEL_HEIGHT, 30). --define(ENTRY_HEIGHT, 30). --define(FONT, {screen,12}). --define(NEXT_BTN_WIDTH, 57). --define(NEXT_BTN_HEIGHT, 22). --define(NEXT_BTN_FG, {178,34,34}). --define(INSERT_BTN_WIDTH, 80). --define(INSERT_BTN_HEIGHT, 30). --define(INSERT_BTN_DIST_BETWEEN, 23). --define(INSERT_BTN_DIST_FROM_BOTTOM, 23). - - - - - -start(TableType, TableName, AttributeList, ListsAsStr, ErrMsgMode) -> - AttributeValues = lists:duplicate(length(AttributeList), undefined), - spawn_link(?MODULE, init, [TableType, TableName, AttributeList, - AttributeValues, ListsAsStr, ErrMsgMode, self(), true]). - - - -start(TableType, TableName, AttributeList, AttributeValues, ListsAsStr, ErrMsgMode) -> - spawn_link(?MODULE, init, [TableType, TableName, AttributeList, - AttributeValues, ListsAsStr, ErrMsgMode, self(), false]). - - - - -init(TableType,TableName,AttributeList,AttributeValues,ListsAsStr,ErrMsgMode,MasterPid,Insert) -> - process_flag(trap_exit, true), - put(error_msg_mode, ErrMsgMode), - Frames = create_window(TableType, TableName, AttributeList, AttributeValues, - ListsAsStr, Insert), - loop(TableType, TableName, Frames, AttributeList, AttributeValues, MasterPid, ListsAsStr). - - - - - -loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr) -> - receive - - {gs, insert, click, Insert, _Args} -> - gs:config(win, [{cursor, busy}]), - case get_record(TabType, TabName, AttrList, AttrList, Frames) of - {ok, NewRec} -> - case Insert of - insert -> - MPid ! {new_object, NewRec}; - change -> - MPid ! {updated_object, NewRec} - end; - error -> - done - end, - gs:config(win, [{cursor, arrow}]), - loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); - - - {gs, cancel, click, _Data, _Args} -> - exit(normal); - - - {gs, reset, click, _Data, _Args} -> - gs:config(win, [{cursor, busy}]), - set_entry_values(TabType, AttrList, AttrVals, ListsAsStr), - gs:config(win, [{cursor, arrow}]), - loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); - - - - {gs, EntryId, keypress, _Data, ['Tab', _No, 0 | _T]} -> - {_Term, {NextEntry, NextFrame}} = - check_entry_content(EntryId, AttrList, Frames, forward), - case NextEntry of - EntryId -> - gs:config(NextEntry, [{setfocus, true}]); - _OtherId -> - gs:config(NextFrame, [raise]), - gs:config(NextEntry, [{setfocus, true}, - {select, {0,100000000}}]) - end, - loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); - - - {gs, EntryId, keypress, _Data, ['Down' | _T]} -> - {_Term, {NextEntry, NextFrame}} = - check_entry_content(EntryId, AttrList, Frames, forward), - case NextEntry of - EntryId -> - gs:config(NextEntry, [{setfocus, true}]); - _OtherId -> - gs:config(NextFrame, [raise]), - gs:config(NextEntry, [{setfocus, true}, - {select, {0,100000000}}]) - end, - loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); - - - {gs, EntryId, keypress, _Data, ['Tab', _No, 1 | _T]} -> - {_Term, {NextEntry, NextFrame}} = - check_entry_content(EntryId, AttrList, Frames, backward), - gs:config(NextFrame, [raise]), - case NextEntry of - EntryId -> - gs:config(NextEntry, [{setfocus, true}]); - _OtherId -> - gs:config(NextFrame, [raise]), - gs:config(NextEntry, [{setfocus, true}, - {select, {0,100000000}}]) - end, - loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); - - - {gs, EntryId, keypress, _Data, ['Up' | _T]} -> - {_Term, {NextEntry, NextFrame}} = - check_entry_content(EntryId, AttrList, Frames, backward), - gs:config(NextFrame, [raise]), - case NextEntry of - EntryId -> - gs:config(NextEntry, [{setfocus, true}]); - _OtherId -> - gs:config(NextFrame, [raise]), - gs:config(NextEntry, [{setfocus, true}, - {select, {0,100000000}}]) - end, - loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); - - - {gs, Id, keypress, _Data, ['Return' | _T]} -> - OldCursor = gs:read(Id, cursor), - gs:config(Id, [{cursor, busy}]), - gs:config(win, [{cursor, busy}]), - Insert = gs:read(insert, data), - case get_record(TabType, TabName, AttrList, AttrList, Frames) of - {ok, NewRec} -> - case Insert of - insert -> - MPid ! {new_object, NewRec}; - change -> - MPid ! {updated_object, NewRec} - end; - error -> - done - end, - gs:config(win, [{cursor, arrow}]), - gs:config(Id, [{cursor, OldCursor}]), - loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); - - - - {gs, _Id, click, FrameNo, _Args} -> - gs:config(lists:nth(FrameNo, Frames), [raise]), - loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); - - - {gs, win, configure, _Data, [Width | _T]} -> - resize_window(TabType, lists:max([Width, ?WIN_WIDTH]), Frames, AttrList), - loop(TabType, TabName, Frames, AttrList, AttrVals, MPid, ListsAsStr); - - - {gs, win, destroy, _Data, _Args} -> - exit(normal); - - - insert_mode -> - NewAttrVals = lists:duplicate(length(AttrList), undefined), - set_entry_values(TabType, AttrList, NewAttrVals, ListsAsStr), - loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr); - - - {update_mode, Obj} -> - NewAttrVals = - case TabType of - mnesia -> - case Obj of - undefined -> - lists:duplicate(length(AttrList), undefined); - _AnyRec -> - tl(tuple_to_list(Obj)) - end; - ets -> - [Obj] - end, - set_entry_values(TabType, AttrList, NewAttrVals, ListsAsStr), - loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr); - - - {reset_info, Obj} -> - %% Info to use, instead of old info, when reset button is pressed. - NewAttrVals = - case TabType of - mnesia -> - case Obj of - undefined -> - lists:duplicate(length(AttrList), undefined); - _AnyRec -> - tl(tuple_to_list(Obj)) - end; - ets -> - [Obj] - end, - loop(TabType, TabName, Frames, AttrList, NewAttrVals, MPid, ListsAsStr); - - - raise -> - gs:config(win, [raise]), - loop(TabType, TabName, Frames, AttrList,AttrVals, MPid, ListsAsStr); - - - {'EXIT', _Pid, _Reason} -> - exit(normal); - - - _Other -> - loop(TabType, TabName, Frames, AttrList,AttrVals, MPid, ListsAsStr) - end. - - - - -resize_window(TabType, WinWidth, Frames, AttrList) -> - WinHeight = - case TabType of - mnesia -> - get_window_height(length(AttrList)); - ets -> - ?ETS_WIN_HEIGHT - end, - gs:config(win, [{width, WinWidth}, - {height, WinHeight} - ]), - FrameWidth = WinWidth, - LblL = lists:map(fun(H) -> - gs:config(H, [{width, FrameWidth}]), - {LblW, BId, NId} = gs:read(H, data), - XNext = get_next_btn_xpos(FrameWidth), - XBack = XNext - ?NEXT_BTN_WIDTH, - gs:config(BId, [{x, XBack}]), - gs:config(NId, [{x, XNext}]), - LblW - end, - Frames), - LblW = hd(LblL), - EntryW = get_entry_width(TabType, FrameWidth, LblW), - lists:foreach(fun(H) -> - gs:config(H, [{width, EntryW}]) - end, - AttrList), - gs:config(btnframe, [{width, FrameWidth}]), - {XInsert, XCancel, XReset} = get_insert_btn_coords(WinWidth), - gs:config(insert, [{x, XInsert}]), - gs:config(cancel, [{x, XCancel}]), - gs:config(reset, [{x, XReset}]). - - - - -check_entry_content(EntryId, AttributeList, Frames, Direction) -> - EditedStr = gs:read(EntryId, text), - case tv_db_search:string_to_term(EditedStr) of - {error, {_Reason, Msg}} -> - gs:config(EntryId, [beep]), - tv_utils:notify(gs:start(), "TV Notification", Msg), - {error, {EntryId, no_matter}}; - {ok, NewTerm} -> - {{ok,NewTerm}, get_next_entry_id(EntryId, AttributeList, Frames, Direction)} - end. - - - - -get_next_entry_id(EntryId, AttributeList, Frames, Direction) -> - OldPos = get_pos(EntryId, AttributeList), - MaxPos = length(AttributeList), - NewPos = case Direction of - forward when OldPos < MaxPos -> - OldPos + 1; - forward -> - 1; - backward when OldPos > 1 -> - OldPos - 1; - backward -> - MaxPos; - stationary -> - OldPos - end, - FramePos = get_next_frame_id(NewPos), - {lists:nth(NewPos, AttributeList), lists:nth(FramePos, Frames)}. - - - - -get_next_frame_id(Pos) -> - case Pos rem 5 of - 0 -> - Pos div 5; - _Other -> - (Pos div 5) + 1 - end. - - - - -get_record(TabType, TabName, AttrList, AttrList, Frames) -> - case get_record(AttrList, AttrList, Frames, []) of - {ok, RecList} -> - case TabType of - mnesia -> - NewRecList = [TabName | RecList], - {ok, list_to_tuple(NewRecList)}; - ets -> - {ok, hd(RecList)} %% Only one element, a tuple! - end; - error -> - error - end. - - - - -get_record([H | T], AttrList, Frames, Acc) -> - case check_entry_content(H, AttrList, Frames, forward) of - {{ok, NewTerm}, _PosTuple} -> - get_record(T, AttrList, Frames, [NewTerm | Acc]); - {error, _PosTuple} -> - {EntryId, FrameId} = get_next_entry_id(H, AttrList, Frames, stationary), - gs:config(FrameId, [raise]), - gs:config(EntryId, [{setfocus, true}]), - error - end; -get_record([], _AttrList, _Frames, Acc) -> - {ok, lists:reverse(Acc)}. - - - - - - -get_pos(Elem, L) -> - get_pos(Elem, L, 1). - - -get_pos(Elem, [Elem | _T], N) -> - N; -get_pos(Elem, [_H | T], N) -> - get_pos(Elem, T, N + 1). - - - - -create_window(mnesia, TableName, AttrList, AttrValues, ListsAsStr, Insert) -> - NofAttr = length(AttrList), - NofFrames = - case NofAttr rem 5 of - 0 -> - NofAttr div 5; - _Rem -> - (NofAttr div 5) + 1 - end, - - WinHeight = get_window_height(NofAttr), - FrameHeight = get_frame_height(NofAttr), - - Attr = get_longest_attribute_name(AttrList), - LabelWidth = lists:min([?MAX_LABEL_WIDTH, - element(1, gs:read(gs:start(), - {font_wh, {?FONT, atom_to_list(Attr)}}))]), - - gs:window(win, gs:start(), [{width, ?WIN_WIDTH}, - {height, WinHeight}, - {title, "[TV] Record Editor: '" ++ - atom_to_list(TableName) ++ "'"}, - {bg, ?DEFAULT_BG_COLOR}, - {configure, true}, - {destroy, true}, - {cursor, arrow} - ]), - - create_insert_and_cancel_btns(Insert, WinHeight, FrameHeight), - FrameList = create_frames(NofFrames, LabelWidth, AttrList, AttrValues, NofFrames, - ListsAsStr, FrameHeight), - gs:config(hd(FrameList), [raise]), - gs:config(hd(AttrList), [{setfocus, true}, - {select, {0,100000000}}]), - gs:config(win, [{map,true}]), - FrameList; -create_window(ets, TableName, [Attr], [AttrVal], ListsAsStr, Insert) -> - gs:window(win, gs:start(), [{width, ?WIN_WIDTH}, - {height, ?ETS_WIN_HEIGHT}, - {title, "[TV] Tuple Editor, table '" ++ - atom_to_list(TableName) ++ "'"}, - {bg, ?DEFAULT_BG_COLOR}, - {configure, true}, - {destroy, true}, - {cursor, arrow} - ]), - - F = gs:frame(win, [{width, ?FRAME_WIDTH}, - {height, ?ETS_FRAME_HEIGHT}, - {x, 0}, - {y, 0}, - {bg, ?DEFAULT_BG_COLOR}, - {bw,2}, - {data, {0, undefined, undefined}} - ]), - - create_insert_and_cancel_btns(Insert, ?ETS_WIN_HEIGHT, ?ETS_FRAME_HEIGHT), - - EntryW = get_entry_width(ets, ?FRAME_WIDTH, 0), - EntryX = ?X0 - 2, - - EntryText = - case AttrVal of - undefined -> - ""; - _OtherVal -> - case ListsAsStr of - true -> - tv_io_lib:format("~p", [AttrVal]); - false -> - lists:flatten(io_lib:write(AttrVal)) - end - end, - gs:entry(Attr, F, [{width, EntryW}, - {height, ?LABEL_HEIGHT}, - {x, EntryX}, - {y, ?Y0}, - {bg, {255,255,255}}, - {fg, {0,0,0}}, - {bw, 1}, - {font, ?FONT}, - {justify, left}, - {text, EntryText}, - {cursor, text}, - {setfocus, true}, - {enable, true}, - {keypress,true}, - {select, {0,100000000}} - ]), - gs:config(win, [{map,true}]), - [F]. - - - - -get_insert_btn_coords(WinWidth) -> - Middle = round(WinWidth / 2), - XInsert = Middle - round(1.5 * ?INSERT_BTN_WIDTH) - ?INSERT_BTN_DIST_BETWEEN, - XCancel = Middle - round(0.5 * ?INSERT_BTN_WIDTH), - XReset = Middle + round(0.5 * ?INSERT_BTN_WIDTH) + ?INSERT_BTN_DIST_BETWEEN, - {XInsert, XCancel, XReset}. - - - - -create_insert_and_cancel_btns(Insert, WinHeight, FrameHeight) -> - LowerFrameHeight = WinHeight - FrameHeight, - Y = ?INSERT_BTN_DIST_FROM_BOTTOM, - {XInsert, XCancel, XReset} = get_insert_btn_coords(?WIN_WIDTH), - - {InsertBtnText, InsertBtnData} = - case Insert of - true -> - {"Insert", insert}; - false -> - {"Change", change} - end, - - gs:frame(btnframe, win, [{width, ?FRAME_WIDTH}, - {height, LowerFrameHeight}, - {x, 0}, - {y, FrameHeight}, - {bg, ?DEFAULT_BG_COLOR}, - {bw,2} - ]), - gs:button(insert, btnframe, [{width, ?INSERT_BTN_WIDTH}, - {height, ?INSERT_BTN_HEIGHT}, - {x, XInsert}, - {y, Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {font, ?FONT}, - {label, {text, InsertBtnText}}, - {align, center}, - {data, InsertBtnData} - ]), - gs:button(cancel, btnframe, [{width, ?INSERT_BTN_WIDTH}, - {height, ?INSERT_BTN_HEIGHT}, - {x, XCancel}, - {y, Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {font, ?FONT}, - {label, {text, "Cancel"}}, - {align, center} - ]), - gs:button(reset, btnframe, [{width, ?INSERT_BTN_WIDTH}, - {height, ?INSERT_BTN_HEIGHT}, - {x, XReset}, - {y, Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {font, ?FONT}, - {label, {text, "Reset"}}, - {align, center} - ]). - - - - - -create_frames(0, _LblW, _AttrList, _AttrValues, _NofFrames, _ListsAsStr, _FrameHeight) -> - []; -create_frames(N, LblW, AttrList, AttrValues, NofFrames, ListsAsStr, FrameHeight) -> - F = gs:frame(win, [{width, ?FRAME_WIDTH}, - {height, FrameHeight}, - {x, 0}, - {y, 0}, - {bg, ?DEFAULT_BG_COLOR}, - {bw,2} - ]), - {BId, NId} = create_back_and_next_btns(F, 5, N, NofFrames), - gs:config(F, [{data, {LblW, BId, NId}}]), - {RemAttrList, RemAttrValues} = - create_labels_and_entries(5, AttrList, AttrValues, LblW, F, ListsAsStr), - [F | create_frames(N - 1,LblW,RemAttrList,RemAttrValues,NofFrames,ListsAsStr,FrameHeight)]. - - - - - - -create_back_and_next_btns(FrameId, NofEntries, FrameNo, NofFrames) -> - Y = ?Y0 + NofEntries * (?LABEL_HEIGHT + 10) + 8, - XNext = get_next_btn_xpos(?FRAME_WIDTH), - XBack = XNext - ?NEXT_BTN_WIDTH, - DataNext = (NofFrames - FrameNo + 1) + 1, - DataBack = (NofFrames - FrameNo + 1) - 1, - BId = - if - DataBack =< 0 -> - undefined; - true -> - gs:button(FrameId, [{width, ?NEXT_BTN_WIDTH}, - {height, ?NEXT_BTN_HEIGHT}, - {x, XBack}, - {y, Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, ?NEXT_BTN_FG}, - {font, ?FONT}, - {align, center}, - {label, {text, "< Back"}}, - %% {underline, 2}, - {data, DataBack} - ]) - end, - NId = - if - DataNext > NofFrames -> - undefined; - true -> - gs:button(FrameId, [{width, ?NEXT_BTN_WIDTH}, - {height, ?NEXT_BTN_HEIGHT}, - {x, XNext}, - {y, Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, ?NEXT_BTN_FG}, - {font, ?FONT}, - {align, center}, - {label, {text, " Next >"}}, - %% {underline, 1}, - {data, DataNext} - ]) - end, - {BId, NId}. - - - - -get_next_btn_xpos(FrameWidth) -> - FrameWidth - ?X0 - ?NEXT_BTN_WIDTH. - - - -get_entry_width(TableType, FrameWidth, LblWidth) -> - HorizontalSpacing = - case TableType of - mnesia -> - 10; - ets -> - 0 - end, - FrameWidth - LblWidth - 2 * ?X0 - HorizontalSpacing. - - - -create_labels_and_entries(N, [H | T], [VH | VT], LblW, F, ListsAsStr) when N > 0 -> - Y = ?Y0 + (5 - N) * (?LABEL_HEIGHT + 10), - EntryW = get_entry_width(mnesia, ?FRAME_WIDTH, LblW), - EntryX = ?FRAME_WIDTH - EntryW - ?X0 - 2, - - EntryText = - case ListsAsStr of - true -> - tv_io_lib:format("~p", [VH]); - false -> - lists:flatten(io_lib:write(VH)) - end, - gs:label(F, [{width, LblW}, - {height, ?LABEL_HEIGHT}, - {x, ?X0}, - {y, Y}, - {bg, ?DEFAULT_BG_COLOR}, - {fg, {0,0,0}}, - {align,w}, - {font, ?FONT}, - {label, {text, atom_to_list(H)}} - ]), - gs:entry(H, F, [{width, EntryW}, - {height, ?LABEL_HEIGHT}, - {x, EntryX}, - {y, Y}, - {bg, {255,255,255}}, - {fg, {0,0,0}}, - {bw, 1}, - {font, ?FONT}, - {justify, left}, - {text, EntryText}, - {cursor, text}, - {setfocus, false}, - {enable, true}, - {keypress,true} - ]), - create_labels_and_entries(N - 1, T, VT, LblW, F, ListsAsStr); -create_labels_and_entries(0, RemAttrList, RemAttrValues, _LblW, _F, _ListsAsStr) -> - {RemAttrList, RemAttrValues}; -create_labels_and_entries(_N, [], [], _LblW, _F, _ListsAsStr) -> - {[], []}. - - - - -get_longest_attribute_name(AttrList) -> - get_longest_attribute_name(AttrList, 0, undefined). - - -get_longest_attribute_name([H | T], Max, Attr) -> - CurrLength = length(atom_to_list(H)), - if - CurrLength >= Max -> - get_longest_attribute_name(T, CurrLength, H); - true -> - get_longest_attribute_name(T, Max, Attr) - end; -get_longest_attribute_name([], _Max, Attr) -> - Attr. - - - - -get_window_height(N) -> - if - N >= 5 -> - ?WIN_HEIGHT; - true -> - ?WIN_HEIGHT - ((5 - N) * (?LABEL_HEIGHT + 10) + ?NEXT_BTN_HEIGHT + 8) - end. - - - -get_frame_height(N) -> - if - N >= 5 -> - ?FRAME_HEIGHT; - true -> - ?FRAME_HEIGHT - ((5 - N) * (?LABEL_HEIGHT + 10) + ?NEXT_BTN_HEIGHT + 8) - end. - - - - -set_entry_values(TabType, [H | T], [VH | VT], ListsAsStr) -> - EntryText = - case VH of - undefined when TabType =:= ets -> - ""; - _AnyValue -> - case ListsAsStr of - true -> - tv_io_lib:format("~p", [VH]); - false -> - lists:flatten(io_lib:write(VH)) - end - end, - gs:config(H, [{text, EntryText}]), - set_entry_values(TabType, T, VT, ListsAsStr); -set_entry_values(_TabType, [], [], _ListsAsStr) -> - done. diff --git a/lib/tv/src/tv_table_owner.erl b/lib/tv/src/tv_table_owner.erl deleted file mode 100644 index bccac6c236..0000000000 --- a/lib/tv/src/tv_table_owner.erl +++ /dev/null @@ -1,122 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2009. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_table_owner). - - - --export([create/5 - ]). - - --export([internal_create/3, - start/0, - init/0 - ]). - - - --define(REGISTERED_NAME, tv_table_owner). - - - -create(mnesia, _Node, _LocalNode, _TableName, _Options) -> - error; -create(ets, _Node, true, TabName, Options) -> - case catch internal_create(ets, TabName, Options) of - {TabName, Pid} when is_pid(Pid) -> - {ok, {TabName,Pid}}; - {TabNo, Pid} when is_pid(Pid) -> - {ok, {TabNo,Pid}}; - _OtherResult -> - error - end; -create(ets, Node, false, TabName, Options) -> - case catch rpc:block_call(Node, ?MODULE, internal_create, [ets, TabName, Options]) of - {TabName, Pid} when is_pid(Pid) -> - {ok, {TabName,Pid}}; - {TabNo, Pid} when is_pid(Pid) -> - {ok, {TabNo,Pid}}; - _OtherResult -> - error - end. - - - - - -internal_create(ets, TabName, Options) -> - ?MODULE:start(), - ?REGISTERED_NAME ! {create, self(), ets, TabName, Options}, - receive - {?REGISTERED_NAME, Result} -> - Result - after - 5000 -> - error - end. - - - - - - -start() -> - case whereis(?REGISTERED_NAME) of - undefined -> - ServerPid = spawn(?MODULE, init, []), - case catch register(?REGISTERED_NAME, ServerPid) of - true -> - ok; - {'EXIT', _Reason} -> - exit(ServerPid, kill), - timer:sleep(500), - start() - end; - Pid when is_pid(Pid) -> - ok - end. - - - - - - - - -init() -> - %% Currently no initialisations! - loop(). - - - - - - -loop() -> - receive - - {create, Sender, ets, TabName, Options} -> - Sender ! {?REGISTERED_NAME, (catch ets:new(TabName, Options))}, - loop(); - - - _Other -> - loop() - - end. - diff --git a/lib/tv/src/tv_utils.erl b/lib/tv/src/tv_utils.erl deleted file mode 100644 index 799e3994cb..0000000000 --- a/lib/tv/src/tv_utils.erl +++ /dev/null @@ -1,179 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1998-2012. All Rights Reserved. -%% -%% The contents of this file are subject to the Erlang Public License, -%% Version 1.1, (the "License"); you may not use this file except in -%% compliance with the License. You should have received a copy of the -%% Erlang Public License along with this software. If not, it can be -%% retrieved online at http://www.erlang.org/. -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and limitations -%% under the License. -%% -%% %CopyrightEnd% --module(tv_utils). --compile([{nowarn_deprecated_function,{gs,config,2}}, - {nowarn_deprecated_function,{gs,create,3}}, - {nowarn_deprecated_function,{gs,destroy,1}}]). - - - --export([notify/3]). - - - - %% Minimum size of help windows --define(wwin, 300). --define(hwin, 180). - - %% Button sizes --define(wbut, 60). --define(hbut, 30). - --define(pad, 10). - - -%---------------------------------------- -% notify(S,Strings) -> ok -% S = pid() GS -% Strings = string() | [string()] -% A notification window contains a message to the user. -% Will lock the GUI until the user confirms the message by -% pressing the 'Ok' button. -%---------------------------------------- -notify(S,Title,Strings) -> - W = required_width(Strings, ?wwin), - Htop = round(2 * ?hwin / 3), - Hbot = ?hwin - Htop, - - %% Open a new window - Win = gs:create(window,S,[{width, W}, - {height, ?hwin}, - {title, Title}, - {data, notifywin} - ]), - - %% Top frame containing a label - Top = gs:create(frame,Win,[{width, W}, - {height, Htop}, - {x, 0}, - {y, 0}, - {data, notifywin}, - {keypress, true} - ]), - - Lbl = gs:create(label,Top,[{width,W}, - {height, Htop - 2 * ?pad}, - {x, 0}, - {y, ?pad}, - {align, c}, - {justify, center}, - {data, notifywin}, - {keypress, true} - ]), - - gs:config(Lbl, {label, {text, insert_newlines(Strings)}}), - - %% Bottom frame containing an 'Ok' button - Bot = gs:create(frame,Win,[{width, W}, - {height, Hbot}, - {x, 0}, - {y, Htop} - ]), - gs:create(button,Bot,[{width, ?wbut}, - {height, ?hbut}, - {x, W / 2 - ?wbut/2}, - {y, Hbot / 2 - ?hbut / 2}, - {label, {text, "OK"}}, - {data, notifywin}, - {keypress, true}]), - - gs:config(Win, [{map,true}]), - - event_loop(Win,null). - - - - -insert_newlines([String|Rest]) when is_list(String), Rest=/=[]-> - String ++ "\n" ++ insert_newlines(Rest); -insert_newlines([Last]) -> - [Last]; -insert_newlines(Other) -> - Other. - - - - -event_loop(Win,Entry) -> - receive - - %% - %% Notify window - %% - - %% 'Ok' pressed in notify window - {gs,_Obj,_Event,notifywin,["OK"|_]} -> - gs:destroy(Win), - ok; - - %% 'Window manager destroy' received in notify window - {gs,_Obj,destroy,notifywin,_} -> - gs:destroy(Win), - ok; - - %% 'Return' pressed in notify or confirm window - {gs,_Obj,_Event,helpwin,['Return'|_]} -> - gs:destroy(Win), - ok; - - - %% - %% Common or partly common events - %% - - %% 'Window manager destroy' received in notify, - %% confirm,confirm_exit or request window - {gs,_Obj,destroy,_,_} -> - gs:destroy(Win), - cancel; - - %% Flush any other GS events - {gs,_Obj,_Event,_Data,_Arg} -> - event_loop(Win,Entry) - end. - - - - -%---------------------------------------- -% required_width(Strings,Min) -> Req -% Strings = string() | [string()] -% Min = Req = integer() -% Returns the minimum required width in pixels for a help window, -% which is the maximum of Min and the required width for Strings. -% NOTE: Font dependant really! -%---------------------------------------- -required_width([First|Rest],Min) when is_list(First) -> - Req = 7*length(First), % 7 pixels per character - if - Req>Min -> - required_width(Rest,Req); - true -> - required_width(Rest,Min) - end; -required_width([],Min) -> - Min; -required_width(String,Min) -> - Req = 7*length(String), - if - Req>Min -> - Req; - true -> - Min - end. - diff --git a/lib/tv/vsn.mk b/lib/tv/vsn.mk deleted file mode 100644 index 59d124a3b7..0000000000 --- a/lib/tv/vsn.mk +++ /dev/null @@ -1 +0,0 @@ -TV_VSN = 2.1.4.10 diff --git a/system/doc/definitions/term.defs b/system/doc/definitions/term.defs index f3d6f865d2..6091a46a20 100644 --- a/system/doc/definitions/term.defs +++ b/system/doc/definitions/term.defs @@ -1,8 +1,6 @@ [{"agent","agent","An entity that terminates a management protocol in the Network Element.","mbj"}, {"API","API","Application Programming Interface. The interface towards an application. Usually this is a set of functions available, but can also be a set of messages sent to or from an application.","mbj"}, {"application","application","A collection of resources which is required to offer a specific service.","mbj"}, -{"appmon","Application Monitor","A graphical node and application process tree viewer. See also appmon.","mbj"}, -{"Appmon","Appmon","Application name for the Application Monitor within Erlang/OTP. A graphical node and process viewer.","mbj"}, {"app callback","application callback module","A module which is called when the application is started, and when it has stopped. Every application has one application callback module.","mbj"}, {"AC","application controller","A process which coordinates all operations on applications.","mbj"}, {"app master","application master","The application master is a process that monitors the application. It is provided by the Erlang run-time system. Every application has an application master process.","mbj"}, @@ -137,7 +135,6 @@ the module Erlang in the application kernel","kenneth"}, {"pattern matching","pattern matching","A basic mechanism in Erlang for assigning values to variables and for controlling the flow of a program.","kenneth"}, {"permanent child","permanent child","A supervised process which always is restarted when it dies.","mbj"}, {"Pid","Pid","Process Identifier. A data type in Erlang for storing process references. The process identity of the process displayed in the line.","kenneth"}, -{"Pman","Pman","Module and application name for the Process Trace Tool.","olin"}, {"point","point","A unit used to indicate the size of a typeface. Equal to 1/72 inches.","jocke"}, {"pointer","pointer","A pointer tells where data is stored. Memory pointers are not used in Erlang.","kent"}, {"port","port","A data type in Erlang. Ports provide the basic mechanism for communication with the external world.","peterl"}, @@ -196,10 +193,8 @@ the module Erlang in the application kernel","kenneth"}, {"sup_bridge","supervisor bridge"," A behaviour used to connect a process, or subsystem, to a supervisor tree.","mbj"}, {"SASLlong","System Architecture Support Libraries (SASL)","An Erlang/OTP application which contains services for error logging, release handling and report browsing.","mbj"}, {".config","system configuration file","A file which specifies configuration parameters for the applications in the system.","mbj"}, {"table lock","table lock","Table locks are locks which are set on whole tables. They may either be read locks or write locks.","hakan"}, -{"Table Visualizer","Table Visualizer","A tool which enables the user to examine ETS and Mnesia tables.","olin"}, {"temporary child","temporary child","A supervised process which is never restarted when it dies.","mbj"}, {"term","term","The super type of all Erlang types.","kenneth"}, -{"Toolbar","Toolbar","A tool that provides an simplistic interface to the other various Erlang/OTP tools","olin"}, {"tools","tools","An application within Erlang/OTP which contains the tools which are not applications themselves.","olin"}, {"transaction","transaction","Transactions groups a set of database accesses into an atomic unit. All transactions has the ACID (atomicity, concistency, isolation and durability) properties.","hakan"}, {"transient child","transient child","A supervised process which is restarted if it dies non-normally.","mbj"}, |